坦克大战是我们小时候玩红白机时代的经典游戏,看到有不少小伙伴都使用各种语言实现了一下,手痒痒,也使用java做的一个比较简单的坦克大战,主要面向于学过Java的人群,与学了一段时间的人,有利于面向对象思想的提高,推荐给大家。
详情请参照注释,这里就不多废话了,实现一下儿时的经典而已。
Blood.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
package
com.hkm.TankWar;
import
java.awt.*;
/**
* 血块类,我方坦克吃了可回血;
* @author Hekangmin
*
*/
public
class
Blood {
private
int
x,y,w,h;
//血块的位置和宽度高度;
private
TankWarClient tc;
private
int
step=
0
;
//纪录血块移动的步数;
private
boolean
live=
true
;
public
boolean
isLive() {
return
live;
}
public
void
setLive(
boolean
live) {
this
.live = live;
}
/**
* 纪录血块的位置;
*/
private
int
[][] pos={
{
400
,
300
},{
400
,
320
},{
420
,
320
},{
440
,
300
},{
440
,
330
},{
480
,
400
},{
520
,
400
},{
540
,
400
}};
public
Blood()
{
x=pos[
0
][
0
];
y=pos[
0
][
1
];
w=h=
18
;
}
public
void
draw(Graphics g)
{
if
(!live)
return
;
Color c=g.getColor();
g.setColor(Color.CYAN);
g.fillOval(x, y, w, h);
g.setColor(c);
move();
}
/**
* 移动血块
*/
public
void
move()
{
step++;
if
(step>=pos.length) step=
0
;
else
{
x=pos[step][
0
];
y=pos[step][
1
];
}
}
public
Rectangle getRect()
{
return
new
Rectangle(x,y,w,h);
}
}
|
Explode.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package
com.hkm.TankWar;
import
java.awt.*;
/**
* 爆炸类
* @author Hekangmin
*
*/
public
class
Explode {
private
int
x,y;
//爆炸发生的位置
private
boolean
Live=
true
;
int
dia[]={
4
,
8
,
12
,
16
,
32
,
40
,
20
,
14
,
4
};
//用园模拟,代表圆的直径;
int
step=
0
;
//区别移到第几个直径
private
TankWarClient tc;
//持有引用
public
Explode(
int
x,
int
y,TankWarClient tc)
{
this
.x=x;
this
.y=y;
this
.tc=tc;
}
public
void
draw(Graphics g)
{
if
(!Live)
{
tc.explodes.remove(
this
);
return
;
}
if
(step==dia.length)
//如果到了最后一个直径爆炸死亡;
{
Live=
false
;
step=
0
;
return
;
}
Color c=g.getColor();
g.setColor(Color.YELLOW);
g.fillOval(x, y, dia[step], dia[step]);
g.setColor(c);
step++;
}
}
|
Missile.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
|
package
com.hkm.TankWar;
import
java.awt.*;
import
java.awt.Event.*;
import
java.awt.event.KeyEvent;
import
java.util.List;
/**
* 子弹类
* @author Hekangmin
*
*/
public
class
Missile {
private
int
x,y;
//子弹的位置
private
Tank.Direction dir;
//坦克方向
private
static
final
int
XSPEED=
10
;
//坦克x方向的移动速度,
private
static
final
int
YSPEED=
10
;
//坦克y方向的移动速度,
public
static
final
int
WIDTH=
10
;
public
static
final
int
HEIGHT=
10
;
private
boolean
Live=
true
;
//判断子弹是否活着
private
boolean
good;
//区分敌军子弹和我军子弹
private
TankWarClient tc;
public
Missile(
int
x,
int
y, Tank.Direction dir) {
this
.x = x;
this
.y = y;
this
.dir = dir;
|