二、设计飞机类,实现键盘移动(雷霆战机)
来源:互联网 发布:json.stringify()使用 编辑:程序博客网 时间:2024/05/16 00:54
GitHub地址:https://github.com/WingedCat/AirWar
用枚举类型标记方向:
public enum Direction { L, R, RD, D, LD, STOP,LU, U, RU}
完成飞机图片的载入,添加按键按下和释放的方法,添加移动方法:
package cn.xpu.hcp.entity;import java.awt.Graphics;import java.awt.Image;import java.awt.event.KeyEvent;import java.util.Random;import cn.xpu.hcp.game.GameFrame;import cn.xpu.hcp.tools.Constant;import cn.xpu.hcp.tools.GameImage;public class Plane { private static Random r = new Random(); int randIndex; private int x,y;//飞机的位置 private boolean good;//飞机是我还是对方(敌机);我设置为true,敌机设置为false private boolean isAlive = true;//表明飞机是否活着 private boolean isBoss;//用于敌方飞机是否是boss机型 private int blood;//表明飞机血量 private GameFrame gf; private int speed;//飞机移动速度 private boolean bL,bU,bR,bD; private Direction dir = Direction.STOP;//Plane的移动状态,初始化时默认是STOP private static Image[] myImgs=new Image[28];//存放我方机型图片的数组 private static Image[] enemyImgs = new Image[23];//存放敌方普通机型的图片 private static Image[] bossImgs = new Image[8];//存放敌方boss机型的图片 private Image ensureImg;//具体确定的图片 static{ //我方飞机机型图片 myImgs[0]=GameImage.getImage("resources/plane1.png"); myImgs[1]= GameImage.getImage("resources/plane2.png"); myImgs[2]= GameImage.getImage("resources/plane3.png"); myImgs[3]= GameImage.getImage("resources/plane4.png"); myImgs[4]= GameImage.getImage("resources/plane5.png"); myImgs[5]= GameImage.getImage("resources/plane6.png"); myImgs[6]= GameImage.getImage("resources/plane7.png"); myImgs[7]= GameImage.getImage("resources/plane8.png"); myImgs[8]= GameImage.getImage("resources/plane9.png"); myImgs[9]= GameImage.getImage("resources/plane10.png"); myImgs[10]= GameImage.getImage("resources/plane11.png"); myImgs[11]= GameImage.getImage("resources/plane12.png"); myImgs[12]= GameImage.getImage("resources/plane13.png"); myImgs[13]= GameImage.getImage("resources/plane14.png"); myImgs[14]= GameImage.getImage("resources/plane15.png"); myImgs[15]= GameImage.getImage("resources/plane16.png"); myImgs[16]= GameImage.getImage("resources/plane17.png"); myImgs[17]= GameImage.getImage("resources/plane18.png"); myImgs[18]= GameImage.getImage("resources/plane19.png"); myImgs[19]= GameImage.getImage("resources/plane20.png"); myImgs[20]= GameImage.getImage("resources/plane21.png"); myImgs[21]= GameImage.getImage("resources/plane22.png"); myImgs[22]= GameImage.getImage("resources/plane23.png"); myImgs[23]= GameImage.getImage("resources/plane24.png"); myImgs[24]= GameImage.getImage("resources/plane25.png"); myImgs[25]= GameImage.getImage("resources/plane26.png"); myImgs[26]= GameImage.getImage("resources/plane27.png"); myImgs[27]= GameImage.getImage("resources/plane28.png"); //敌方普通飞机机型图片 enemyImgs[0]=GameImage.getImage("resources/enemy1.png"); enemyImgs[1]= GameImage.getImage("resources/enemy2.png"); enemyImgs[2]= GameImage.getImage("resources/enemy3.png"); enemyImgs[3]= GameImage.getImage("resources/enemy4.png"); enemyImgs[4]= GameImage.getImage("resources/enemy5.png"); enemyImgs[5]= GameImage.getImage("resources/enemy6.png"); enemyImgs[6]= GameImage.getImage("resources/enemy7.png"); enemyImgs[7]= GameImage.getImage("resources/enemy8.png"); enemyImgs[8]= GameImage.getImage("resources/enemy9.png"); enemyImgs[9]= GameImage.getImage("resources/enemy10.png"); enemyImgs[10]= GameImage.getImage("resources/enemy11.png"); enemyImgs[11]= GameImage.getImage("resources/enemy12.png"); enemyImgs[12]= GameImage.getImage("resources/enemy13.png"); enemyImgs[13]= GameImage.getImage("resources/enemy14.png"); enemyImgs[14]= GameImage.getImage("resources/enemy15.png"); enemyImgs[15]= GameImage.getImage("resources/enemy16.png"); enemyImgs[16]= GameImage.getImage("resources/enemy17.png"); enemyImgs[17]= GameImage.getImage("resources/enemy18.png"); enemyImgs[18]= GameImage.getImage("resources/enemy19.png"); enemyImgs[19]= GameImage.getImage("resources/enemy20.png"); enemyImgs[20]= GameImage.getImage("resources/enemy21.png"); enemyImgs[21]= GameImage.getImage("resources/enemy22.png"); enemyImgs[22]= GameImage.getImage("resources/enemy23.png"); //boss机型图片 bossImgs[0]=GameImage.getImage("resources/boss1.png"); bossImgs[1]= GameImage.getImage("resources/boss2.png"); bossImgs[2]= GameImage.getImage("resources/boss3.png"); bossImgs[3]= GameImage.getImage("resources/boss4.png"); bossImgs[4]= GameImage.getImage("resources/boss5.png"); bossImgs[5]= GameImage.getImage("resources/boss6.png"); bossImgs[6]= GameImage.getImage("resources/boss7.png"); bossImgs[7]= GameImage.getImage("resources/boss8.png"); } public Plane(int x,int y,int speed,boolean good,GameFrame gf){ this.x = x; this.y = y; this.speed = speed; this.good = good; this.gf = gf; if(good==true){ randIndex = r.nextInt(28); ensureImg = myImgs[randIndex]; }else{ if(isBoss){//如果是boss机型,在boss机型中选择 randIndex = r.nextInt(8); ensureImg = bossImgs[randIndex]; }else{ randIndex = r.nextInt(23); ensureImg = enemyImgs[randIndex]; dir = Direction.D;//普通敌机方向只有向下 } } } public void draw(Graphics g){ if(isAlive==false){//飞机死亡,不画 return; } g.drawImage(ensureImg, x, y, null); move(); } public void Press(KeyEvent e) { int key = e.getKeyCode(); switch(key) { case KeyEvent.VK_LEFT : bL = true; break; case KeyEvent.VK_UP : bU = true; break; case KeyEvent.VK_RIGHT : bR = true; break; case KeyEvent.VK_DOWN : bD = true; break; } locateDirection(); } public void Release(KeyEvent e) { int key = e.getKeyCode(); switch(key) { case KeyEvent.VK_SPACE: case KeyEvent.VK_CONTROL: // fire();预留开火 break; case KeyEvent.VK_LEFT : bL = false; break; case KeyEvent.VK_UP : bU = false; break; case KeyEvent.VK_RIGHT : bR = false; break; case KeyEvent.VK_DOWN : bD = false; break; } locateDirection(); } void locateDirection() {//根据按键设置Plane移动方向-->dir if(bL && !bU && !bR && !bD) dir = Direction.L; else if(bL && bU && !bR && !bD) dir = Direction.LU; else if(!bL && bU && !bR && !bD) dir = Direction.U; else if(!bL && bU && bR && !bD) dir = Direction.RU; else if(!bL && !bU && bR && !bD) dir = Direction.R; else if(!bL && !bU && bR && bD) dir = Direction.RD; else if(!bL && !bU && !bR && bD) dir = Direction.D; else if(bL && !bU && !bR && bD) dir = Direction.LD; else if(!bL && !bU && !bR && !bD) dir = Direction.STOP; } //Plane的移动方法 void move() { switch(dir) { case L: x -= speed; break; case LU: x -= speed; y -= speed; break; case U: y -= speed; break; case RU: x += speed; y -= speed; break; case R: x += speed; break; case RD: x += speed; y += speed; break; case D: y += speed; break; case LD: x -= speed; y += speed; break; case STOP: break; } //到达窗体边界,不允许继续移动 if(x < 0) x = 0; if(y < 30) y = 30; if(x + ensureImg.getWidth(null) > Constant.GAME_WIDTH) x = Constant.GAME_WIDTH - ensureImg.getWidth(null); if(y + ensureImg.getHeight(null) > Constant.GAME_HEIGHT) y = Constant.GAME_HEIGHT - ensureImg.getHeight(null); } }
测试结果:
阅读全文
4 0
- 二、设计飞机类,实现键盘移动(雷霆战机)
- 三、使用鼠标控制飞机,实现风骚走位(雷霆战机)
- Unity编写雷霆战机流程(二)
- 四、子弹类的创建,飞机子弹发射与无用子弹的销毁(雷霆战机)
- 基于JavaSwing写的雷霆战机(飞机大战)
- 七、完善:飞机生命值和子弹杀伤力(雷霆战机)
- 雷霆战机
- 雷霆战机
- Unity编写雷霆战机流程(一)
- 一、实现欢迎界面和游戏背景图的滚动(雷霆战机)
- A - 雷霆战机
- 1073 雷霆战机
- ACdream 1073 雷霆战机
- 雷霆战机(贪心)
- ACdream 1073 雷霆战机
- ACdream 1073 雷霆战机
- ACdream - 1073 雷霆战机
- ACdream-1073 雷霆战机
- JAVA实现图片加水印及Base64图片字符串加水印
- 免费Git服务器
- hdu 1525 Euclid's Game 博弈
- 一、实现欢迎界面和游戏背景图的滚动(雷霆战机)
- PAT
- 二、设计飞机类,实现键盘移动(雷霆战机)
- 总结android应用内存泄漏的问题,及需要注意的地方
- Android 7.0与6.0多语言效果对比以及遇到的坑
- 三、使用鼠标控制飞机,实现风骚走位(雷霆战机)
- 四、子弹类的创建,飞机子弹发射与无用子弹的销毁(雷霆战机)
- Zookeeper系列—Linux下的安装
- 六、爆炸效果的产生及销毁(雷霆战机)
- 数据结构算法和算法效率评价
- 七、完善:飞机生命值和子弹杀伤力(雷霆战机)