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

本文档详细介绍了如何在Java坦克大战游戏中实现子弹连发和碰撞检测功能。通过使用Vector集合初始化多个子弹,实现了子弹的连发,并设置了连发限制。同时,新增了判断子弹是否击中敌人坦克的函数,当敌人坦克被击中时,会自动消失,增加了游戏的挑战性。最后,预告了下一篇文章将涉及敌人坦克的自由移动和开火功能。
摘要由CSDN通过智能技术生成

目前我们的坦克能发子弹,但是只能发一颗,而且打到敌人坦克敌人还不会消失,本篇我们就来解决这个问题…子弹要想做到连发,就得初始化多个子弹,这个时候我们仍然还是跟定义敌人的坦克组一样用Vector集合..

class Hero extends Tank
{
   
    //子弹
    Vector<Shot> ss = new Vector<Shot>();  //Vector集合
    Shot s = null;
    //...
    //开火
    public void shotEnemy()
    {
        switch (this.direct) //子弹的方向
        {
  //s只是代号而已,指向谁就谁,不要理解它是同一颗子弹
        case 0:
            //创建一颗子弹(下同)
            s=new Shot(x+10, y,0);
            //把子弹加入向量(下同)
            ss.add(s);
            break;
        case 1:
            s=new Shot(x+30,y+10,1);
            ss.add(s);
            break;
        case 2:
            s=new Shot(x+10,y+30,2);
            ss.add(s);
            break;
        case 3:
            s=new Shot(x,y+10,3);
            ss.add(s);
            break;
        }
        //启动子弹线程
        Thread t = new Thread(s);
        t.start();
    }

在到MyPanel类修改和添加代码

public void paint(Graphics g)
    {
        super.paint(g);
        g.fillRect(0, 0, 1200, 900);  //填充使背景变为黑色   

        //从ss中取出每颗子弹,并画出
        for(int i=0;i<hero.ss.size();i++)
        {
            Shot myShot = hero.ss.get(i);
            //画出一颗子弹
            if(myShot!=null && myShot.isLive == true)
            {
                g.setColor(Color.yellow);
                g.draw3DRect(myShot.x, myShot.y, 1, 1, false);
            }
            if(myShot.isLive==false) //子弹死亡(下面将用到)
            {
                //从ss中删除该子弹
                hero.ss.remove(myShot);
            }
        }

随着代码越写越多,可能我们会觉得很乱,这时看Eclipse编写代码页面右边有个Outline
这里写图片描述这里写图片描述
点一下就跳到我们要的类或方法了,比较容易看..

这时,子弹已经可以连发了..不过,打得还真是没有限制哦,无限连发,游戏都没难度了。所以,我们还是来设置一下连发限制吧..

public void keyPressed(KeyEvent e) 
{       //.......
        //判断玩家是否按下j键
        if(e.getKeyCode() == KeyEvent.VK_J)
        {
            if(this.hero.ss.size()<=4)//最多连发5颗子弹
            {
  //为什么是<=4?因为进入shotEnemy后才由集合里面个数才由0变为1
                //开火
                this.hero.shotEnemy();
            }
        }
}

这样最多能发五颗了,什么叫连发呢?上面paint方法有个子弹死亡的处理,也就是子弹打出后飞出界了或打到敌人坦克就算死亡,那么,接下来就要让敌人坦克碰到我们的子弹就消失吧..
这里我们写一个函数专门判断子弹是否会击中敌人坦克,先到Members.java文件中EnemyTank类添加一个变量isLive用于判断坦克的死活

boolean isLive=true; 
//写一个函数专门判断子弹是否会击中敌人坦克
    public void hitTank(Shot s,EnemyTank et)
    {
        //判断该坦克的方向
        switch (et.direct) 
        {
        //如果敌人坦克方向是上或是下
        case 0:
        case 2:
        //根据子弹坐标和敌人坦克坐标确定是否子弹到敌人坦克范围(可以测试看看)
            if(s.x<et.x && s.x<et.x+20 && s.y>et.y && s.y<et.y+30)
            {
                //击中
                //子弹死亡
                s.isLive=false;
                //敌人坦克死亡
                et.isLive=false;
            }
        break;
        //向左或向右
        case 1:
        case 3:
            if(s.x>et.x && s.x<et.x+30 && s.y>et.y && s.y<et.y+20)
            {
                //击中
    
  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
机战游戏是一款以机械战斗为主题的游戏。在这款游戏中,玩家将扮演机器人的驾驶员,与其他玩家或AI对手进行战斗。 首先,机战游戏通常具有丰富的战斗系统。玩家可以选择不同的机器人,每个机器人都有独特的外观、武器和特殊技能。玩家需要根据自己的游戏风格和对手的实力来选择合适的机器人,并在战斗中灵活运用各种战术和策略。同时,游戏中也经常会出现各种任务和挑战,如夺旗模式、破坏敌方基地等,增加了游戏的多样性和趣味性。 其次,机战游戏通常具有高质量的图形和动画效果。游戏中的机器人模型和场景设计精美,动作流畅自然,使玩家身临其境地感受到机器人间激烈的对战场面。同时,游戏也会提供多样的地图和环境,如城市、沙漠、雪山等,增加了游戏的可玩性和视觉享受。 第三,机战游戏通常具有丰富的社交互动性。玩家可以与其他玩家组队进行联机对战,或者加入公会与其他玩家共同完成任务和对抗敌对公会。游戏还常常设置排行榜和竞技场,供玩家展示自己的实力和与其他玩家较量,增加了游戏的竞争性和复杂性。 此外,机战游戏通常还具有升级系统和装备系统。玩家可以通过游戏内的获奖或任务来获得经验和金币,用于提升机器人的属性和能力,并购买新的武器和装备。这种系统可以激励玩家进行不断努力和探索,增加了游戏的长久性和挑战性。 总的来说,机战游戏以其丰富的战斗系统、高质量的图形和动画效果、社交互动性和升级系统等特点,吸引了众多玩家。其战斗策略的挑战、团队协作的互动以及对机器人世界的探索,使得机战游戏成为一款令人热衷的游戏

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值