现在代码已经越写越多了,这里我们又新建一个包com.TankGame4,复制原来的两个java文件,首先我们来实现一个功能:防止敌人的坦克重叠运动。我们把判断是否碰撞的函数写到EnemyTank类中
Members.java
//敌人的坦克,把敌人做成线程类
class EnemyTank extends Tank implements Runnable
{
//定义一个向量,可以访问到MyPanel上所有敌人的坦克
Vector<EnemyTank> ets = new Vector<EnemyTank>();
//.......
//得到MyPanel的敌人坦克向量
public void setEts(Vector<EnemyTank> vv)
{
this.ets=vv;
}
//.....
}
接下来到MyPanel类的构造函数
public MyPanel()
{//...
//初始化敌人的坦克
for(int i=0;i<enSize;i++)
{
//.......
//将MyPanel的敌人坦克向量交给该敌人坦克
et.setEts(ets);
//...
}
接下来大概计算我们的坦克与敌人坦克相遇的各种情形时的距离
根据这四种情况写代码(代码虽然多,但是思路差不多)
在EnemyTank类写isTouchOtherEnemy()函数
//判断是否碰到了敌人的坦克
public boolean isTouchOtherEnemy()
{
boolean b=false;
switch(this.direct)
{
case 0:
//我的坦克向上
//取出所有的敌人坦克
for(int i=0;i<ets.size();i++)
{
//取出第一个坦克
EnemyTank et = ets.get(i);
//如果不是自己
if(et!=this)
{
//如果敌人的方向是向下或者向上
if(et.direct==0 || et.direct==2)
{
//左点
if(this.x>=et.x && this.x<=et.x+20 && this.y>=et.y && this.y<=et.y+30)
{
return true;
}
if(this.x+20>=et.x && this.x+20<=et.x+20 && this.y>=et.y && this.y<=et.y+30)
{
return true;
}
}
if(et.direct==3 || et.direct==1)
{
if(this.x>=et.x && this.x<=et.x+30 && this.y>=et.y && this.y<=et.y+20)
{
return true;
}
if(this.x+20>=et.x && this.x+20<=et.x+30 && this.y>=et.y && this.y<=et.y+20)
{
return true;
}
}
}
}
break;
case 1:
//坦克向右
//取出所有的敌人坦克
for(int i=0;i<ets.size();i++)
{
//取出第一个坦克
EnemyTank et = ets.get(i);
//如果不是自己

本文介绍了Java坦克大战游戏的开发过程,包括如何防止敌方坦克重叠运动,实现碰撞检测,以及为游戏设置分关功能。通过添加条件判断,避免坦克在即将碰撞时继续移动。此外,还展示了创建开始面板,实现闪烁效果,并添加了选项菜单,让玩家可以选择开始游戏或退出。最后提到了游戏界面的设计和部分源码的获取方式。
最低0.47元/天 解锁文章
1138

被折叠的 条评论
为什么被折叠?



