java写飞机大战五
来源:互联网 发布:宽带通属于什么网络 编辑:程序博客网 时间:2024/04/29 14:13
前文已经将角色实现,终于要结束了,小激动。
其实还有很多想法没写完,但是这就是个坑啊,新的idea不停冒出来,永远都写不完,所以就停了吧。
在这里为了帮GameCLient节省一些代码,写了一个游戏控制器,将常用的方法放在这里:
public class GameController {static Random r;static {r = new Random();}public static int createX() {int x = r.nextInt(GameConstant.FrameData.WIN_WIDTH- GameConstant.NormalPcPlaneData.RADIUS);return x;}public static int createBossX() {int x = r.nextInt(GameConstant.FrameData.WIN_WIDTH- GameConstant.BossPcPlaneData.RADIUS);return x;}public static int createBossY() {int y = -r.nextInt(600) - 20;System.out.println("boss y is" + y);return y;}public static int createY() {int y = -r.nextInt(300) - 20;return y;}// 创造出一个普通的敌方飞机public static void createNormalPcPlane(GameObserver observer) {NormalPcPlane normalPcPlane = new NormalPcPlane(observer);observer.onNormalPcPlaneAppear(normalPcPlane);//注意这里的观察者}// 创造出一个BOSS飞机public static void createBossPcPlane(GameObserver observer) {BossPcPlane bossPcPlane = new BossPcPlane(observer);observer.onBossAppear(bossPcPlane);<span style="font-family: Arial, Helvetica, sans-serif;">//注意这里的观察者</span>}}
最后就是GameClient游戏客户端的代码:
public class GameClient extends Frame implements GameObserver {// 两波飞机出现的时间间隔private int gapTime = 250;private int bossGapTime = 25 * 2000;// 我方飞机private MainPlane mainPlane = new MainPlane(GameConstant.MainPlaneData.FIRST_X,GameConstant.MainPlaneData.FIRST_Y, GameClient.this);// 敌方飞机private List<NormalPcPlane> normalpPcPlanes = new ArrayList<NormalPcPlane>();private List<BossPcPlane> bossPcPlanes = new ArrayList<BossPcPlane>();// 子弹private List<Bullet> bullets = new ArrayList<Bullet>();private Image offScreanImage = null;// 刷新的线程private PaintThread paintThread = new PaintThread();private AttackThread attack = new AttackThread();private FireThread fire = new FireThread();private BossAttackThread bossAttackThread = new BossAttackThread();// 主函数public static void main(String[] args) {GameClient gameClient = new GameClient();gameClient.launchFrame();}// 启动窗口private void launchFrame() {// 位置,大小,添加按键监听this.setLocation(GameConstant.FrameData.WIN_X,GameConstant.FrameData.WIN_Y);this.setSize(GameConstant.FrameData.WIN_WIDTH,GameConstant.FrameData.WIN_HEIGHT);this.setResizable(false);this.setTitle(GameConstant.GameStr.GAME_NAME);this.setBackground(GameConstant.ColorHelper.GAMEBKCOLOR);this.addWindowListener(new MyWindowAdapter());this.addKeyListener(new KeyMonitor());setVisible(true);new Thread(paintThread).start();new Thread(attack).start();new Thread(fire).start();new Thread(bossAttackThread).start();}// 将游戏角色画在窗口中public void paint(Graphics g) {mainPlane.appears(g);for (int i = 0; i < bullets.size(); i++) {Bullet currentBullet = bullets.get(i);currentBullet.move();currentBullet.paint(g);for (int j = 0; j < normalpPcPlanes.size(); j++) {currentBullet.hit(normalpPcPlanes.get(j));}for (int k = 0; k < bossPcPlanes.size(); k++) {currentBullet.hit(bossPcPlanes.get(k));}}for (int i = 0; i < bossPcPlanes.size(); i++) {bossPcPlanes.get(i).move();bossPcPlanes.get(i).paint(g);bossPcPlanes.get(i).hit(mainPlane);bossPcPlanes.get(i).showMsg();}for (int i = 0; i < normalpPcPlanes.size(); i++) {normalpPcPlanes.get(i).move();normalpPcPlanes.get(i).paint(g);normalpPcPlanes.get(i).hit(mainPlane);}g.drawString("current pcPlanes are" + normalpPcPlanes.size(), 20, 50);g.drawString("current bullets are" + bullets.size(), 20, 100);g.drawString("current bossPcPlanes are" + bossPcPlanes.size(), 20, 150);}// 重写update方法,在父类repaint()方法调用的时候会调用这个方法public void update(Graphics g) {if (offScreanImage == null) {offScreanImage = this.createImage(GameConstant.FrameData.WIN_WIDTH,GameConstant.FrameData.WIN_HEIGHT);}Graphics gOffScrean = offScreanImage.getGraphics();Color preColor = gOffScrean.getColor();gOffScrean.setColor(GameConstant.ColorHelper.GAMEBKCOLOR);gOffScrean.fillRect(0, 0, GameConstant.FrameData.WIN_WIDTH,GameConstant.FrameData.WIN_HEIGHT);gOffScrean.setColor(preColor);paint(gOffScrean);g.drawImage(offScreanImage, 0, 0, null);}// 不断刷新画面的线程private class PaintThread implements Runnable {public void run() {while (true) {// 每隔15ms,调用父类的repaint()方法repaint();try {Thread.sleep(15);} catch (InterruptedException e) {e.printStackTrace();}}}}// 不断产生敌方普通飞机的线程private class AttackThread implements Runnable {public void run() {while (true) {try {GameController.createNormalPcPlane(GameClient.this);Thread.sleep(gapTime);} catch (InterruptedException e) {e.printStackTrace();}}}}// 不断产生敌方BOSS飞机的线程private class BossAttackThread implements Runnable {public void run() {while (true) {try {GameController.createBossPcPlane(GameClient.this);Thread.sleep(bossGapTime);} catch (InterruptedException e) {e.printStackTrace();}}}}// 我方开火线程public class FireThread implements Runnable {long fireGaptime = 150;public void run() {while (true) {try {Thread.sleep(fireGaptime);mainPlane.getState().fire();} catch (Exception e) {}}}}// 按键监听private class KeyMonitor extends KeyAdapter {public void keyPressed(KeyEvent keyEvent) {mainPlane.onkeyPressed(keyEvent);}}/*------------敌方普通飞机------------*/// 敌方普通飞机出现后调用该方法public void onNormalPcPlaneAppear(NormalPcPlane pcPlane) {normalpPcPlanes.add(pcPlane);}// 当敌方普通飞机死亡之后,调用该回调方法public void onNormalPcPlaneDie(NormalPcPlane pcPlane) {if (normalpPcPlanes.indexOf(pcPlane) >= 0) {normalpPcPlanes.remove(pcPlane);}}/*------------子弹------------*/// 非三射状态下,我方飞机射出子弹public void onBulletAppear(Bullet newBullet) {bullets.add(newBullet);}// 在三射状态下,我方飞机射出子弹public void onBulletsAppear(List<Bullet> newBullets) {bullets.addAll(newBullets);}// 子弹超出范围或者爆炸之后,调用该回调方法public void onBulletDisapper(Bullet missle) {if (bullets.indexOf(missle) >= 0) {bullets.remove(missle);}}/*------------敌方BOSS飞机------------*/// 敌方boss飞机出现后调用该方法public void onBossAppear(BossPcPlane bossPcPlane) {bossPcPlanes.add(bossPcPlane);}// 敌方boss飞机死亡后调用该方法public void onBossDie(BossPcPlane bossPcPlane) {if (bossPcPlanes.indexOf(bossPcPlane) >= 0) {bossPcPlanes.remove(bossPcPlane);}}// 当我方飞机死亡后,调用该回调方法public void onMainPlaneDie() {}}
没有计分,也没有我放飞机死亡之后的操作,事实上我方飞机不会死亡。
END。
游戏源码:
http://download.csdn.net/detail/u011248571/8427317
0 0
- java写飞机大战五
- java写飞机大战一
- java写飞机大战二
- java写飞机大战三
- java写飞机大战四
- 飞机大战(五)
- swing 飞机大战 五 击落敌人飞机
- java学习写的第一个东西《飞机大战》
- 飞机大战JAVA编程
- java飞机大战游戏
- 全民飞机大战Java
- 飞机大战-java
- java飞机大战
- java游戏-飞机大战
- Java程序之飞机大战
- 《飞机大战》-Java版-01
- Java飞机大战0_1
- Java飞机大战0_2
- The efficiency of swap
- 算法训练 区间k大数查询 排序 查找
- Struts2集成Spring及为什么集成
- 并查集学习小节(POJ版)
- 关于文件输入输出流
- java写飞机大战五
- YT14-HDU-叠加的卡片
- ps查看手机进程相关信息
- iOS开发的一些奇巧淫技 .
- Python join() 函数 连接字符串
- 编写shellcode测试工具
- POJ3636 Nested Dolls ACM解题报告(暴力贪心(也可用二分查找降低复杂度))
- 桥连接模式
- python