本章概述:本章主要讲了
1、定义坦克方向的enum,根据按键状态确定坦克方向,根据坦克方向确定坦克位移。
2、抽象出坦克类,封装相应的属性和方法,在tankFrame中直接调用。
3、添加坦克静止的处理,只要四个键都没有按下去,坦克就是静止的。
4、定义子弹类,设定属性和方法,new出一颗新的子弹,在屏幕上画出来。
5、按下space键,tank会火出一颗子弹,必须持有tankFrame的引用,把子弹传递给窗口,画出来
目录
一、定义坦克方向的enum,根据按键状态确定坦克方向,根据坦克方向确定坦克位移
二、抽象出坦克类,封装相应的属性和方法,在tankFrame中直接调用
三、添加坦克静止的处理,只要四个键都没有按下去,坦克就是静止的
四、定义子弹类,设定属性和方法,new出一颗新的子弹,在屏幕上画出来
五、按下space键,tank会火出一颗子弹,必须持有tankFrame的引用,把子弹传递给窗口,画出来
本章概述:
一、定义坦克方向的enum,根据按键状态确定坦克方向,根据坦克方向确定坦克位移
1、TankFrame
package com.tencent.tank;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author YuPanpan
* @version 1.0
*/
public class TankFrame extends Frame {
int x = 200,y=200;
Dir dir = Dir.DOWN;
static final int SPEED = 10;
public TankFrame(){
@ -33,10 +35,25 @@ public class TankFrame extends Frame {
@Override
public void paint(Graphics g) {
// System.out.println("paint");
g.fillRect(x,y,50,50);
// x += 10;
// y += 50;
switch(dir){
case LEFT:
x -= SPEED;
break;
case UP:
y -= SPEED;
break;
case RIGHT:
x += SPEED;
break;
case DOWN:
y += SPEED;
break;
default:
break;
}
}
class MyListener extends KeyAdapter{
@ -47,7 +64,6 @@ public class TankFrame extends Frame {
boolean bD = false;
@Override
public void keyPressed(KeyEvent e) {
// System.out.println("pressed");
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT:
@ -65,11 +81,40 @@ public class TankFrame extends Frame {
default:
break;
}
setMainTankDir();
}
@Override
public void keyReleased(KeyEvent e) {
// System.out.println("released");
int key = e.getKeyCode();
switch(key){
case KeyEvent.VK_LEFT:
bL = false;
break;
case KeyEvent.VK_UP:
bU = false;
break;
case KeyEvent.VK_RIGHT:
bR = false;
break;
case KeyEvent.VK_DOWN:
bD = false;
break;
default:
break;
}
setMainTankDir();
}
private void setMainTankDir() {
if(bL) dir = Dir.LEFT;
if(bU) dir = Dir.UP;
if(bR) dir = Dir.RIGHT;
if(bD) dir = Dir.DOWN;
}
}
}
2、Dir
public enum Dir {
LEFT,UP,RIGHT,DOWN
}
二、抽象出坦克类,封装相应的属性和方法,在tankFrame中直接调用
1、TankFrame
package com.tencent.tank;
import java.awt.*;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
/**
* @author YuPanpan
* @version 1.0
*/
public class TankFrame extends Frame {
int x = 200,y=200;
Dir dir = Dir.DOWN;
static final int SPEED = 10;
Tank myTank = new Tank(200,200,Dir.DOWN);
public TankFrame(){
setTitle("tank war");
@ -35,24 +32,8 @@ public class TankFrame extends Frame {
@Override
public void paint(Graphics g) {
g.fillRect(x,y,50,50);
switch(dir){
case LEFT:
x -= SPEED;
break;
case UP:
y -= SPEED;
break;
case RIGHT:
x += SPEED;
break;
case DOWN:
y += SPEED;
break;
default:
break;
}
myTank.paint