目前完成了:我方坦克的移动,以及敌方坦克的生成
父类坦克
package TankGeme;
/**
* @author Lenovo
* 坦克模型
*/
public class Tank {
//坦克的横坐标,纵坐标
private int x;
private int y;
//坦克方向0123
private int direction;
//速度
private int speed;
public Tank(int x, int y) {
this.x = x;
this.y = y;
}
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 getDirection() {
return direction;
}
public void setDirection(int direction) {
this.direction = direction;
}
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
//坦克移动方法
//上
public void moveUp(){
y=y-speed;
}
//下
public void moveDown(){
y=y+speed;
}//左
public void moveLeft(){
x=x-speed;
}
//右
public void moveRight(){
x=x+speed;
}
}
我的坦克
package TankGeme;
/**
* @author 小小小白白白白
* 我的坦克
*/
public class MyTank extends Tank{
public MyTank(int x, int y) {
super(x, y);
}
}
敌方坦克
package TankGeme;
/**
* @author 小小小白白白白
* 敌人的坦克
*/
public class EnemyTank extends Tank{
public EnemyTank(int x, int y) {
super(x, y);
}
}
绘图区域
package TankGeme;
import javax.swing.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.util.Vector;
/**
* @author 小小小白白白白
* 坦克大战的绘图区域
* 为了监听键盘事件,实现keyListner
*/
public class MyPanel extends JPanel implements KeyListener {
//定义我的坦克
MyTank mt=null;
/**
* 定义敌方坦克,存入Vector集合
* 之所以使用Vector是因为它是线程安全的
*/
Vector<EnemyTank> wt=new Vector<>();
//定义敌人的数量
int amount=3;
public MyPanel() {
//初始化我的坦克
mt=new MyTank(400,400);
mt.setSpeed(10);
//使用for来初始化敌方坦克
for (int i = 0; i < amount; i++) {
//创建一个坦克
EnemyTank enemyTank = new EnemyTank(100 * (i + 1), 100);
//将每一个坦克都初始化朝下
enemyTank.setDirection(2);
//将创建的坦克加入Vector
wt.add(enemyTank);
}
}
@Override
public void paint(Graphics g) {
super.paint(g);
//填充矩形,默认黑色
g.fillRect(0,0,1000,750);
//调用画坦克方法
drawTank(mt.getX(),mt.getY(),g,mt.getDirection(),0);
//画出敌方坦克,遍历Vector
for (int i = 0; i < wt.size(); i++) {
//取出的每一个都是一个坦克对象
EnemyTank enemyTank = wt.get(i);
//生成坦克
drawTank(enemyTank.getX(),enemyTank.getY(),g,enemyTank.getDirection(),1);
}
}
/**
* 编写坦克方法
* x 坦克的左上角x坐标
* y 坦克的左上角y坐标
* g 画笔
* direction 坦克方向(上下左右)
* type 坦克类型
*/
public void drawTank(int x,int y,Graphics g,int direction,int type) {
//根据不同类型的坦克设置不同的颜色
switch(type) {
//我们的坦克
case 0:g.setColor(Color.CYAN);break;
//敌人的坦克
case 1:g.setColor(Color.yellow);break;
default:
System.out.println("不存在");
}
//根据坦克方向来绘制坦克
//0123上右下左
switch(direction) {
//上
case 0:
//左边的轮子
g.fill3DRect(x,y,10,60,false);
//右边的轮子
g.fill3DRect(x+30,y,10,60,false);
//主体
g.fill3DRect(x+10,y+10,20,40,false);
//圆盖
g.fillOval(x+10,y+20,20,20);
//炮筒
g.drawLine(x+20,y+30,x+20,y);
break;
//右
case 1:
//左边的轮子
g.fill3DRect(x,y,60,10,false);
//右边的轮子
g.fill3DRect(x,y+30,60,10,false);
//主体
g.fill3DRect(x+10,y+10,40,20,false);
//圆盖
g.fillOval(x+20,y+10,20,20);
//炮筒
g.drawLine(x+30,y+20,x+60,y+20);
break;
//下
case 2:
//左边的轮子
g.fill3DRect(x,y,10,60,false);
//右边的轮子
g.fill3DRect(x+30,y,10,60,false);
//主体
g.fill3DRect(x+10,y+10,20,40,false);
//圆盖
g.fillOval(x+10,y+20,20,20);
//炮筒
g.drawLine(x+20,y+30,x+20,y+60);
break;
//左
case 3:
//左边的轮子
g.fill3DRect(x,y,60,10,false);
//右边的轮子
g.fill3DRect(x,y+30,60,10,false);
//主体
g.fill3DRect(x+10,y+10,40,20,false);
//圆盖
g.fillOval(x+20,y+10,20,20);
//炮筒
g.drawLine(x+30,y+20,x,y+20);
break;
default:
System.out.println("不存在");
}
}
//有字符输出时,该方法就会被触发
@Override
public void keyTyped(KeyEvent e) {
}
//某个键被按下时,该方法就会被触发
@Override
public void keyPressed(KeyEvent e) {
//按下W键
if(e.getKeyCode() == KeyEvent.VK_W){
mt.setDirection(0);
mt.moveUp();
}
//按下D键
else if(e.getKeyCode() == KeyEvent.VK_D){
mt.setDirection(1);
mt.moveRight();
}
//按下S键
else if(e.getKeyCode() == KeyEvent.VK_S){
mt.setDirection(2);
mt.moveDown();
}
//按下A键
else if(e.getKeyCode() == KeyEvent.VK_A){
mt.setDirection(3);
mt.moveLeft();
}
//重绘面板
this.repaint();
}
//某个键被松开时,该方法就会被触发
@Override
public void keyReleased(KeyEvent e) {
}
}
游戏入口
package TankGeme;
import javax.swing.*;
/**
* @author 小小小白白白白
* 框架及入口
*/
public class Game01 extends JFrame {
//定义MyPanel
MyPanel mp=null;
public static void main(String[] args) {
Game01 game01 = new Game01();
}
public Game01(){
mp=new MyPanel();
//将游戏的绘图区域放入画框
this.add(mp);
//设置画框大小
this.setSize(1000,750);
//监听键盘事件
this.addKeyListener(mp);
//可视化
this.setVisible(true);
//退出
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}