飞机大战实现游戏设计

游戏思路是看尚学堂的飞机大战2.0。通过他写的代码,让我回顾了JAVASE的大部分内容。接下来看看我对这个小游戏的理解,以及我的创新。

首先是窗口的创建,这个东西如果是初学者,可能会感觉莫名其妙(会i想为什么是这样子用这样的方法),但真理都是在不断的学习之后才知道的,不是么。

窗口的建立:

this.setVisible(true);

this.setSize(width,height);

this.setLocationRelativeTo(null);

this.setTitle("飞机大战");

this.setDefaultCloseOperation(3);

GameUtils.gameObjList.add(bgObj);

GameUtils.gameObjList.add(planeObj);

planeindex = GameUtils.gameObjList.indexOf(planeObj);//拿到了我方飞机的索引值

建立鼠标控制监听:

this.addMouseListener(new MouseAdapter() {

@Override

public void mouseClicked(MouseEvent e) {

                if(e.getButton() == 1&&state ==0) {

                state = 1;

                repaint();

        }

        super.mouseClicked(e);

        }

});

键盘控制暂停功能:

//暂停

this.addKeyListener(new KeyAdapter() {

        @Override

        public void keyPressed(KeyEvent e) {

                // TODO Auto-generated method stub

                if(e.getKeyCode() == 32) {

                        switch (state) {

                        case 1:

                        state =2;

                        break;

                        case 2:

                        state = 1;

                        break;

                        default:

                        }

                }

        }

});

游戏的功能:

@Override

public void paint(Graphics g) {

        if(offScreenImage ==null) {

                offScreenImage = createImage(width,height);

        }

        Graphics gImage = offScreenImage.getGraphics();

        gImage.fillRect(0, 0, width, height);

        if(state == 0) {

                gImage.drawImage(GameUtils.bgImg, 0, 0,null,this);

                gImage.drawImage(GameUtils.bossImg, 220, 120,null,this);

                gImage.drawImage(GameUtils.explodeImg, 270, 350,null,this);

                GameUtils.drawWord(gImage, "点击开始游戏", Color.yellow, 40, 180, 300);

        }

        if(state ==1) {

                GameUtils.gameObjList.addAll(GameUtils.explodeObjList);

                for(int i =0;i<GameUtils.gameObjList.size();i++) {

                        GameUtils.gameObjList.get(i).paintSelf(gImage);

                }

                GameUtils.gameObjList.removeAll(GameUtils.removeList);

        }

        if(state == 3) {

                //失败

                planeObj.life =0;

                planeObj.paintSelf(gImage);

                gImage.drawImage(GameUtils.explodeImg, planeObj.getX()-20,                 planeObj.getY()-20,null,this);

                GameUtils.drawWord(gImage, "GAME OVER", Color.RED, 50, 180, 300);

        }

        if(state == 4) {

                //通关

                gImage.drawImage(GameUtils.explodeImg, boss2Obj.getX()+70,                 boss2Obj.getY()+70,null,this);

                GameUtils.drawWord(gImage, "游戏通关", Color.RED, 50, 190, 300);

        }

       GameUtils.drawWord(gImage,score+ "分",Color.green , 40, 30, 100);

        g.drawImage(offScreenImage,0,0,null);

        count++;

        System.out.println(GameUtils.gameObjList.size());

}

        void creatObj() {

                //我方子弹

                if(count%11==0&&planeObj.times ==0) {

                GameUtils.shellObjsList.add(new                 ShellObj(GameUtils.shellImg,planeObj.getX()+21,planeObj.getY()-14,14,29,5,this));

        GameUtils.gameObjList.add(GameUtils.shellObjsList.get(GameUtils.shellObjsList.size()-1));

        }

        if(count%7==0&&planeObj.times ==1) {

        GameUtils.doubleShellObjList.add(new         DoubleShellObj(GameUtils.doubleShellImg,planeObj.getX()+19,planeObj.getY()-50,32,35,10,this));

        GameUtils.gameObjList.add(GameUtils.doubleShellObjList.get(GameUtils.doubleShellObjList.size()-1));

        }

        if(count%10==0) {

        GameUtils.enemyObjList.add(new EnemyObj(GameUtils.enemyImg,(int)(Math.random()*12)*50,0,49,36,5,this));

        GameUtils.gameObjList.add(GameUtils.enemyObjList.get(GameUtils.enemyObjList.size()-1));

        enemyCount++;

}

       if(count%15==0&&boss2Obj!=null) {

                GameUtils.bullet2ObjList.add(new         Bullet2Obj(GameUtils.bullet2Img,boss2Obj.getX()+95,boss2Obj.getY()+180,20,80,15,this));

GameUtils.gameObjList.add(GameUtils.bullet2ObjList.get(GameUtils.bullet2ObjList.size()-1));

        }

if(count%15==0&&boss2Obj!=null) {

        GameUtils.bullet3ObjList.add(new         Bullet3Obj(GameUtils.bullet3Img,boss2Obj.getX()+130,boss2Obj.getY()+110,18,18,15,this));

        GameUtils.gameObjList.add(GameUtils.bullet3ObjList.get(GameUtils.bullet3ObjList.size()-1)        );

}

        if(count%15==0&&boss2Obj!=null) {

        GameUtils.bullet4ObjList.add(new         Bullet4Obj(GameUtils.bullet4Img,boss2Obj.getX()+60,boss2Obj.getY()+110,19,19,15,this));

        GameUtils.gameObjList.add(GameUtils.bullet4ObjList.get(GameUtils.bullet4ObjList.size()-1)        );

}

if(count%15==0&&bossObj !=null) {

        GameUtils.bulletObjList.add(new         BulletObj(GameUtils.bulletImg,bossObj.getX()+76,bossObj.getY()+85,15,25,5,this));

        GameUtils.gameObjList.add(GameUtils.bulletObjList.get(GameUtils.bulletObjList.size()-1));

}

        if(enemyCount>50&&bossObj == null) {

                bossObj = new BossObj(GameUtils.bossImg,250,35,155,100,5,this);

                GameUtils.gameObjList.add(bossObj);

                BossCount++;

        }

        if(enemyCount>100&&BossCount==3&&boss2Obj==null) {

                        boss2Obj = new Boss2Obj(GameUtils.boss2Img,250,20,155,100,5,this);

                        GameUtils.gameObjList.add(boss2Obj);

                }

        }

public static void main(String[] args) {

        GameWin gameWin = new GameWin();

        gameWin.launch();

}

这里以我方飞机为实例说明代码,如下

 我方工具类代表

 就自己设置了几项功能:一是为己方飞机添加了生命和血条,二是添加了第二个boss,三是实现了子弹的追踪功能,四是添加了背景音乐,五是设置了第一位boss死亡后会掉落物品可以升级自己的武器。感觉通过写小游戏,让自己对Java的学习了解更深了。感觉很不错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值