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

新建一个包:新建一个类,MyTankGame02.java
}







坦克的移动:

重新绘制repaint才能动起来;
最后,需要注册监听;

这样,改起来速度很灵活;
改变坦克的方向:
Outline:大纲:

类-方法:
根据通包的访问机制,Members和MyTankGame
是可以相互访问的。
根据方向对函数进行扩展:(坦克炮筒方向)

参照点需要从左上角,移动到中心点;

横着放,矩形,宽度、高度需要变化;
敌人的 坦克:
加一个颜色color:

在面板上定义敌人的坦克:

在构造函数里面进行初始化:
每次横坐标间隔50,纵坐标为0:

创建一辆敌人坦克对象,加入到集合中;
画出敌人坦克:
用向量算出敌人坦克数量;

g,direct,type 画笔,方向,坦克颜色
初始化的时候换个方向:

x
1
/**2
* 功能:坦克游戏的1.013
* 1、画出坦克4
* 2、坦克动起来5
*/6
import java.awt.*;7
import java.awt.event.KeyEvent;8
import java.awt.event.KeyListener;9
10
import javax.swing.*;11
public class MyTank02 extends JFrame{12
//定义组件13
MyPanel mp=null;14
public static void main(String[] args) {15
MyTank02 mt=new MyTank02();16
}17
//构造函数18
public MyTank02(){19
//构建组件20
mp=new MyPanel();21
22
//监听23
this.addKeyListener(mp);24
25
//加入组件26
this.add(mp);27
28
//设置JFrame窗体29
this.setTitle("坦克大战");//JFrame标题30
this.setSize(400, 300);//JFrame窗体大小31
this.setLocationRelativeTo(null);//在屏幕中心显示32
this.setVisible(true);//显示33
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出并关闭JFrame34
35
}36
}37
38
//我的面板Panel39
class MyPanel extends JPanel implements KeyListener{40
//定义一个我的坦克41
Hero hero=null;42
43
int x=10,y=10,z=0;//初始坦克在MyPanel的位置44
45
//构造函数46
public MyPanel(){47
hero=new Hero(x, y, z);//我的坦克初始位置48
}49
50
//重写paint函数51
public void paint(Graphics g){52
super.paint(g);//调用父类paint方法53
//设置Panel底色54
g.fillRect(0, 0, 400, 300);//fillRect(0,0,X?,Y?)中X?/Y?为活动区域55
//调用坦克56
this.drawTank(hero.getX(), hero.getY(), g, 1, hero.getZ());57
}58
59
//画出坦克的函数60
public void drawTank(int x,int y,Graphics g,int type,int direct){61
//判断是什么类型的坦克62
switch(type){63
case 0:64
g.setColor(Color.cyan);//我的坦克颜色65
break;66
case 1:67
g.setColor(Color.yellow);//敌人坦克颜色68
break;69
case 2:70
g.setColor(Color.red);71
break;72
}73
74
//判断坦克的方向75
switch(direct){76
//向上走的坦克77
case 0:78
//画出我的坦克(到时再封装成一个函数)79
//1、画出左边的矩形80
g.fill3DRect(x, y, 5, 30, false);81
//2、画出右边的矩形82
g.fill3DRect(x+15, y, 5, 30, false);83
//3、画出中间矩形84
g.fill3DRect(x+5, y+5, 10, 20, false);85
//4、画出中间圆形86
g.fillOval(x+5, y+10, 10, 10);87
//5、画出线(炮筒)88
g.drawLine(x+10, y+15, x+10, y);89
break;90
//向下走的坦克91
case 1:92
//1、画出左边的矩形93
g.fill3DRect(x, y, 5, 30, false);94
//2、画出右边的矩形95
g.fill3DRect(x+15, y, 5, 30, false);96
//3、画出中间矩形97
g.fill3DRect(x+5, y+5, 10, 20, false);98
//4、画出中间圆形99
g.fillOval(x+5, y+10, 10, 10);100
//5、画出线(炮筒)101
g.drawLine(x+10, y+15, x+10, y+29);102
break;103
//向左走的坦克104
case 2:105
//1、画出上边的矩形106
g.fill3DRect(x, y, 30, 5, false);107
//2、画出下边的矩形108
g.fill3DRect(x, y+15, 30, 5, false);109
//3、画出中间矩形110
g.fill3DRect(x+5, y+5, 20, 10, false);111
//4、画出中间圆形112
g.fillOval(x+10, y+5, 10, 10);113
//5、画出线(炮筒)114
g.drawLine(x+15, y+10, x, y+10);115
break;116
//向右走的坦克117
case 3:118
//1、画出左边的矩形119
g.fill3DRect(x, y, 30, 5, false);120
//2、画出右边的矩形121
g.fill3DRect(x, y+15, 30, 5, false);122
//3、画出中间矩形123
g.fill3DRect(x+5, y+5, 20, 10, false);124
//4、画出中间圆形125
g.fillOval(x+10, y+5, 10, 10);126
//5、画出线(炮筒)127
g.drawLine(x+15, y+10, x+29, y+10);128
break;129
}130
}131
132
public void keyPressed(KeyEvent e) {//按下键事件133
if(e.getKeyCode()==KeyEvent.VK_DOWN){134
hero.setX(x);135
hero.setY(y++);136
hero.setZ(z+1);137
}else if(e.getKeyCode()==KeyEvent.VK_UP){138
hero.setX(x);139
hero.setY(y--);140
hero.setZ(z+0);141
}else if(e.getKeyCode()==KeyEvent.VK_LEFT){142
hero.setX(x--);143
hero.setY(y);144
hero.setZ(z+2);145
}else if(e.getKeyCode()==KeyEvent.VK_RIGHT){146
hero.setX(x++);147
hero.setY(y);148
hero.setZ(z+3);149
}150
//调用repaint()函数,来重绘界面151
this.repaint();152
153
}154
155
public void keyReleased(KeyEvent e) {//弹起键事件156
157
158
}159
160
public void keyTyped(KeyEvent e) {//按键输出值161
162
163
}164
165
}166
167
//定义坦克类168
class Tank{169
//表示坦克的X横坐标Y纵坐标Z坦克方向170
int x=0,y=0,z=0;171
172
public Tank(int x,int y,int z){173
this.x=x;174
this.y=y;175
this.z=z;176
}177
178
public int getX() {179
return x;180
}181
182
public void setX(int x) {183
this.x = x;184
}185
186
public int getY() {187
return y;188
}189
190
public void setY(int y) {191
this.y = y;192
}193
194
public int getZ() {195
return z;196
}197
198
public void setZ(int z) {199
this.z = z;200
}201
}202
203
//我的坦克204
class Hero extends Tank{205
public Hero(int x,int y,int z){206
super(x,y,z);207
}208
}


浙公网安备 33010602011771号