游戏思路是看尚学堂的飞机大战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的学习了解更深了。感觉很不错。