java坦克大战的总结_JAVA入门到精通-第37讲-事件总结-坦克大战5

本文介绍了如何使用Java编程语言创建一个坦克大战游戏的简单版本。游戏包括画出不同方向的坦克并使其移动,通过监听键盘事件控制坦克的上下左右移动。通过重写`paint`方法绘制坦克图形,并在按下键盘方向键时更新坦克位置并重绘界面。
摘要由CSDN通过智能技术生成

/**

* 功能:坦克游戏的1.01

* 1、画出坦克

* 2、坦克动起来

*/

import java.awt.*;

import java.awt.event.KeyEvent;

import java.awt.event.KeyListener;

import javax.swing.*;

public class MyTank02 extends JFrame{

//定义组件

MyPanel mp=null;

public static void main(String[] args) {

MyTank02 mt=new MyTank02();

}

//构造函数

public MyTank02(){

//构建组件

mp=new MyPanel();

//监听

this.addKeyListener(mp);

//加入组件

this.add(mp);

//设置JFrame窗体

this.setTitle("坦克大战");//JFrame标题

this.setSize(400, 300);//JFrame窗体大小

this.setLocationRelativeTo(null);//在屏幕中心显示

this.setVisible(true);//显示

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame

}

}

//我的面板Panel

class MyPanel extends JPanel implements KeyListener{

//定义一个我的坦克

Hero hero=null;

int x=10,y=10,z=0;//初始坦克在MyPanel的位置

//构造函数

public MyPanel(){

hero=new Hero(x, y, z);//我的坦克初始位置

}

//重写paint函数

public void paint(Graphics g){

super.paint(g);//调用父类paint方法

//设置Panel底色

g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域

//调用坦克

this.drawTank(hero.getX(), hero.getY(), g, 1, hero.getZ());

}

//画出坦克的函数

public void drawTank(int x,int y,Graphics g,int type,int direct){

//判断是什么类型的坦克

switch(type){

case 0:

g.setColor(Color.cyan);//我的坦克颜色

break;

case 1:

g.setColor(Color.yellow);//敌人坦克颜色

break;

case 2:

g.setColor(Color.red);

break;

}

//判断坦克的方向

switch(direct){

//向上走的坦克

case 0:

//画出我的坦克(到时再封装成一个函数)

//1、画出左边的矩形

g.fill3DRect(x, y, 5, 30, false);

//2、画出右边的矩形

g.fill3DRect(x+15, y, 5, 30, false);

//3、画出中间矩形

g.fill3DRect(x+5, y+5, 10, 20, false);

//4、画出中间圆形

g.fillOval(x+5, y+10, 10, 10);

//5、画出线(炮筒)

g.drawLine(x+10, y+15, x+10, y);

break;

//向下走的坦克

case 1:

//1、画出左边的矩形

g.fill3DRect(x, y, 5, 30, false);

//2、画出右边的矩形

g.fill3DRect(x+15, y, 5, 30, false);

//3、画出中间矩形

g.fill3DRect(x+5, y+5, 10, 20, false);

//4、画出中间圆形

g.fillOval(x+5, y+10, 10, 10);

//5、画出线(炮筒)

g.drawLine(x+10, y+15, x+10, y+29);

break;

//向左走的坦克

case 2:

//1、画出上边的矩形

g.fill3DRect(x, y, 30, 5, false);

//2、画出下边的矩形

g.fill3DRect(x, y+15, 30, 5, false);

//3、画出中间矩形

g.fill3DRect(x+5, y+5, 20, 10, false);

//4、画出中间圆形

g.fillOval(x+10, y+5, 10, 10);

//5、画出线(炮筒)

g.drawLine(x+15, y+10, x, y+10);

break;

//向右走的坦克

case 3:

//1、画出左边的矩形

g.fill3DRect(x, y, 30, 5, false);

//2、画出右边的矩形

g.fill3DRect(x, y+15, 30, 5, false);

//3、画出中间矩形

g.fill3DRect(x+5, y+5, 20, 10, false);

//4、画出中间圆形

g.fillOval(x+10, y+5, 10, 10);

//5、画出线(炮筒)

g.drawLine(x+15, y+10, x+29, y+10);

break;

}

}

public void keyPressed(KeyEvent e) {//按下键事件

if(e.getKeyCode()==KeyEvent.VK_DOWN){

hero.setX(x);

hero.setY(y++);

hero.setZ(z+1);

}else if(e.getKeyCode()==KeyEvent.VK_UP){

hero.setX(x);

hero.setY(y--);

hero.setZ(z+0);

}else if(e.getKeyCode()==KeyEvent.VK_LEFT){

hero.setX(x--);

hero.setY(y);

hero.setZ(z+2);

}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){

hero.setX(x++);

hero.setY(y);

hero.setZ(z+3);

}

//调用repaint()函数,来重绘界面

this.repaint();

}

public void keyReleased(KeyEvent e) {//弹起键事件

}

public void keyTyped(KeyEvent e) {//按键输出值

}

}

//定义坦克类

class Tank{

//表示坦克的X横坐标Y纵坐标Z坦克方向

int x=0,y=0,z=0;

public Tank(int x,int y,int z){

this.x=x;

this.y=y;

this.z=z;

}

public int getX() {

return x;

}

public void setX(int x) {

this.x = x;

}

public int getY() {

return y;

}

public void setY(int y) {

this.y = y;

}

public int getZ() {

return z;

}

public void setZ(int z) {

this.z = z;

}

}

//我的坦克

class Hero extends Tank{

public Hero(int x,int y,int z){

super(x,y,z);

}

}

x

1/**

2* 功能:坦克游戏的1.01

3* 1、画出坦克

4* 2、坦克动起来

5*/

6import java.awt.*;

7import java.awt.event.KeyEvent;

8import java.awt.event.KeyListener;

9

10import javax.swing.*;

11public class MyTank02 extends JFrame{

12//定义组件

13MyPanel mp=null;

14public static void main(String[] args) {

15MyTank02 mt=new MyTank02();

16}

17//构造函数

18public MyTank02(){

19//构建组件

20mp=new MyPanel();

21

22//监听

23this.addKeyListener(mp);

24

25//加入组件

26this.add(mp);

27

28//设置JFrame窗体

29this.setTitle("坦克大战");//JFrame标题

30this.setSize(400, 300);//JFrame窗体大小

31this.setLocationRelativeTo(null);//在屏幕中心显示

32this.setVisible(true);//显示

33this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame

34

35}

36}

37

38//我的面板Panel

39class MyPanel extends JPanel implements KeyListener{

40//定义一个我的坦克

41Hero hero=null;

42

43int x=10,y=10,z=0;//初始坦克在MyPanel的位置

44

45//构造函数

46public MyPanel(){

47hero=new Hero(x, y, z);//我的坦克初始位置

48}

49

50//重写paint函数

51public void paint(Graphics g){

52super.paint(g);//调用父类paint方法

53//设置Panel底色

54g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域

55//调用坦克

56this.drawTank(hero.getX(), hero.getY(), g, 1, hero.getZ());

57}

58

59//画出坦克的函数

60public void drawTank(int x,int y,Graphics g,int type,int direct){

61//判断是什么类型的坦克

62switch(type){

63case 0:

64g.setColor(Color.cyan);//我的坦克颜色

65break;

66case 1:

67g.setColor(Color.yellow);//敌人坦克颜色

68break;

69case 2:

70g.setColor(Color.red);

71break;

72}

73

74//判断坦克的方向

75switch(direct){

76//向上走的坦克

77case 0:

78//画出我的坦克(到时再封装成一个函数)

79//1、画出左边的矩形

80g.fill3DRect(x, y, 5, 30, false);

81//2、画出右边的矩形

82g.fill3DRect(x+15, y, 5, 30, false);

83//3、画出中间矩形

84g.fill3DRect(x+5, y+5, 10, 20, false);

85//4、画出中间圆形

86g.fillOval(x+5, y+10, 10, 10);

87//5、画出线(炮筒)

88g.drawLine(x+10, y+15, x+10, y);

89break;

90//向下走的坦克

91case 1:

92//1、画出左边的矩形

93g.fill3DRect(x, y, 5, 30, false);

94//2、画出右边的矩形

95g.fill3DRect(x+15, y, 5, 30, false);

96//3、画出中间矩形

97g.fill3DRect(x+5, y+5, 10, 20, false);

98//4、画出中间圆形

99g.fillOval(x+5, y+10, 10, 10);

100//5、画出线(炮筒)

101g.drawLine(x+10, y+15, x+10, y+29);

102break;

103//向左走的坦克

104case 2:

105//1、画出上边的矩形

106g.fill3DRect(x, y, 30, 5, false);

107//2、画出下边的矩形

108g.fill3DRect(x, y+15, 30, 5, false);

109//3、画出中间矩形

110g.fill3DRect(x+5, y+5, 20, 10, false);

111//4、画出中间圆形

112g.fillOval(x+10, y+5, 10, 10);

113//5、画出线(炮筒)

114g.drawLine(x+15, y+10, x, y+10);

115break;

116//向右走的坦克

117case 3:

118//1、画出左边的矩形

119g.fill3DRect(x, y, 30, 5, false);

120//2、画出右边的矩形

121g.fill3DRect(x, y+15, 30, 5, false);

122//3、画出中间矩形

123g.fill3DRect(x+5, y+5, 20, 10, false);

124//4、画出中间圆形

125g.fillOval(x+10, y+5, 10, 10);

126//5、画出线(炮筒)

127g.drawLine(x+15, y+10, x+29, y+10);

128break;

129}

130}

131

132public void keyPressed(KeyEvent e) {//按下键事件

133if(e.getKeyCode()==KeyEvent.VK_DOWN){

134hero.setX(x);

135hero.setY(y++);

136hero.setZ(z+1);

137}else if(e.getKeyCode()==KeyEvent.VK_UP){

138hero.setX(x);

139hero.setY(y--);

140hero.setZ(z+0);

141}else if(e.getKeyCode()==KeyEvent.VK_LEFT){

142hero.setX(x--);

143hero.setY(y);

144hero.setZ(z+2);

145}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){

146hero.setX(x++);

147hero.setY(y);

148hero.setZ(z+3);

149}

150//调用repaint()函数,来重绘界面

151this.repaint();

152

153}

154

155public void keyReleased(KeyEvent e) {//弹起键事件

156

157

158}

159

160public void keyTyped(KeyEvent e) {//按键输出值

161

162

163}

164

165}

166

167//定义坦克类

168class Tank{

169//表示坦克的X横坐标Y纵坐标Z坦克方向

170int x=0,y=0,z=0;

171

172public Tank(int x,int y,int z){

173this.x=x;

174this.y=y;

175this.z=z;

176}

177

178public int getX() {

179return x;

180}

181

182public void setX(int x) {

183this.x = x;

184}

185

186public int getY() {

187return y;

188}

189

190public void setY(int y) {

191this.y = y;

192}

193

194public int getZ() {

195return z;

196}

197

198public void setZ(int z) {

199this.z = z;

200}

201}

202

203//我的坦克

204class Hero extends Tank{

205public Hero(int x,int y,int z){

206super(x,y,z);

207}

208}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值