项目-坦克大战学习-控制人机发射子弹以及玩家受到攻击

news/2024/10/8 22:02:49/

控制人机发射子弹有几个条件,发射子弹的间隔以及攻击对象的筛选

我们前面已经将子弹生成程序写出来了,在子弹类中我们定义了枚举类型用来分辨是谁发射出来的子弹

玩家发射出来的子弹定义:

 duixiangweizhi.zidan(x, y, zidanen.wanjia, Fangxiang);//传入修改后的point实例化子弹标签为wanjia

人机发射出来的子弹定义:

duixiangweizhi.zidan(x, y, zidanen.renji, Fangxiang);//传入修改后的point调整子弹生成位置标签为人机

我们需要设置一个方法让子弹发射有间隔,可以在子弹类中设置一个计数器,每运行一帧计数器加一,当计数器变为我们设定的时间时运行子弹生成方法然后将计数器重置

private void zidanshengcheng()//子弹生成设置
    {
    fs++;
    if (fs == 100)
    {
        int x = this.x;//设置临时point
        int y = this.y;
        switch (Fangxiang)//检测当前坦克方向
        {
            case fangxiang.Up:
                x += kuan / 2;//修改子弹生成位置
                break;
            case fangxiang.Down:
                x += kuan / 2;
                y += gao;
                break;
            case fangxiang.Left:
                y += gao / 2;
                break;
            case fangxiang.Right:
                y += gao / 2;
                x += kuan;
                break;
        }
        duixiangweizhi.zidan(x, y, zidanen.renji, Fangxiang);//传入修改后的point调整子弹生成位置标签为人机
        fs = 0;
    }

然后需要控制子弹攻击到的对象,在对象位置类中我们之前就定义了人机的碰撞检测,然后可以在定义一个玩家的碰撞检测

public static wanjia wanjiapengzhuang(Rectangle re)//检测玩家是否发生碰撞
{
    {
        if(tank.getjuxing().IntersectsWith(re))
        {
            return tank;
        }
        return null;
    }
}

在子弹类中我们有子弹碰撞到人机的方法,可以在方法前加一个前置条件,如果当前子弹的标签为wanjia才能运行碰撞程序,否则无视碰撞

 if (zd == zidanen.wanjia)//如果是玩家发射的子弹
 {
     if ((rg=duixiangweizhi.renjipengzhuang(rec))!=null)//检测碰撞到人机
     {
    
         duixiangweizhi.boom(boomx, boomy);//爆炸特效
         xiaohui = true;

         duixiangweizhi.renjixiaohui(rg); return;
     }
 }

玩家被攻击的道理相同,不过不同的是玩家被攻击了不会销毁,而是扣除hp值,直到玩家hp值被扣完就会将玩家的位置重置

 if(zd==zidanen.renji)//如果子弹是由人机发射出
 {
     if(duixiangweizhi.wanjiapengzhuang(rec) != null)
     {
         duixiangweizhi.boom(boomx, boomy);//爆炸特效
         xiaohui = true;
         wanjia.hp--;//玩家血量减少
     }
     
 }

在玩家类需要定义一个初始hp,当hp扣完后就会运行方法使玩家位置重置血量重置

public  void Hp()//血量检测
{
    if(hp==0)
    {
        x = 5*30;
        y = 14*30;
        hp = 2;
    }
}


http://www.ppmy.cn/news/1536317.html

相关文章

国外电商系统开发-运维系统文件上传

文件上传,是指您把您当前的PC电脑上的文件批量的上传到远程服务器上,在这里,您可以很轻松的通过拖动方式上传,只需要动动鼠标就搞定。 第一步,您应该选择要上传的服务器: 选择好了以后,点击【确…

前端基础面试题·第四篇——Vue(其二)

1.Vue中路由传参 1.params传参 params 传参是通过URL路径来传递参数,这种方式传递的参数是必选的。这种传参方式需要在路由配置时在路由路径位置提前指定参数。 路由配置 const router new VueRouter({routes: [{path: /user/:id, // 这里的:id就是参数name: u…

OpenAI在周四推出了一种与ChatGPT互动的新方式——一种名为“Canvas”的界面

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

论文速读:基于渐进式转移的无监督域自适应舰船检测

这篇文章的标题是《Unsupervised Domain Adaptation Based on Progressive Transfer for Ship Detection: From Optical to SAR Images》基于渐进式转移的无监督域自适应舰船检测:从光学图像到SAR图像,作者是Yu Shi等人。文章发表在IEEE Transactions on Geoscience…

pygame--超级马里奥(万字详细版)

超级马里奥点我下载https://github.com/marblexu/PythonSuperMario 1.游戏介绍 小时候的经典游戏,代码参考了github上的项目Mario-Level-1,使用pygame来实现,从中学习到了横版过关游戏实现中的一些处理方法。原项目实现了超级玛丽的第一个小…

贪心算法专题(一)

目录 1、贪心算法简介 1.1 什么是贪心算法 1.2 贪心算法的特点 1.3 贪心算法的学习方向 2、算法应用【leetcode】 2.1 题一:柠檬水找零 2.1.1 算法原理 2.1.2 算法代码 2.2 题二:将数组和减半的最少操作次数 2.2.1 算法原理 2.2.2 算法代码 2…

JavaEE一条龙学习----前端开发准备(二)

上一章为大家推荐了几款前端开发软件 我个人习惯使用VS Code Microsoft出品,轻量但强大,针对于编写现代Web和云应用的跨平台源代码编辑器。可以在MacOS X、Windows和 Linux等操作平台使用。 具有对JavaScript、TypeScript和Node.js的内置支持&#xff0…

【网络安全】绕过 Etplorer 管理面板实现RCE

未经许可,不得转载。 文章目录 正文使用 ffuf 进行FUZZ查找漏洞漏洞复现目标网站:https://app.redacted.com 正文 使用 ffuf 进行FUZZ ffuf -u https://app.redacted.com/FUZZ -w wordlist.txt -c -r-c:表示彩色输出,方便用户在终端中查看结果。 -r:忽略响应中的重定向…