1.创建坦克对象
在game包里创建坦克类Tank。
public class Tank {
//四个方向
public static final int DIR_UP=0;
public static final int DIR_DOWN=1;
public static final int DIR_LEFT=2;
public static final int DIR_RIGHT=3;
//半径
public static final int RADIUS=20;
//默认速度
public static final int DEFAULT_SPEED=4;
//坦克状态:静止,移动,死亡
public static final int STATE_STAND=0;
public static final int STATE_MOVE=1;
public static final int STATE_DIE=2;
//坦克的初始生命值
private static final int DEFAULT_HP = 1000 ;
//坐标
private int x,y;
//血量
private int hp=DEFAULT_HP;
//攻击力
private int atk;
//速度
private int speed;
//方向
private int dir;
//状态
private int state = STATE_STAND;
//颜色
private Color color;
//炮弹
private List bullets =new ArrayList();
public Tank(int x,int y,int dir){
this.x=x;
this.y=y;
this.dir=dir;
color= MyUtil.getRandomColor();
}
}
为了使生成的坦克有颜色,并且是随机的。在util包中创建一个工具类MyUtil,实现颜色随机。
public class MyUtil {
public static final int getRandomNumber(int min,int max){
return (int)(Math.random()*(max-min)+min);
}
public static final Color getRandomColor(){
int red=getRandomNumber(0,256);
int blue=getRandomNumber(0,256);
int green=getRandomNumber(0,256);
return new Color(red,green,blue);
}
}
画坦克(画一个圆加上两条线),而且坦克的炮是有上下左右方向的。
/**
* 绘制坦克
* @param g
*/
public void draw(Graphics g)
{
g.setColor(color);
//绘制坦克的圆
g.fillOval(x-RADIUS,y-RADIUS,RADIUS<<1,RADIUS<<1);
int endX=x;
int endY=y;
switch (dir){
case DIR_UP:
endY=y-RADIUS*2;
g.drawLine(x-1,y,endX-1,endY);
g.drawLine(x+1,y,endX+1,endY);
break;
case DIR_DOWN:
endY=y+RADIUS*2;
g.drawLine(x-1,y,endX-1,endY);
g.drawLine(x+1,y,endX+1,endY);
break;
case DIR_LEFT:
endX=x-RADIUS*2;
g.drawLine(x,y-1,endX,endY-1);
g.drawLine(x,y+1,endX,endY+1);
break;
case DIR_RIGHT:
endX=x+RADIUS*2;
g.drawLine(x,y-1,endX,endY-1);
g.drawLine(x,y+1,endX,endY+1);
break;
}
}
2.游戏开始状态下的方法
在菜单栏中选择开始游戏,按回车键进入。
private void KeyEventMenu(int keyCode) {
switch (keyCode){
case KeyEvent.VK_UP:
case KeyEvent.VK_W:
menuIndex=(menuIndex-1+MENUS.length)%MENUS.length;
// repaint();
break;
case KeyEvent.VK_DOWN:
case KeyEvent.VK_S:
menuIndex=(menuIndex+1)%MENUS.length;
//repaint();
break;
case KeyEvent.VK_ENTER:
newgame();
break;
}
}
在GameFrame中创建开始游戏的方法。切换到游戏开始状态,创建一个坦克对象。
private void newgame() {
gameState=STATE_RUN;
//创建坦克对象,敌人的坦克对象
mytank= new Tank(400,200,Tank.DIR_DOWN);
}
切换到游戏开始状态。绘制游戏开始的画面。
private void drawRun(Graphics g) {
g.setFont(GAME_FONT);
//绘制黑色的背景
g.setColor(Color.black);
g.fillRect(0,0,FRAME_WIDTH,FRAME_HEIGHT );
mytank.draw(g);
}
写游戏开始状态下键盘监听事件,通过上下左右键改变坦克的方向。
private void KeyEventRun(int keyCode) {
switch (keyCode){
case KeyEvent.VK_UP:
case KeyEvent.VK_W:
mytank.setDir(Tank.DIR_UP);
break;
case KeyEvent.VK_DOWN:
case KeyEvent.VK_S:
mytank.setDir(Tank.DIR_DOWN);
break;
case KeyEvent.VK_LEFT:
case KeyEvent.VK_A:
mytank.setDir(Tank.DIR_LEFT);
break;
case KeyEvent.VK_RIGHT:
case KeyEvent.VK_D:
mytank.setDir(Tank.DIR_RIGHT);
break;
}
}