Java之详解坦克大战游戏(六)

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

现在代码已经越写越多了,这里我们又新建一个包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);
                    //如果不是自己
                    i
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值