温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-02-09 16:40:46 来源:亿速云 阅读:156 作者:iii 栏目:开发技术

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

    主要设计

    1、 用Swing库做可视化界面

    2、鼠标控制战斗机移动

    3、 用线程实现画面刷新。

    4、用流实现音乐播放。

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

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

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

    8、生成敌方飞机算法

    9、分数计算算法

    功能截图

    游戏开始

    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-734
    	double playerY;//0-312
    	int 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;//游戏通关的阶段
    	/*第一关 0
    	 * 第二关 6
    	 * */
    	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-499
    	
    	int existPar=0;
    	int parTeamPointer=0;
    
    	JPanel panel;
    	
    	Mob boss;
    	
    	int allPhaseCount=1;
    	int gameTime=0;
    	
    	Map map;
    	
    	/**
    	 * Create the frame.
    	 */
    	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";
    					else
    						backGroundContorler=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();
    			}
    		}
    		
    		//刷新bossBar
    		if(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;
    			else
    				humanIconContorler=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;
    				else
    					defenceCooldown=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实现经典游戏飞机大战的代码怎么写这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI