java小组坦克大战游戏开发文档开发日志_java学习之坦克大战游戏

1 packagecom.gh.view;2

3 importjava.awt.Color;4 importjava.awt.Graphics;5 importjava.awt.Image;6 importjava.awt.Toolkit;7 importjava.util.Vector;8

9 importjavax.swing.JOptionPane;10 importjavax.swing.JPanel;11

12 importcom.gh.model.Bomb;13 importcom.gh.model.Bullet;14 importcom.gh.model.Map;15 importcom.gh.model.Tank;16

17 /**

18 * 游戏显示面板19 *20 *@authorganhang21 *22 */

23

24 public class Mypanel extends JPanel implementsRunnable {25 public Tank mytank = null;//我的坦克

26 Tank ek = null;27 Image img;28 Vector eks = new Vector();//地方坦克集

29 Vector bs = new Vector();//爆炸集合

30 Map map = newMap();31

32 publicMypanel() {33 mytank = new Tank(200, 200, 0, 0);34 mytank.setMap(map);35 //创建敌人坦克

36 for (int i = 0; i < 17; i++) {37 ek = new Tank(i * 30, 10, 2, 1);38 eks.add(ek);39 ek.setMap(map);40 newThread(ek).start();41 }42 img = Toolkit.getDefaultToolkit().getImage(this.getClass().getResource("/1.png"));43 }44

45 @Override46 public voidpaint(Graphics g) {47 super.paint(g);48 //画背景

49 g.fillRect(0, 0, 500, 500);50 //画自己的坦克

51 if(mytank.islive)52 drawTank(mytank.getX(), mytank.getY(), g, mytank.getDrect(), mytank.getType());53 //画自己的子弹

54 for (int i = 0; i < mytank.mybs.size(); i++) {//循环时删除集合时,不要用foreach,用for

55 Bullet b = newBullet();56 b =mytank.mybs.get(i);57 if(b.islive) {58 g.setColor(Color.white);59 g.fill3DRect(b.getX(), b.getY(), 2, 2, false);60 } else

61 mytank.mybs.remove(b);62 }63 //画敌人坦克

64 for (int i = 0; i < eks.size(); i++) {65 Tank ek = newTank();66 ek =eks.get(i);67 if(ek.islive)68 drawEnemyTank(ek.getX(), ek.getY(), ek.getDrect(), g);69 //画敌人子弹

70 for (int j = 0; j < ek.mybs.size(); j++) {71 Bullet eb = newBullet();72 eb =ek.mybs.get(j);73 if(eb.islive) {74 g.setColor(Color.green);75 g.fill3DRect(eb.getX(), eb.getY(), 2, 2, false);76 } else

77 ek.mybs.remove(eb);78 }79 }80 //画爆炸,这里有个bug第一次爆炸没有爆炸效果图出来,检查原因是只一闪而过81 //添加休眠好了点,不过影响后面爆炸效果,不明白为什么第一次画得快些

82 for (int i = 0; i < bs.size(); i++) {83 //System.out.println(bs.size());

84 Bomb bb =bs.get(i);85 if(bb.islive) {86 if (bb.getTime() > 6) {87 try{88 Thread.sleep(50);89 } catch(Exception e) {90 e.printStackTrace();91 }92 g.drawImage(img, bb.getX(), bb.getY(), 30, 30, this);93 } else if (bb.getTime() > 3) {94 g.drawImage(img, bb.getX(), bb.getY(), 15, 15, this);95 } else if (bb.getTime() > 0) {96 g.drawImage(img, bb.getX(), bb.getY(), 1, 1, this);97 }98 }99 bb.livedown();100 if (bb.getTime() == 0)101 bs.remove(bb);102 }103 }104

105 public booleanisHitEnemy(Bullet b, Tank ek) {106 if (ek.getDrect() == 0 || ek.getDrect() == 2) {107 //坦克竖着时宽20,高30

108 if (b.getX() >= ek.getX() && b.getX() <= ek.getX() + 20 && b.getY() >=ek.getY()109 && b.getY() <= ek.getY() + 30) {110 b.islive = false;111 ek.islive = false;112 Bomb bb = newBomb(ek.getX(), ek.getY());113 bs.add(bb);114 return true;115 }116 return false;117 } else {//横着宽30,高20;

118 if (b.getX() >= ek.getX() && b.getX() <= ek.getX() + 30 && b.getY() >=ek.getY()119 && b.getY() <= ek.getY() + 20) {120 ek.islive = false;121 b.islive = false;122 Bomb bb = newBomb(ek.getX(), ek.getY());123 bs.add(bb);124 return true;125 }126 return false;127 }128 }129

130 public void drawEnemyTank(int x, int y, intdrect, Graphics g) {131 drawTank(x, y, g, drect, 1);132 }133

134 public void drawTank(int x, int y, Graphics g, int drect, inttype) {135 switch(type) {136 case 0:137 g.setColor(Color.cyan);138 break;139 case 1:140 g.setColor(Color.GREEN);141 default:142 break;143 }144 switch(drect) {145 case 0:146 //坦克向上时宽20,高30

147 g.fill3DRect(x, y, 5, 30, false);148 g.fill3DRect(x + 15, y, 5, 30, false);149 g.fill3DRect(x + 5, y + 9, 10, 15, false);150 g.drawLine(x + 10, y + 14, x + 10, y);151 break;152 case 1:153 //坦克向右时宽30,高20

154 g.fill3DRect(x, y, 30, 5, false);155 g.fill3DRect(x, y + 15, 30, 5, false);156 g.fill3DRect(x + 7, y + 5, 15, 10, false);157 g.drawLine(x + 13, y + 10, x + 30, y + 10);158 break;159 case 2:160 g.fill3DRect(x, y, 5, 30, false);161 g.fill3DRect(x + 15, y, 5, 30, false);162 g.fill3DRect(x + 5, y + 7, 10, 15, false);163 g.drawLine(x + 10, y + 12, x + 10, y + 30);164 break;165 case 3:166 g.fill3DRect(x, y, 30, 5, false);167 g.fill3DRect(x, y + 15, 30, 5, false);168 g.fill3DRect(x + 8, y + 5, 15, 10, false);169 g.drawLine(x, y + 10, x + 13, y + 10);170 break;171 }172 }173

174 @Override175 public voidrun() {176 while (true) {177 try{178 Thread.sleep(50);//画板刷新频率

179 } catch(InterruptedException e) {180 e.printStackTrace();181 }182 //判断自己坦克的子弹是否击中敌人坦克

183 for (int i = 0; i < mytank.mybs.size(); i++) {184 Bullet mb = newBullet();185 mb =mytank.mybs.get(i);186 if(mb.islive) {187 for (int j = 0; j < eks.size(); j++) {188 Tank ek = newTank();189 ek =eks.get(j);190 if(ek.islive) {191 isHitEnemy(mb, ek);192 }193 }194 }195 }196 //判断敌方坦克 的子弹是否击中我方坦克

197 for (int i = 0; i < eks.size(); i++) {198 Tank et = newTank();199 et =eks.get(i);200 for (int j = 0; j < et.mybs.size(); j++) {//这里写错ek查到死。。。

201 Bullet etb = newBullet();202 etb =et.mybs.get(j);203 if(etb.islive) {204 isHitEnemy(etb, mytank);205 }206 }207 }208 this.repaint();//刷新

209 if (!mytank.islive) {210 JOptionPane.showMessageDialog(this, "你被GG");211 mytank.islive = true;212 }213 }214 }215 }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
游戏名称:《疯狂坦克III:火星危机》(Fortress 3: The Crisis With Mars) (1)公元2080年,太阳风暴发生,月球撞击地球,导致海啸与陆沉现象发生,旧大陆被淹没在汪洋之中;唯一露出水面的是旧大陆的山峰一角;不仅没有居住空间,而且太阳辐射撕裂了地球保护层,空气中充满强辐射的宇宙射线,全部野外生物趋于灭绝。 (2)因为提前了10年开始准备,所以人类在逐步向外星球移民的过程中,生存并没有受到过大的影响。人类依赖先进的文明科技,构筑了生物圈城市并生活在其中;通过在太空中设置了能量接收卫星,将接收到的宇宙射线发回地表的能量接收塔,作为生活的能源使用。 (3)人类在对火星的未知地域探索中,一次偶然发生的事故,竟意外地寻找到了一组神秘的人工建筑物,已经尘封在地下几千年的时间。建筑造型酷似原地球失落已久的玛雅文明;并经过科学家的分析,确定这是数千年前外星文明生物的创造。 (4)在进入火星神秘建筑的神殿中探索后,探险队员触动了神殿的机关,引动了某种神秘的宇宙能源力量,全体探险队员殉难。经科学家紧急分析,这种能源力量本来是被用于某种时空置换装置,是外星文明生物往返的交通方式;此时,太阳突然开始不断膨胀扩张,整个太阳系都处于危险之中。 (5)唯一的方法,按照科学家对神殿神秘符咒的解读,外星文明生物是通过某种神秘的晶体作为控制装置,当前散落在火星各处;如果能以能量球的形态拼接起来,其产生的能量可以使时间倒流,回到触发神殿机关之前,从而阻止危险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值