|
|
坦克大战运用到的Java知识:集合、Swing、线程。5 ?! u* L, O1 {: i: Y
编程思想:9 Q. Y2 V# G/ r. T2 r2 b# w0 z
在主类开启一个线程,没50毫秒循环一次画方法(绘制整个界面内的所有东西)。画的东西有敌我坦克(颜色区分)、子弹、墙、血块、爆炸。所以总共写出了几个类:Tank坦克类、Missile子弹类、Wall墙类、Blood血块类、TankClient主类。在每一个类中均写有画方法实现本类属性的绘制功能。在主类中有键盘监听事件调用这Tank类的键盘监听事件。通过键盘监听判断出对Tank做出相应的移动,而敌方Tank则是随机运动。并且每次刷新都有调用各类的碰撞方法,判断一些不该碰撞的对象的情况时做出处理。而每个对象的创建例如子弹这些是在触发产生之后将新建子弹类加入一个子弹类集合之中,在绘制的时候判断集合中的数量进行绘制,出界或者打死坦克则在集合中删除。其他类也均相似,不在细说。# P. D- e: b. Z" |; E7 r
+ o$ ?* U$ f. x4 ~. j展示一下游戏界面:3 P! P# E# F0 G! r, @ S ]
游戏原理:) `; o9 Y* w$ \6 M9 H
) N5 W- P& {* M2 ]* K6 H6 Q1、敌我坦克:在坦克类里面有一个布尔类型变量good。用于判断坦克的阵营,在创建坦克对象时在Tank类的构造方法中传入good的值。在画坦克的时候判断good的值,区分敌我坦克的颜色;1 D0 O9 n9 o8 ~* u/ B, E4 C% V
2、坦克运动:在坦克类里写入了监听键盘摁键的响应事件,对监听到的上下左右键进行记录,并合成坦克移动的八个方向的变量。之后对应每个方向的不同对坦克坐标x,y的值做响应的更改实现我方坦克的移动。而敌方坦克则自动移动,通过随机数对敌方坦克移动方向的随机,并且随机出每次移动的次数。两个随机值相结合即实现了敌方坦克的移动。
: n7 S+ a0 V+ t" C3、坦克发射子弹:通过键盘监听,检测到发射子弹命令后将主类的子弹类集合中添加一个子弹类。将炮筒的方向以及坦克的位置以及坦克的阵营传入给子弹类,在主类paint画方法中一直循环子弹类集合,如果集合内有子弹,就画出来。这样就实现了发射子弹。
2 ]1 m( \+ x/ Y0 C# ]9 @4、坦克、子弹、墙的碰撞:在坦克类子弹类墙类中分别getRect方法获取自身的范围,然后在每次画坦克、子弹时都会进行相应的碰撞检测(在坦克类里有与墙和出自己外的坦克相撞的处理方法、在子弹类里有与墙和坦克相碰撞的处理方法。),如果自身与不该碰撞的物体的范围相重合,则代表两物体相撞。
! G& N$ e. Z6 L: {9 S$ U5、坦克加血:在血块类中有血块与我方坦克相碰撞的处理方法,如果血块范围与坦克范围重合则血块类死亡,并且坦克类的血量回复置满。
7 o* `! D, Y' g" j8 f6、坦克复活:通过键盘监听,检测到我方坦克复活命令后,如果我方坦克处于死亡状态,则将我方坦克存货状态改为活着并且将我方坦克血量回置满血。
) C g: j! ]' p6 Q# v+ I$ _' i实现代码如下:
) M- y c3 f& ^5 ~2 N# c# {TankClient.java 1 R+ p9 y9 K* X8 u
  Tank.java 1 G! ]5 j, H) F8 L; c) @& I" E9 \1 f
     Missile.java . K; ^6 p' I4 p
4 E% G9 W+ ]6 a, ~/ B# u  Wall.java
2 K+ z* i+ z# H- O g Explode.java 5 Z$ }) ?, D! d1 f; t: ~
, F" m* ]: g& J) A
独家福利:4月1日-4月3日,关注java梦想微信公众号(ID:bppjava)每日推文得ja va视频教程,先到先得,马上中奖!
/ |7 `/ \7 y/ [* {' @, g% @" p
# i7 f% C! \1 e3 u' s. NBlood.java & C! I7 z1 p( O2 e" t, j) [, x; Z
声明:本文内容来源于网络,如有侵权请联系删除
5 Z- x$ H/ ^ q% v# I
+ k5 e$ H( r8 Y4 U. ~% v& v6 Z
7 N7 P! j5 ` n* s来源:http://www.yidianzixun.com/article/0LdDCyye
6 x7 ]2 Y0 G- Z, Y6 l; ~' p, \免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
×
|