iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Java实现经典游戏飞机大战的代码怎么写
  • 226
分享到

Java实现经典游戏飞机大战的代码怎么写

2023-06-29 03:06:32 226人浏览 泡泡鱼
摘要

这篇文章主要讲解了“Java实现经典游戏飞机大战的代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java实现经典游戏飞机大战的代码怎么写”吧!主要设计 用Swing库做可视化界面鼠

这篇文章主要讲解了“Java实现经典游戏飞机大战的代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java实现经典游戏飞机大战的代码怎么写”吧!

    主要设计

    用Swing库做可视化界面

    鼠标控制战斗机移动

    线程实现画面刷新。

    用流实现音乐播放。

    创造一个飞机, 并且放在场景下方。

    管理场景所有的飞机、子弹、道具移动

    管理场景所有的子弹的发射

    生成敌方飞机算法

    分数计算算法

    功能截图

    游戏开始

    Java实现经典游戏飞机大战的代码怎么写

    战斗效果:

    Java实现经典游戏飞机大战的代码怎么写

    代码实现

    启动类

    public class Main {    public static void main(String[] args) {        // 创建窗口        JFrame frame = new JFrame("飞机大战");        // 添加 JPanel        Data.canvas = new Canvas(frame);        frame.setContentPane(Data.canvas);        // 初始化 Data        Data.init();        // 设置图标        frame.setIconImage(Load.image("ICON.png"));        // 设置窗口可见        frame.setVisible(true);        // 获取标题栏的高度和宽度        Data.TITLE_BOX_HEIGHT = frame.getInsets().top;        // 设置大小        frame.setSize(Data.WIDTH, Data.HEIGHT + Data.TITLE_BOX_HEIGHT);        // 窗口大小固定        frame.setResizable(false);        // 窗口居中显示        frame.setLocationRelativeTo(frame.getOwner());        // 窗口关闭时结束程序        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);        // 播放背景音乐        Load.sound("background").loop(Clip.LOOP_CONTINUOUSLY);    }}

    核心类

    public class Game implements Scenes {    // 玩家 BOSS    Aircraft player, boss;    // 敌人    List<Aircraft> enemy;    // 玩家子弹 敌人子弹 道具列表    List<Bullet> bulletPlayer, bulletEnemy, bulletBuff;    // 玩家生命 生命 < 0 时死亡    // int life = Data.LIFE;    // 当前关卡 当前分数    int checkpoint = 1, fraction = 0;    // 飞机的飞行方向, 此处需要注意,监听按键来控制飞机移动时,不应该单纯的按键按下一次就执行一次,因为键盘按下不松开,飞机应该一直向某个方向移动,直到按键被放开    boolean left = false, right = false, down = false, up = false;    // fps, 记录当前帧数    int fps = 0;    // 提示的 x 坐标    int tipsX = -1000;    public Game() {        // 创造一个飞机, 并且放在场景下方, 玩家的角度属性不会使用        player = new Aircraft(Data.playerAircraftImage, Data.playerDeathImage, Data.SPEED, 0, Data.WIDTH / 2 - 40, Data.HEIGHT - 100);        // 设置飞机碰撞点,因为游戏采用的矩形碰撞检测,会出现很多误差,所以手动设置碰撞矩形,不采用图片的大小, 这个碰撞的坐标是相对于图片位置的相对坐标        player.upperLeft = new Point(15, 15);        player.lowerRight = new Point(75, 75);        // 初始化列表        bulletPlayer = new ArrayList<>();        bulletEnemy = new ArrayList<>();        bulletBuff = new ArrayList<>();        enemy = new ArrayList<>();    }    public void onKeyDown(int keyCode) {        if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP)            up = true;        if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN)            down = true;        if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT)            left = true;        if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT)            right = true;    }    public void onKeyUp(int keyCode) {        if (keyCode == KeyEvent.VK_W || keyCode == KeyEvent.VK_UP)            up = false;        if (keyCode == KeyEvent.VK_S || keyCode == KeyEvent.VK_DOWN)            down = false;        if (keyCode == KeyEvent.VK_A || keyCode == KeyEvent.VK_LEFT)            left = false;        if (keyCode == KeyEvent.VK_D || keyCode == KeyEvent.VK_RIGHT)            right = false;    }    public void onMouse(int x, int y, int struts) {    }    public void draw(Graphics g) {        if (fps == 0) {            left = right = up = down = false;        }        // 绘制一次 fps + 1        fps++;        // 飞机移动        move();        // 子弹发射        attack();        // 敌方飞机生成        generate();        // 失效对象销毁        remove();        // 绘制背景        Data.background.show(g);        // 绘制我方飞机        if(player != null)            player.draw(g);        // 绘制BOSS        if (boss != null) boss.draw(g);        // 绘制敌方飞机        for (Aircraft a : enemy)            a.draw(g);        // 绘制我发子弹        for (Bullet b : bulletPlayer)            b.draw(g);        // 绘制敌方子弹        for (Bullet b : bulletEnemy)            b.draw(g);        // 绘制道具        for (Bullet d : bulletBuff)            d.draw(g);        g.drawString("分数 : " + fraction, 200, 200);        if (boss != null) {            g.drawImage(Data.hpBox, 10, -10, null);            g.setColor(Color.orange);            g.fillRect(106, -2, (int) (300 * ((boss.hp * 1.0) / 300)), 15);        }        // 绘制boss出现的图片        if (tipsX > -900 && tipsX < 900) {            g.drawImage(Data.tips, tipsX, 200, null);        }    }    // 管理场景所有的飞机、子弹、道具移动    void move() {        if (player != null) {            // 这里这个坐标,是为了让敌人发射子弹时定位用的            Data.x = player.x;            Data.y = player.y;            // 飞机向上移动, 这里还限制了飞机的范围,不让其飞出屏幕外            if (up) player.move(0, -player.speed);            if (player.y < 0) player.y = 0;            // 飞机向下移动            if (down) player.move(0, player.speed);            if (player.y > Data.HEIGHT - player.height) player.y = Data.HEIGHT - player.height;            // 飞机向左移动            if (left) player.move(-player.speed, 0);            if (player.x < 0) player.x = 0;            // 飞机向右移动            if (right) player.move(player.speed, 0);            if (player.x > Data.WIDTH - player.width) player.x = Data.WIDTH - player.width;        }        // boss 移动        if (boss != null) boss.move();        // 我方子弹的移动        for (Bullet bullet : bulletPlayer)            bullet.move();        // 敌方子弹的移动        for (Bullet bullet : bulletEnemy)            bullet.move();        // 道具的移动        for (Bullet bullet : bulletBuff)            bullet.move();        // 地方飞机的移动,包括BOSS        for (Aircraft air : enemy)            air.move();        // BUFF 移动        for (Bullet b : bulletBuff)            b.move();    }    void remove() {        Random random = new Random();        // 子弹销毁        for (int i = 0; i < bulletEnemy.size(); ) {            if (bulletEnemy.get(i).isRemove()) {                bulletEnemy.remove(i);            } else i++;        }        for (int i = 0; i < bulletPlayer.size(); ) {            if (bulletPlayer.get(i).isRemove()) {                bulletPlayer.remove(i);            } else i++;        }        for (int i = 0; i < bulletBuff.size(); ) {            if (bulletBuff.get(i).isRemove()) {                bulletBuff.remove(i);            } else i++;        }        // 敌人销毁        for (int i = 0; i < enemy.size(); ) {            if (enemy.get(i).isRemove()) {                // 生成道具                if (random.nextInt(100) > 80) {                    if (random.nextInt(100) > 60)                        bulletBuff.add(new Buff(Buff.BUFF2, enemy.get(i).x, enemy.get(i).y));                    else                        bulletBuff.add(new Buff(Buff.BUFF1, enemy.get(i).x, enemy.get(i).y));                }                Load.playSound("死亡");                // 击杀一个敌人增加 1 分,不整这么多花里胡哨的                fraction += 10;                if (fraction / 100 == checkpoint) {                    boss = new Boss2();                    checkpoint += 1;                    Load.playSound("警告");                    new Thread(() -> {                        tipsX = -Data.WIDTH;                        try {                            for (int n = 0; n < Data.WIDTH / 2; n++) {                                tipsX += 2;                                Thread.sleep(4);                            }                            Thread.sleep(2000);                            for (int n = 0; n < Data.WIDTH / 4; n++) {                                tipsX += 4;                                Thread.sleep(4);                            }                        } catch (InterruptedException e) {                            e.printStackTrace();                        }                        tipsX = -1000;                    }).start();                }                enemy.remove(i);            } else i++;        }        // boss销毁        if (boss != null) {            // boss 死亡掉落4个buff            if (boss.isRemove()) {                bulletBuff.add(new Buff(Buff.BUFF2, boss.x + boss.width / 2, boss.y + boss.height / 2));                bulletBuff.add(new Buff(Buff.BUFF1, boss.x + boss.width / 2, boss.y + boss.height / 2));                bulletBuff.add(new Buff(Buff.BUFF2, boss.x + boss.width / 2, boss.y + boss.height / 2));                bulletBuff.add(new Buff(Buff.BUFF1, boss.x + boss.width / 2, boss.y + boss.height / 2));                boss = null;            }        }        boolean isPlay = false;        // 检测我方子弹碰撞        for (int i = 0; i < bulletPlayer.size(); i++) {            Point point = bulletPlayer.get(i).getPoint();            if (bulletPlayer.get(i).buffetIndex > 1) continue;            // 检测子弹是否击中boss            if (boss != null && boss.hp > 0) {                Point rect[] = boss.getCollisionRect();                if (Rect.isInternal(point.x, point.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {                    boss.hp -= bulletPlayer.get(i).struts;                    bulletPlayer.get(i).buffetIndex = 1;                    bulletPlayer.get(i).speed = 5;                    if (boss.hp <= 0) {                        boss.imgIndex = 10;                    }                    if (!isPlay) {                        isPlay = true;                        Load.playSound("击中");                    }                    continue;                }            }            for (Aircraft a : enemy) {                Point rect[] = a.getCollisionRect();                if (a.hp < 0) continue;                if (Rect.isInternal(point.x, point.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {                    if (!isPlay) {                        isPlay = true;                        Load.playSound("击中");                    }                    a.hp -= bulletPlayer.get(i).struts;                    bulletPlayer.get(i).buffetIndex = 1;                    bulletPlayer.get(i).speed = 5;                    if (a.hp < 0) {                        a.kill();;                        a.speed = 1;                    }                    break;                }            }        }        Point rect[], point;        // 检测敌方子弹碰撞        if(player != null) {            rect = player.getCollisionRect();            if (player != null && player.hp > 0) {                for (Bullet b : bulletEnemy) {                    point = b.getPoint();                    if (Rect.isInternal(point.x, point.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {                        player.hp -= b.struts;                        player.kill();                        death();                    }                }            }        }        // 吃BUFF        if (player != null && player.hp > 0) {            rect = player.getCollisionRect();            for (Bullet buff : bulletBuff) {                Point p = buff.getPoint();                if (Rect.isInternal(p.x, p.y, rect[0].x, rect[0].y, rect[1].x, rect[1].y)) {                    buff.x = -100;                    if (buff.struts == Buff.BUFF1)                        player.setBuff(16, 0);                    else                        player.setBuff(0, 16);                }            }        }        // 飞机之间的碰撞        if(player != null) {            for (Aircraft air : enemy) {                int x = air.x + air.width / 2, y = air.y + air.height / 2;                if(Rect.isInternal(x, y, player.x, player.y, player.width, player.height)) {                    player.kill();                    air.kill();                    Load.playSound("失败");                    death();                }            }        }    }    // 管理场景所有的子弹的发射    void attack() {        // 我方飞机3帧发射一次        if (player != null && player.hp > 0) {            if (!player.isRemove() && fps % 3 == 0)                bulletPlayer.addAll(Arrays.asList(player.attack()));        }        // 敌方飞机发射子弹        if (fps % 5 == 0)            for (Aircraft em : enemy)                bulletEnemy.addAll(Arrays.asList(em.attack()));        // boss发射子弹        if (boss != null) bulletEnemy.addAll(Arrays.asList(boss.attack()));    }    // 生成敌方飞机    void generate() {        // BOSS 存在时不生成小飞机        if (boss != null) return;        if (fps % 100 != 0 && fps >= 1) return;        Random random = new Random();        int rn = random.nextInt(100) + 1;        int[] hp = {(fps / 2000) + 1 * checkpoint, (fps / 2000) + 2 * checkpoint, (fps / 2000) + 5 * checkpoint, (fps / 2000) + 8 * checkpoint, (fps / 2000) + 11 * checkpoint};        switch (rn / 10) {            case 1: {                enemy.add(new Enemy(Data.enemyAircraftImages[4], Data.enemyDeathImages[4], 2, 90, random.nextInt(300) + 100, -150, hp[4]));                return;            }            case 2: {                enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 90, 100, -150, hp[3]));                enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 90, 380, -150, hp[3]));                return;            }            case 3: {                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 10, -150, hp[2]));                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 90, 240, -150, hp[0]));                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 430 + 100, -150, hp[2]));                return;            }            case 4: {                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 0, -150, hp[2]));                enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 90, 130, -150, hp[3]));                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 90, 300, -150, hp[0]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 90, 450, -150, hp[1]));                return;            }            case 5: {                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 110, 400, random.nextInt(100) - 200, hp[0]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 110, 480, random.nextInt(100) - 200, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 110, 560, random.nextInt(100) - 200, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 110, 640, random.nextInt(100) - 200, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 110, 720, random.nextInt(100) - 200, hp[0]));                return;            }            case 6: {                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, -440, random.nextInt(100) - 200, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 70, -320, random.nextInt(100) - 200, hp[0]));                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 70, -240, random.nextInt(100) - 200, hp[0]));                enemy.add(new Enemy(Data.enemyAircraftImages[0], Data.enemyDeathImages[0], 2, 70, -170, random.nextInt(100) - 200, hp[0]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, -100, random.nextInt(100) - 200, hp[1]));                return;            }            case 7: {                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, 30, random.nextInt(100) - 200, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 70, 100, random.nextInt(100) - 200, hp[2]));                enemy.add(new Enemy(Data.enemyAircraftImages[3], Data.enemyDeathImages[3], 2, 70, 200, random.nextInt(100) - 200, hp[3]));                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 70, 300, random.nextInt(100) - 200, hp[2]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 70, 430, random.nextInt(100) - 200, hp[1]));                return;            }            case 8: {                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 30, -100, -150, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 90, 240, -150, hp[1]));                enemy.add(new Enemy(Data.enemyAircraftImages[1], Data.enemyDeathImages[1], 2, 120, 615 + 100, -150, hp[1]));                return;            }            case 9: {                enemy.add(new Enemy(Data.enemyAircraftImages[4], Data.enemyDeathImages[4], 2, 90, 100 + random.nextInt(100), -150, hp[4]));                enemy.add(new Enemy(Data.enemyAircraftImages[4], Data.enemyDeathImages[4], 2, 90, 415 - random.nextInt(100), -150, hp[4]));                return;            }            case 10: {                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 120 + random.nextInt(100), -150, hp[2]));                enemy.add(new Enemy(Data.enemyAircraftImages[2], Data.enemyDeathImages[2], 2, 90, 395 - random.nextInt(100), -150, hp[2]));            }        }    }    void death() {        new Thread(() ->{            try {                player = null;                Thread.sleep(3000);                Data.canvas.switchScenes("Home");            } catch (InterruptedException e) {                e.printStackTrace();            }        }).start();    }}

    核心算法

    @SuppressWarnings("serial")public class GameMenu extends JFrame {GameMenu thisMenu;private JPanel contentPane;TestWindowBuilder fatherMenu;boolean isCheating;CMusic battleBGM,questCompleteBGM;int pressingW;int pressingS;int pressingA;int pressingD;int pressingJ;int pressingK;int playingSave;int playingProfessionID;int g_int1;Role playingRole;double playerX;//0-734double playerY;//0-312int rotationSpeed=15;//旋转速度int movementSpeed=3;//移动速度int NORMalSpeed=3;int attackSpeed=3;//攻击速度int activeCounter;int attackCounter;int defenceCounter=0;int perfectDefenceTime=0;//完美格挡剩余时间(在敌人发动攻击前0.1秒启动的格挡能让格挡所需体力消耗减少到原来的十分之一)int defenceCooldown=0;//格挡冷却 这样阻止了玩家疯狂地启动/停止格挡int playerWidth=50;int playerHeight=50;int gamePhaseTimeCounter=0;int gamePhaseTimeCounter2=0;int endPhase=6*4;//游戏通关的阶段int gamePhase=0;//游戏开始时的阶段(正常玩家从第一关开始打,阶段应当从0开始)String humanIconContorler;JPanel viewMap;//玩家有两个Label 一个在boss上方 一个在boss下方int usingPlayerLabel=0;JLabel[] playerLabel=new JLabel[2];JLabel lblNewLabel_6;JLabel lblNewLabel_7;JLabel[] GiantBackGround=new JLabel[400];JLabel bossLabel;JLabel lblNewLabel_2;JLabel lblNewLabel_3;JLabel lblNewLabel_2B;JLabel lblNewLabel_3B;JLabel MobHead;JLabel MobName;JLabel MobHPBar;JLabel MobHPText;JLabel TitleLabelT;JLabel SubTitleLabelT;JLabel TitleLabel;JLabel SubTitleLabel;JPanel Titles;JLabel placeNameLabel;JLabel groundArrayLabel;JLabel placeChangeBlack;//换场地时的黑幕JLabel placeChangeBlack_1;//换场地时的黑幕(用于属性条)int maxProCount=5000;JLabel[] proLabel=new JLabel[maxProCount];boolean[] proIsUsed=new boolean[maxProCount];proLink proHead=new proLink();int existProCount;int maxParCount=5000;JLabel[] parLabel=new JLabel[maxParCount];boolean[] parIsUsed=new boolean[maxParCount];parLink parHead=new parLink();int existParCount;int existPro=0;int proTeamPointer=0;//队列指针 0-499int existPar=0;int parTeamPointer=0;JPanel panel;Mob boss;int allPhaseCount=1;int gameTime=0;Map map;public GameMenu(TestWindowBuilder fatherMenu,boolean isCheating,int professionID,int partID,int playingSave){this.setTitle("CARROT MAN II");this.setIconImage(new ImageIcon("resource/down4.png").getImage());for(int i=0;i<proIsUsed.length;++i)proIsUsed[i]=false;for(int i=0;i<parIsUsed.length;++i)parIsUsed[i]=false;playingProfessionID=professionID;this.playingSave=playingSave;gamePhase=(partID-1)*6;this.fatherMenu=fatherMenu;this.isCheating=isCheating;//this.isCheating=true;//测试用g_int1=0;playerX=50;playerY=200;thisMenu=this;activeCounter=0;attackCounter=0;setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);setBounds(fatherMenu.getBounds());contentPane = new JPanel();contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));setContentPane(contentPane);contentPane.setLayout(null);//转场黑幕 第100层placeChangeBlack=new JLabel("");placeChangeBlack.setIcon(new ImageIcon("resource/black.png"));placeChangeBlack.setVisible(true);placeChangeBlack_1=new JLabel("");placeChangeBlack_1.setIcon(new ImageIcon("resource/black.png"));placeChangeBlack_1.setVisible(true);placeChangeBlack.setBounds(0, 0, 784, 362);placeChangeBlack_1.setBounds(0, 0, 784, 362);//contentPane.add(placeChangeBlack);JPanel panel_1 = new JPanel();panel_1.setBounds(0, 0, 784, 50);contentPane.add(panel_1);panel_1.setLayout(null);panel_1.add(placeChangeBlack_1);JLabel lblNewLabel = new JLabel("");//头像lblNewLabel.setBounds(0, 0, 50, 50);lblNewLabel.setIcon(new ImageIcon("resource/HPBarHead.png"));panel_1.add(lblNewLabel);lblNewLabel_2B = new JLabel("");//血量字lblNewLabel_2B.setForeground(Color.WHITE);lblNewLabel_2B.setHorizontalAlignment(SwinGConstants.CENTER);lblNewLabel_2B.setBounds(50, 0, 200, 25);panel_1.add(lblNewLabel_2B);lblNewLabel_3B = new JLabel("");//体力字lblNewLabel_3B.setForeground(Color.WHITE);lblNewLabel_3B.setHorizontalAlignment(SwingConstants.CENTER);lblNewLabel_3B.setBounds(50, 25, 200, 25);panel_1.add(lblNewLabel_3B);lblNewLabel_2 = new JLabel("");//血条lblNewLabel_2.setBounds(50, 0, 200, 25);lblNewLabel_2.setIcon(new ImageIcon("resource/RedBar.png"));panel_1.add(lblNewLabel_2);lblNewLabel_3 = new JLabel("");//体力条lblNewLabel_3.setBounds(50, 25, 200, 25);lblNewLabel_3.setIcon(new ImageIcon("resource/GreenBar.png"));panel_1.add(lblNewLabel_3);JLabel lblNewLabel_1 = new JLabel("");//血条体力条背景lblNewLabel_1.setHorizontalAlignment(SwingConstants.CENTER);lblNewLabel_1.setBounds(50, 0, 200, 50);lblNewLabel_1.setIcon(new ImageIcon("resource/HPBarBG.png"));panel_1.add(lblNewLabel_1);JLabel lblNewLabel_4 = new JLabel("J");lblNewLabel_4.setForeground(Color.GRAY);lblNewLabel_4.setFont(new Font("黑体", Font.BOLD, 30));lblNewLabel_4.setHorizontalAlignment(SwingConstants.CENTER);lblNewLabel_4.setBounds(250, 0, 50, 50);panel_1.add(lblNewLabel_4);JLabel lblNewLabel_5 = new JLabel("");lblNewLabel_5.setFont(new Font("宋体", Font.PLAIN, 20));lblNewLabel_5.setHorizontalAlignment(SwingConstants.CENTER);lblNewLabel_5.setBounds(250, 0, 50, 50);lblNewLabel_5.setIcon(new ImageIcon("resource/skillJ.png"));panel_1.add(lblNewLabel_5);JLabel skillKLabel = new JLabel("K");skillKLabel.setForeground(Color.GRAY);skillKLabel.setFont(new Font("黑体", Font.BOLD, 30));skillKLabel.setHorizontalAlignment(SwingConstants.CENTER);skillKLabel.setBounds(300, 0, 50, 50);panel_1.add(skillKLabel);JLabel skillKLabel2 = new JLabel("");skillKLabel2.setFont(new Font("宋体", Font.PLAIN, 20));skillKLabel2.setHorizontalAlignment(SwingConstants.CENTER);skillKLabel2.setBounds(300, 0, 50, 50);skillKLabel2.setIcon(new ImageIcon("resource/skillK.png"));panel_1.add(skillKLabel2);placeNameLabel = new JLabel("");placeNameLabel.setFont(new Font("宋体", Font.PLAIN, 30));placeNameLabel.setHorizontalAlignment(SwingConstants.CENTER);placeNameLabel.setBounds(350, 0, 200, 50);panel_1.add(placeNameLabel);JLabel placeNameLabel2 = new JLabel("");placeNameLabel2.setHorizontalAlignment(SwingConstants.CENTER);placeNameLabel2.setBounds(350, 0, 200, 50);placeNameLabel2.setIcon(new ImageIcon("resource/placeNameBackGround.png"));panel_1.add(placeNameLabel2);MobHead = new JLabel("");MobHead.setHorizontalAlignment(SwingConstants.CENTER);MobHead.setBounds(550, 0, 50, 50);MobHead.setIcon(new ImageIcon("resource/MobHead_0.png"));panel_1.add(MobHead);MobName = new JLabel("");MobName.setHorizontalAlignment(SwingConstants.CENTER);MobName.setBounds(600, 0, 184, 25);panel_1.add(MobName);MobHPText = new JLabel("");MobHPText.setForeground(Color.WHITE);MobHPText.setHorizontalAlignment(SwingConstants.CENTER);MobHPText.setBounds(600, 25, 184, 25);panel_1.add(MobHPText);MobHPBar = new JLabel("");MobHPBar.setHorizontalAlignment(SwingConstants.CENTER);MobHPBar.setBounds(600, 25, 184, 25);MobHPBar.setIcon(new ImageIcon("resource/RedBar.png"));panel_1.add(MobHPBar);JLabel MobNameBG = new JLabel("");MobNameBG.setHorizontalAlignment(SwingConstants.CENTER);MobNameBG.setBounds(600, 0, 184, 50);MobNameBG.setIcon(new ImageIcon("resource/MobNameBG.png"));panel_1.add(MobNameBG);panel = new JPanel();panel.setBounds(0, 50, 784, 362);contentPane.add(panel);viewMap=panel;panel.setLayout(null);panel.add(placeChangeBlack);lblNewLabel_7 = new JLabel("");//玩家tryingFace指示器(暂时停用)lblNewLabel_7.setBounds((int)playerX, (int)playerY, 5, 5);lblNewLabel_7.setIcon(new ImageIcon("resource/moveDeraction2.png"));lblNewLabel_7.setVisible(false);panel.add(lblNewLabel_7);//第99层//标题TitleLabelT = new JLabel("");TitleLabelT.setFont(new Font("黑体", Font.PLAIN, 45));TitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);TitleLabelT.setBounds(100, 50, 584, 50);TitleLabelT.setVisible(true);panel.add(TitleLabelT);//副标题SubTitleLabelT = new JLabel("");SubTitleLabelT.setFont(new Font("黑体", Font.PLAIN, 25));SubTitleLabelT.setHorizontalAlignment(SwingConstants.CENTER);SubTitleLabelT.setBounds(100, 100, 584, 50);SubTitleLabelT.setVisible(true);panel.add(SubTitleLabelT);//预先创建粒子效果的Label,第6层for(int i=0;i<maxParCount;++i){parLabel[i]=new JLabel("");panel.add(parLabel[i]);}//boss上方的玩家,第5层playerLabel[1]=new JLabel("");playerLabel[1].setHorizontalAlignment(SwingConstants.CENTER);playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerHeight, playerWidth);playerLabel[1].setIcon(new ImageIcon("resource/HumanRight_0.png"));playerLabel[1].setVisible(false);panel.add(playerLabel[1]);//bossLabel,第4.5层bossLabel = new JLabel("");panel.add(bossLabel);//boss下方的玩家,第4层playerLabel[0]=new JLabel("");playerLabel[0].setHorizontalAlignment(SwingConstants.CENTER);playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerHeight, playerWidth);playerLabel[0].setIcon(new ImageIcon("resource/HumanRight_0.png"));playerLabel[0].setVisible(true);panel.add(playerLabel[0]);//玩家面向方向指示器,第3层lblNewLabel_6 = new JLabel("");lblNewLabel_6.setBounds((int)playerX, (int)playerY, 5, 5);lblNewLabel_6.setIcon(new ImageIcon("resource/moveDeraction.png"));panel.add(lblNewLabel_6);//预先创建发射物的Label,第2层for(int i=0;i<maxProCount;++i){proLabel[i]=new JLabel("");panel.add(proLabel[i]);}//创建地面箭头,第1.5层groundArrayLabel=new JLabel("");groundArrayLabel.setBounds(709,156, 50, 50);groundArrayLabel.setIcon(new ImageIcon("resource/groundArray.png"));groundArrayLabel.setVisible(false);panel.add(groundArrayLabel);//创建地面Label,第1层for(int i=0;i<400;++i){GiantBackGround[i]=new JLabel("");GiantBackGround[i].setVisible(true);panel.add(GiantBackGround[i]);}playingRole=new Role(professionID,thisMenu);KeyLininter kl=new KeyLininter(thisMenu);        this.addKeyListener(kl);map=new Map(thisMenu);map.start();}//发射物相关public int addProjectile(Projectile pro){existProCount=proHead.getLength();if(existProCount<maxProCount){proHead.insert(new proLink(pro));int tempFinder=0;for(int i=0;i<maxProCount;++i){if(proIsUsed[i]==false){proIsUsed[i]=true;tempFinder=i;break;}}return tempFinder;}return -1;}public void removeProjectile(int id){proLabel[id].setVisible(false);proIsUsed[id]=false;}public void allProjectilesFly(){proLink tempnode=proHead;while(tempNode.next!=null){tempNode=tempNode.next;tempNode.data.doFly();}}//发射物相关结束//粒子效果相关public int addParticle(particle par){existParCount=parHead.getLength();if(existParCount<maxParCount){parHead.insert(new parLink(par));int tempFinder=0;for(int i=0;i<maxParCount;++i){if(parIsUsed[i]==false){parIsUsed[i]=true;tempFinder=i;break;}}return tempFinder;}return -1;}public void removeParticle(int id){parLabel[id].setVisible(false);parIsUsed[id]=false;}public void allParticlesFly(){parLink tempNode=parHead;while(tempNode.next!=null){tempNode=tempNode.next;tempNode.data.doFly();}}public void checkPlayerLocation()//检测玩家位置 如果超出地图 则拉回地图{if(playerX<playerWidth/2)playerX=playerWidth/2;if(playerX>784-playerWidth/2)playerX=784-playerWidth/2;if(playerY<playerHeight/2)playerY=playerHeight/2;if(playerY>362-playerHeight/2)playerY=362-playerHeight/2;}@SuppressWarnings("unused")public void saveData(int part){if(Integer.parseInt(fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1])<part){String[] temp= {fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[0],fatherMenu.saveSelectMenu.savedData[playingSave].split(" ")[1]};fatherMenu.saveSelectMenu.savedData[playingSave]=""+playingProfessionID+" "+part;fatherMenu.saveSelectMenu.saveSaves();}}@SuppressWarnings({ "deprecation" })public void modTick()//每秒执行50次{if(attackCounter==0&&defenceCounter==0)playingRole.regenerate();if(playingRole.HP>0){//刷新体力条lblNewLabel_3.setBounds(50, 25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);lblNewLabel_3B.setText(""+(int)playingRole.energy+"/"+(int)playingRole.MaxEnergy);//刷新血条lblNewLabel_2.setBounds(50, 0, (int) (200*playingRole.HP/playingRole.MaxHP), 25);lblNewLabel_2B.setText(""+(int)playingRole.HP+"/"+(int)playingRole.MaxHP);}else if(gamePhase!=-1){boss.target=null;gamePhaseTimeCounter=0;gamePhase=-1;movementSpeed=0;TitleLabelT.setText("YOU DIED");TitleLabelT.setVisible(true);playerLabel[usingPlayerLabel].setVisible(false);lblNewLabel_6.setVisible(false);lblNewLabel_3.setBounds(50, 25, (int) (200*playingRole.energy/playingRole.MaxEnergy), 25);lblNewLabel_3B.setText(""+(int)playingRole.energy+"/"+(int)playingRole.MaxEnergy);lblNewLabel_2.setBounds(50, 0, (int) (200*playingRole.HP/playingRole.MaxHP), 25);lblNewLabel_2B.setText(""+(int)playingRole.HP+"/"+(int)playingRole.MaxHP);}++gameTime;allProjectilesFly();allParticlesFly();if(gamePhase==0){if(gamePhaseTimeCounter<50)gamePhaseTimeCounter=50;++gamePhaseTimeCounter;if(gamePhaseTimeCounter==51){System.out.println("启动控制台...");movementSpeed=0;placeChangeBlack.setBounds(0, 0, 784, 362);placeChangeBlack_1.setBounds(0, 0, 784, 362);placeChangeBlack.setVisible(true);placeChangeBlack_1.setVisible(true);TitleLabelT.setVisible(false);SubTitleLabelT.setVisible(false);groundArrayLabel.setVisible(false);for(int i=0;i<128;++i)//初始化第一关地面{String backGroundContorler="resource/ground";GiantBackGround[i].setBounds(50*(i%16),50*(int)(i/16), 50, 50);if(Math.random()<0.9)backGroundContorler=backGroundContorler+"1.png";elsebackGroundContorler=backGroundContorler+"2.png";GiantBackGround[i].setIcon(new ImageIcon(backGroundContorler));}playerX=50;playerY=200;placeNameLabel.setText(fatherMenu.textLib.textData[13]);TitleLabelT.setText(fatherMenu.textLib.textData[13]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[37]);SubTitleLabelT.setVisible(true);}if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150){placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);}if(gamePhaseTimeCounter==151){startNewBattleBGM(1);placeChangeBlack.setVisible(false);placeChangeBlack_1.setVisible(false);gamePhaseTimeCounter=0;++gamePhase;}}if(gamePhase%6==1){++gamePhaseTimeCounter;if(gamePhaseTimeCounter>=200){++gamePhase;TitleLabelT.setVisible(false);SubTitleLabelT.setVisible(false);movementSpeed=NormalSpeed;}}if(gamePhase==2){gamePhaseTimeCounter=0;boss=new Mob(1,bossLabel,thisMenu);boss.reflash();bossLabel.setVisible(true);++gamePhase;}if(gamePhase==3){if(boss.HP>0)boss.reflash();else{bossLabel.setVisible(false);MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);++gamePhase;gamePhaseTimeCounter=0;TitleLabelT.setText(fatherMenu.textLib.textData[38]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);SubTitleLabelT.setVisible(true);saveData(2);startQuestCompleteBGM();endBattleBGM();}}if(gamePhase%6==4){playingRole.percentReHP(0.005);++gamePhaseTimeCounter;if(gamePhaseTimeCounter>200){gamePhaseTimeCounter=0;++gamePhase;TitleLabelT.setText(fatherMenu.textLib.textData[40]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[41]);SubTitleLabelT.setVisible(true);gamePhaseTimeCounter2=0;}}if(gamePhase%6==5){++gamePhaseTimeCounter;if(gamePhaseTimeCounter2==0){if(gamePhaseTimeCounter>50){groundArrayLabel.setVisible(true);if(playerX>709&&playerX<759&&playerY>156&&playerY<206)//进入箭头{gamePhaseTimeCounter=0;gamePhaseTimeCounter2=1;movementSpeed=0;placeChangeBlack.setBounds(-784,0,784,362);placeChangeBlack.setVisible(true);placeChangeBlack_1.setBounds(-784,0,784,362);placeChangeBlack_1.setVisible(true);}}}if(gamePhaseTimeCounter2==1){if(gamePhaseTimeCounter>=0&&gamePhaseTimeCounter<=50){placeChangeBlack.setBounds((int)(gamePhaseTimeCounter*0.02*784-784), 0, 784, 362);placeChangeBlack_1.setBounds((int)(gamePhaseTimeCounter*0.02*784-784), 0, 784, 362);}if(gamePhaseTimeCounter==51){++gamePhase;gamePhaseTimeCounter=0;}}}if(gamePhase==6){movementSpeed=0;if(gamePhaseTimeCounter<50)gamePhaseTimeCounter=50;++gamePhaseTimeCounter;if(gamePhaseTimeCounter==51){placeChangeBlack.setBounds(0, 0, 784, 362);placeChangeBlack.setVisible(true);placeChangeBlack_1.setBounds(0, 0, 784, 362);placeChangeBlack_1.setVisible(true);TitleLabelT.setVisible(false);SubTitleLabelT.setVisible(false);groundArrayLabel.setVisible(false);for(int i=0;i<325;++i){GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);GiantBackGround[i].setIcon(new ImageIcon("resource/ground6.png"));}playerX=50;playerY=200;placeNameLabel.setText(fatherMenu.textLib.textData[14]);TitleLabelT.setText(fatherMenu.textLib.textData[14]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[42]);SubTitleLabelT.setVisible(true);}if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150){placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);}if(gamePhaseTimeCounter==151){startNewBattleBGM(2);placeChangeBlack.setVisible(false);placeChangeBlack_1.setVisible(false);gamePhaseTimeCounter=0;++gamePhase;}}if(gamePhase==8){gamePhaseTimeCounter=0;boss=new Mob(2,bossLabel,thisMenu);bossLabel.setBounds(375, 175, 100, 100);boss.reflash();bossLabel.setVisible(true);++gamePhase;}if(gamePhase==9){if(boss.HP>0)boss.reflash();else{bossLabel.setVisible(false);MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);++gamePhase;gamePhaseTimeCounter=0;TitleLabelT.setText(fatherMenu.textLib.textData[43]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);SubTitleLabelT.setVisible(true);saveData(3);startQuestCompleteBGM();endBattleBGM();}}if(gamePhase==12){movementSpeed=0;if(gamePhaseTimeCounter<50)gamePhaseTimeCounter=50;++gamePhaseTimeCounter;if(gamePhaseTimeCounter==51){placeChangeBlack.setBounds(0, 0, 784, 362);placeChangeBlack.setVisible(true);placeChangeBlack_1.setBounds(0, 0, 784, 362);placeChangeBlack_1.setVisible(true);TitleLabelT.setVisible(false);SubTitleLabelT.setVisible(false);groundArrayLabel.setVisible(false);for(int i=0;i<325;++i){GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);GiantBackGround[i].setIcon(new ImageIcon("resource/ground7.png"));}playerX=50;playerY=200;placeNameLabel.setText(fatherMenu.textLib.textData[15]);TitleLabelT.setText(fatherMenu.textLib.textData[15]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[44]);SubTitleLabelT.setVisible(true);}if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150){placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);}if(gamePhaseTimeCounter==151){startNewBattleBGM(3);placeChangeBlack.setVisible(false);placeChangeBlack_1.setVisible(false);gamePhaseTimeCounter=0;++gamePhase;}}if(gamePhase==14){gamePhaseTimeCounter=0;boss=new Mob(3,bossLabel,thisMenu);bossLabel.setBounds(375, 175, 100, 100);boss.reflash();bossLabel.setVisible(true);++gamePhase;}if(gamePhase==15){if(boss.HP>0)boss.reflash();else{bossLabel.setVisible(false);MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);++gamePhase;gamePhaseTimeCounter=0;TitleLabelT.setText(fatherMenu.textLib.textData[45]);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);SubTitleLabelT.setVisible(true);saveData(4);startQuestCompleteBGM();endBattleBGM();}}if(gamePhase==18){movementSpeed=0;if(gamePhaseTimeCounter<50)gamePhaseTimeCounter=50;++gamePhaseTimeCounter;if(gamePhaseTimeCounter==51){placeChangeBlack.setBounds(0, 0, 784, 362);placeChangeBlack.setVisible(true);placeChangeBlack_1.setBounds(0, 0, 784, 362);placeChangeBlack_1.setVisible(true);TitleLabelT.setVisible(false);SubTitleLabelT.setVisible(false);groundArrayLabel.setVisible(false);//需要修改开始for(int i=0;i<325;++i){GiantBackGround[i].setBounds(32*(i%25),32*(int)(i/25), 32, 32);GiantBackGround[i].setIcon(new ImageIcon("resource/ground8.png"));}//需要修改结束playerX=50;playerY=200;//需要修改开始placeNameLabel.setText(fatherMenu.textLib.textData[70]);TitleLabelT.setText(fatherMenu.textLib.textData[70]);TitleLabelT.setForeground(Color.LIGHT_GRAY);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[71]);SubTitleLabelT.setForeground(Color.LIGHT_GRAY);//需要修改结束SubTitleLabelT.setVisible(true);}if(gamePhaseTimeCounter>=100&&gamePhaseTimeCounter<=150){placeChangeBlack.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);placeChangeBlack_1.setBounds((int)((gamePhaseTimeCounter-100)*0.02*784), 0, 784, 362);}if(gamePhaseTimeCounter==151){startNewBattleBGM(4);//需要修改placeChangeBlack.setVisible(false);placeChangeBlack_1.setVisible(false);gamePhaseTimeCounter=0;++gamePhase;}}if(gamePhase==20){gamePhaseTimeCounter=0;boss=new Mob(4,bossLabel,thisMenu);//需要修改bossLabel.setBounds(375, 175, 100, 100);//需要修改boss.reflash();bossLabel.setVisible(true);++gamePhase;}if(gamePhase==21){if(boss.HP>0)boss.reflash();else{bossLabel.setVisible(false);MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);++gamePhase;gamePhaseTimeCounter=0;//需要修改开始TitleLabelT.setText(fatherMenu.textLib.textData[72]);TitleLabelT.setForeground(Color.LIGHT_GRAY);TitleLabelT.setVisible(true);SubTitleLabelT.setText(fatherMenu.textLib.textData[39]);TitleLabelT.setForeground(Color.LIGHT_GRAY);SubTitleLabelT.setVisible(true);//saveData(4);//需要修改完成startQuestCompleteBGM();endBattleBGM();}}if(gamePhase==endPhase){endBattleBGM();winMenu WM=new winMenu(thisMenu);WM.setVisible(true);thisMenu.setVisible(false);map.stop();}if(gamePhase==-1){if(boss.HP>0)boss.reflash();++gamePhaseTimeCounter;if(gamePhaseTimeCounter>250){endBattleBGM();loseMenu LM=new loseMenu(thisMenu);LM.setVisible(true);thisMenu.setVisible(false);map.stop();}}//刷新bossBarif(boss!=null&&gamePhase%6==3){MobHead.setIcon(new ImageIcon("resource/MobHead_"+boss.MobId+".png"));MobName.setText(""+boss.Name);MobHPBar.setBounds(600, 25, 184*boss.HP/boss.MaxHP, 25);MobHPText.setText(""+boss.HP+"/"+boss.MaxHP);}//玩家试图面向方向if(attackCounter==0&&defenceCounter==0){if(pressingD==1&&pressingW==0&&pressingS==0){playingRole.tryingFace=0;}else if(pressingD==1&&pressingW==1){playingRole.tryingFace=45;}else if(pressingW==1&&pressingA==0&&pressingD==0){playingRole.tryingFace=90;}else if(pressingW==1&&pressingA==1){playingRole.tryingFace=135;}else if(pressingA==1&&pressingW==0&&pressingS==0){playingRole.tryingFace=180;}else if(pressingA==1&&pressingS==1){playingRole.tryingFace=225;}else if(pressingS==1&&pressingA==0&&pressingD==0){playingRole.tryingFace=270;}else if(pressingS==1&&pressingD==1){playingRole.tryingFace=315;}}playingRole.setFace();humanIconContorler="resource/human_"+playingRole.face;if(attackCounter==0&&defenceCounter==0&&(pressingW==1||pressingS==1||pressingA==1||pressingD==1))//进行转向{double d_angle=(playingRole.facingAngle-playingRole.tryingFace+360)%360;//0-180为顺时针if(d_angle<=rotationSpeed||d_angle>=360-rotationSpeed)//旋转功能{playingRole.facingAngle=playingRole.tryingFace;}else{if(d_angle>0&&d_angle<=180){playingRole.facingAngle-=rotationSpeed;}else{playingRole.facingAngle+=rotationSpeed;}}}if(attackCounter==0&&defenceCounter==0&&(pressingW==1||pressingS==1||pressingA==1||pressingD==1))//进行移动{++activeCounter;playerX+=(int)(movementSpeed*Math.cos(playingRole.facingAngle*Math.PI/180));playerY-=(int)(movementSpeed*Math.sin(playingRole.facingAngle*Math.PI/180));checkPlayerLocation();if(activeCounter>=10)//10Tick一次 切换移动图片{activeCounter=0;playingRole.lastMoveActive=(playingRole.lastMoveActive+1)%4;}if(playingRole.lastMoveActive==2)humanIconContorler=humanIconContorler+'_'+0;else if(playingRole.lastMoveActive==3)humanIconContorler=humanIconContorler+'_'+2;elsehumanIconContorler=humanIconContorler+'_'+playingRole.lastMoveActive;}if(pressingJ==1&&attackCounter==0&&defenceCounter==0&&playingRole.HP>0)//发动攻击{attackCounter=1;}if(attackCounter>0&&attackCounter<=8*attackSpeed)//正在攻击{++attackCounter;if(attackCounter>0&&attackCounter<=attackSpeed){humanIconContorler=humanIconContorler+'_'+3;}else if(attackCounter<=2*attackSpeed){humanIconContorler=humanIconContorler+'_'+4;}else if(attackCounter<=3*attackSpeed){humanIconContorler=humanIconContorler+'_'+5;}else if(attackCounter<=4*attackSpeed){humanIconContorler=humanIconContorler+'_'+6;}else if(attackCounter<=5*attackSpeed){humanIconContorler=humanIconContorler+'_'+7;}else if(attackCounter<=6*attackSpeed){humanIconContorler=humanIconContorler+'_'+8;}else if(attackCounter<=7*attackSpeed){humanIconContorler=humanIconContorler+'_'+9;}}if(attackCounter==3*attackSpeed)//完成攻击{playingRole.costEnergy(10);fatherMenu.startNewSound("sweep"+Calculator.randomInt(1,3)+".wav",false,1);playingRole.doAttack();}if(attackCounter>8*attackSpeed)//结束硬直{attackCounter=0;}if(defenceCooldown>0){--defenceCooldown;}if(perfectDefenceTime>0){--perfectDefenceTime;}if(pressingK==1&&attackCounter==0&&defenceCounter==0&&defenceCooldown==0)//发动防御{perfectDefenceTime=5;defenceCounter=1;playingRole.defenceStance=true;playingRole.isBlocked=false;}if(defenceCounter==1){if(pressingK==0)//解除格挡{defenceCounter=0;playingRole.defenceStance=false;if(playingRole.isBlocked==true)defenceCooldown=0;elsedefenceCooldown=30;}else{humanIconContorler=humanIconContorler+'_'+10;}}humanIconContorler=humanIconContorler+".png";if(boss!=null&&playingRole.HP>0){if(playerY>=boss.bossY&&usingPlayerLabel==0)//玩家应当盖住boss,但是却没盖住{usingPlayerLabel=1;playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);playerLabel[0].setVisible(false);playerLabel[1].setVisible(true);}if(playerY<boss.bossY&&usingPlayerLabel==1)//boss应当盖住玩家,但是却没盖住{usingPlayerLabel=0;playerLabel[0].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);playerLabel[1].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);playerLabel[0].setVisible(true);playerLabel[1].setVisible(false);}}playerLabel[usingPlayerLabel].setIcon(new ImageIcon(humanIconContorler));playerLabel[usingPlayerLabel].setBounds((int)playerX-playerWidth/2, (int)playerY-playerHeight/2, playerWidth, playerHeight);lblNewLabel_6.setBounds((int)playerX+(int)(25*Math.cos(playingRole.facingAngle*Math.PI/180))-2, (int)playerY-(int)(25*Math.sin(playingRole.facingAngle*Math.PI/180))-2, 4,4);lblNewLabel_7.setBounds((int)playerX+(int)(25*Math.cos(playingRole.tryingFace*Math.PI/180))-2, (int)playerY-(int)(25*Math.sin(playingRole.tryingFace*Math.PI/180))-2, 4,4);}public void startNewBattleBGM(int bossID){if(fatherMenu.settingLib.settings[1].equals("1")){if(battleBGM!=null)battleBGM.endMusic();battleBGM=new CMusic("boss"+bossID+".wav",true,1);battleBGM.start();}}public void endBattleBGM(){if(battleBGM!=null)battleBGM.endMusic();}public void startQuestCompleteBGM(){if(questCompleteBGM!=null)questCompleteBGM.endMusic();questCompleteBGM=new CMusic("QuestComplete.wav",false,1);questCompleteBGM.start();}}

    感谢各位的阅读,以上就是“Java实现经典游戏飞机大战的代码怎么写”的内容了,经过本文的学习后,相信大家对Java实现经典游戏飞机大战的代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

    --结束END--

    本文标题: Java实现经典游戏飞机大战的代码怎么写

    本文链接: https://www.lsjlt.com/news/322135.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    • Java实现经典游戏飞机大战的代码怎么写
      这篇文章主要讲解了“Java实现经典游戏飞机大战的代码怎么写”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Java实现经典游戏飞机大战的代码怎么写”吧!主要设计 用Swing库做可视化界面鼠...
      99+
      2023-06-29
    • Java实现经典游戏飞机大战-I的示例代码
      目录前言主要设计功能截图代码实现启动类核心类核心算法总结前言 《飞机大战-I》是一款融合了街机、竞技等多种元素的经典射击手游。华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾...
      99+
      2024-04-02
    • JAVA实现经典游戏坦克大战的示例代码
      目录前言主要设计功能截图代码实现总结前言 小时候大家都玩过坦克大战吧,熟悉的旋律和丰富的关卡陪伴了我们一整个寒暑假,还记得传说中的经典坦克大战 吗?那些怀旧的记忆,伴随着我们一起走过...
      99+
      2024-04-02
    • java实现飞机大战游戏
      java实现飞机大战,供大家参考,具体内容如下 用Java写个飞机大战游戏练习一下,实现可播放游戏背景音乐和游戏的基本功能 设计 1、准备好相应的图片和背景音乐(.wav文件); 2...
      99+
      2024-04-02
    • Java实现游戏飞机大战-III的示例代码
      目录前言主要设计功能截图代码实现游戏面板类商店类总结前言 《飞机大战-III》是一款融合了街机、竞技等多种元素的经典射击手游。华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾...
      99+
      2024-04-02
    • java实现飞机大战小游戏
      本文实例为大家分享了java实现飞机大战游戏的具体代码,供大家参考,具体内容如下 MyPanel类 package  P; import java.awt.Font; import...
      99+
      2024-04-02
    • 怎么用JAVA实现经典游戏坦克大战
      这篇文章主要介绍“怎么用JAVA实现经典游戏坦克大战”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“怎么用JAVA实现经典游戏坦克大战”文章能帮助大家解决问题。主要设计要有难度关卡:第一关,第二关,第...
      99+
      2023-06-29
    • JS实现飞机大战小游戏的示例代码
      小编给大家分享一下JS实现飞机大战小游戏的示例代码,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!先制作好要做好的几步以及背景样式var canvas = document.getElement...
      99+
      2023-06-15
    • C++实现飞机大战游戏
      本文实例为大家分享了C++实现飞机大战游戏的具体代码,供大家参考,具体内容如下 代码是单线程执行,无界面,(博主下一步学习QT之后融入)还有待改进。先放张界面图: 话不多说 上...
      99+
      2024-04-02
    • Java实现飞机大战游戏 附完整源码
      目录飞机大战详细文档实现效果:结构设计详细分析Main界面类使用边框布局,给面板分三个区,如图所示绘制背景地图飞行道具类UML图绘制线程: 如何让我们的游戏动起来背景的绘制我的飞机的...
      99+
      2024-04-02
    • jQuery实现飞机大战游戏
      目录一、效果图二、核心代码1.创建地图  2.用户选择飞机界面3.设置背景循环4.创建飞机5.创建敌机6.敌机移动7.设置敌机爆炸8.创建子弹9.检测子弹的移动(...
      99+
      2024-04-02
    • C#实现经典飞行棋游戏的示例代码
      目录效果展示主函数  场景类型枚举控制台基础设置开始及结束场景逻辑游戏场景逻辑固定打印的信息格子类型枚举和格子结构体  地图结构体玩家和电脑结...
      99+
      2024-04-02
    • JavaScript实现飞机大战游戏
      本文实例为大家分享了canvas ,js 实现一个简单的飞机大战,供大家参考,具体内容如下 预览图: 代码: <!DOCTYPE html> <html>...
      99+
      2024-04-02
    • Java实现飞机大战-II游戏详解
      目录前言主要设计功能截图代码实现启动类玩家飞机总结前言 《飞机大战-II》是一款融合了街机、竞技等多种元素的经典射击手游。华丽精致的游戏画面,超炫带感的技能特效,超火爆画面让你肾上腺...
      99+
      2024-04-02
    • java如何实现飞机大战小游戏
      本篇内容介绍了“java如何实现飞机大战小游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!MyPanel类package &nb...
      99+
      2023-07-01
    • 基于JS实现飞机大战游戏的示例代码
      目录演示技术栈源码定义敌方战机定义我方战机碰撞检测演示 技术栈 今天没有什么特别要讲的,要不我们提前介绍下次要做的技术吧。你不说话就是同意了。我们开始了。 下图是正则表达式的一些总...
      99+
      2024-04-02
    • C#实现经典飞行棋游戏的脚本怎么写
      今天小编给大家分享一下C#实现经典飞行棋游戏的脚本怎么写的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。效果展示主函数&nbs...
      99+
      2023-06-29
    • js+css实现飞机大战游戏
      本文实例为大家分享了js+css实现飞机大战游戏的具体代码,供大家参考,具体内容如下 用js和css实现,css中定义样式,js中定义了具体的实现事件,例如碰撞、子弹、飞机等。 ma...
      99+
      2024-04-02
    • Vue实现飞机大战小游戏
      目录使用 Vue 开发一个简略版的飞机大战小游戏一、实现思路二、所需知识点三、实现步骤使用 Vue 开发一个简略版的飞机大战小游戏 如题,假设你为了向更多访问你博客的人展示你的技术,...
      99+
      2024-04-02
    • javascript实现飞机大战小游戏
      本文实例为大家分享了javascript实现飞机大战游戏的具体代码,供大家参考,具体内容如下 文档结构如下 其中tool文件中只使用了随机数,audio中是存放的音乐文件,imag...
      99+
      2024-04-02
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作