本人的GitHub:戳我一下(该项目的全部内容可以从GitHub上下载)
坦克大战这个项目很多学习人在学习java的过程中都做过,我从网上看了韩顺平老师的视频,然后做出了这么一个小游戏,其中还有很多功能没有实现,只能作为一个基础版本,还有很多不完善的地方,希望看到这篇文章的人把这些代码只当作一个借鉴。写这个小项目的过程也是对java se部分的知识的巩固,java se部分只是过度,但是这部分的知识却是非常重要的,希望下面的内容能对你有所帮助。
Members(包含了所有的类)
坦克类
坦克类分为三个类,一个是Tank类,另外两个是继承了Tank类的MyTank类,和EnimyTank类。
Tank类
//坦克类
class Tank {
//设置速度
int speed = 2;
public int getSpeed() {
return speed;
}
public void setSpeed(int speed) {
this.speed = speed;
}
boolean islive = true;
//坦克的种类
int type = 0;
public int getType() {
return type;
}
public void setType(int type) {
this.type = type;
}
//坦克的横坐标
int x = 0;
//坦克的纵坐标
int y = 0;
//坦克方向
//0:上 1:下 2:左 3:右
int direct = 0;
public int getDirect() {
return direct;
}
public void setDirect(int direct) {
this.direct = direct;
}
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 Tank(int x, int y) {
this.x = x;
this.y = y;
}
}
MyTank类
//我的坦克
class MyTank extends Tank {
Vector<Shot> ss = new Vector<>();
Shot s = null;
public MyTank(int x, int y) {
super(x,y);
this.setType(0);
}
//开火
public void shotenimy() {
switch(this.direct) {
case 0:
//创建一颗子弹
s = new Shot(x+10, y-5, 0);
ss.add(s);
break;
case 1:
s = new Shot(x+10, y+35, 1);
ss.add(s);
break;
case 2:
s = new Shot(x-5, y+10, 2);
ss.add(s);
break;
case 3:
s = new Shot(x+35, y+10, 3);
ss.add(s);
break;
}
Thread t = new Thread(s);
t.start();
}
//坦克移动
public void moveUp() {
if(this.y > 0)
this.y-=this.speed;
}
public void moveDown() {
if(this.y < 600)
this.y+=this.speed;
}
public void moveLeft() {
if(this.x > 0)
this.x-=this.speed;
}
public void moveRight() {
if(this.x < 800)
this.x+=this.speed;
}
}
EnimyTank类
//敌人的坦克,把敌人的坦克做成线程
class EnimyTank extends Tank implements Runnable{
int times = 0;
//定义一个向量,可以访问到Mypanel上所有的敌人坦克
Vector<EnimyTank> ets = new Vector<>();
//定义一个子弹向量
Vector<Shot> ss = new Vector<>();
//敌人添加子弹应该在坦克刚刚创建和子弹死亡后
public EnimyTank(int x, int y) {
super(x,y);
}
//得到Mypanel的敌人坦克向量
public void setEts(Vector<EnimyTank> vv) {