项目-坦克大战学习-人机随机生成

news/2024/12/22 13:05:46/

想要做到人机随机生成我们需要做到以下几点

1,确定随机生成的位置

2,确定随机生成人机的样式

3,实例化人机

4,绘制人机

在项目中我们由三个位置让人机生成,但是每次生成人机就需要在3个位置中随机挑选一个,所以我们需要将三个位置储存成数组用来调用

private static Point[] Points=new Point[3]; //放置人机位置

Points[0].X = 0;
Points[0].Y = 0;
Points[1].X = 7 * 30;
Points[1].Y = 7 * 30;
Points[2].X = 14 * 30;
Points[2].Y = 14 * 30;

这样,我们就可以设置0到2的随机数传入数组索引随机调用坐标了

 Random rd = new Random();//生成随机数
 int rds=rd.Next(0, 3);//设置只能在0到3之间生成随机数,包含最小值不包含最大值
 Point pos = Points[rds];//创建一个坐标随机放置生成人机的位置

运行一次生成一个坐标

生成坐标后我们还需要随机生成人机的种类,需要创建一个renji类用来实例化人机

renji类和玩家类很像,都有是否移动,速度,四个方向的图片

但是由于我们人机类需要实例化4种人机所以图片对象不是固定的,我们可以将图片对象设置为传参

public renji(int x,int y,int speed,Bitmap up,Bitmap down,Bitmap left,Bitmap right)
{
    this.x = x;
    this.y = y;
    this.speed =speed;//速度

    BitmapUp = up;//设置对应方向图片
    BitmapDown = down;
    BitmapLeft = left;
    BitmapRight = right;
    Fangxiang = fangxiang.Down;
    //因为需要设置4种敌人所以将图片设置为传入的参数,在设置人机时传参调用
}

将四种方向的图片都设置为传参,然后将4种坦克全部实例化出来放进方法中方便调用

private static void renji1(int x,int y)//实例化人机Gray
{
    renji renji1 = new renji(x,y,4,Resources.GrayUp,Resources.GrayDown,Resources.GrayLeft,Resources.GrayRight);
//实例化人机
renjilist.Add(renji1);//将生成的人机放入列表
}
private static void renji2(int x,int y)//实例化人机Green
{
    renji renji1 = new renji(x, y,3, Resources.GreenUp, Resources.GreenDown, Resources.GreenLeft, Resources.GreenRight);
    //实例化人机
    renjilist.Add(renji1);//将生成的人机放入列表
}
private static void renji3(int x, int y)
{
    renji renji1 = new renji(x, y,2, Resources.QuickUp, Resources.QuickDown, Resources.QuickLeft, Resources.QuickUp);
    //实例化人机
    renjilist.Add(renji1);//将生成的人机放入列表
}
private static void renji4(int x, int y)
{
    renji renji1 = new renji(x, y ,5, Resources.SlowUp, Resources.SlowDown, Resources.SlowLeft, Resources.SlowRight);
    //实例化人机
    renjilist.Add(renji1);//将生成的人机放入列表
}

将实例化的人机放入renji类型的列表储存起来方便调用

然后设置人机生成条件,目前设置条件为运行60帧后(一秒后)生成一次,我们可以设置一个数,每当方法运行一次计数器就会加一,等到计数器加到60就向下运行人机生成的代码然后将计数器归0

public static void renji()//人机生成
     {
     int renjishencheng++;//每调用一次计数器加一
         if (renjishencheng <60) return;//如果计数器小于60次那么直接返回出去不调用下面代码
         Random rd = new Random();//生成随机数
         int rds=rd.Next(0, 3);//设置只能在0到3之间生成随机数,包含最小值不包含最大值
         Point pos = Points[rds];//创建一个坐标随机放置生成人机的位置
         Random renjird = new Random();//生成随机数设置人机种类
         int renjirds = renjird.Next(1, 5);//设置只能在1到5之间生成随机数,包含最小值不包含最大值
         switch(renjirds)//随机生成人机
         {
             case 1:
                 renji1(pos.X,pos.Y);
                 break;
                 case 2:
                 renji2(pos.X,pos.Y);
                 break;
                 case 3:
                 renji3(pos.X,pos.Y);
                 break;
                 case 4:
                 renji4(pos.X,pos.Y);                        
                 break;

         }
         renjishencheng = 0;//计数器归零
     }

这样,每一秒实例化一个人机出来

在update方法中绘制人机,用foreach方法遍历renjilist将检测到的renji类型绘制出来

foreach (renji renji in renjilist)//实例化人机
{
    renji.update();
}

将生成人机方法放入update,每秒在renjilist方法中生成一个renji信息


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

相关文章

DevExpress WinForms v24.1新版亮点:富文本编辑器、电子表格组件功能升级

DevExpress WinForms拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜…

C++杂项

作业&#xff1a; 将之前实现的顺序表、栈、队列都更改成模板类 顺序表 #include <iostream>using namespace std;template<typename T>class SeqList { private:T *ptr;int size; //总长度int len 0; //当前顺序表实际长度public://初始…

浅析Golang的Context

文章目录 1. 简介2. 常见用法2.1 控制goroutine的生命周期&#xff08;cancel&#xff09;2.2 传递超时&#xff08;Timeout&#xff09;信息2.3 传递截止时间&#xff08;Deadline&#xff09;2.4 传递请求范围内的全局数据 &#xff08;value&#xff09; 3 特点3.1 上下文的…

边缘自适应粒子滤波(Edge-Adaptive Particle Filter)的MATLAB函数示例,以及相应的讲解

目录 讲解 初始化 预测步骤 观测模拟 权重更新 重采样 状态估计 总结 下面是一个简单的边缘自适应粒子滤波&#xff08;&#xff09;的函数示例&#xff0c;以及相应的讲解。 程序源代码&#xff1a; function X_est edgeAdaptiveParticleFilter(numParticles, numS…

Linux系统字符命令关机方法对比

一、相同点&#xff1a;都可以达到关机或重启系统的目的。 二、不同点&#xff1a;命令内部的工作过程不同。 1、shutdown 安全的关机命令&#xff1a;系统管理员会通知所有登录的用户系统将要关闭且 login 指令会被冻结&#xff0c;即新的用户不能再登录。根据使用的参数不同…

会声会影导出视频mp4格式哪个最高清,会声会影输出格式哪个清晰

调高分辨率后&#xff0c;mp4视频还是不清晰。哪怕全部使用4K级素材&#xff0c;仍然剪不出理想中的高画质作品。不是你的操作有问题&#xff0c;而是剪辑软件没选对。Corel公司拥有全球顶尖的图像处理技术&#xff0c;该公司研发的会声会影视频剪辑软件&#xff0c;在过去的20…

vue2 + View design 使用inputNumber设置默认值为undefined但展示数据为1且表单校验不通过的原因

文章目录 一、背景二、操作步骤1.复现前的准备工作&#xff08;1&#xff09;vue版本和view design 版本&#xff08;2&#xff09;创建一个组件&#xff08;组件中根据类型渲染不同的组件&#xff09;&#xff08;3&#xff09;在list.vue页面中引入组件&#xff0c;传入配置&…

ufw:Linux网络防火墙

一、命令简介 ​ufw​&#xff08;Uncomplicated Firewall&#xff09;是一个为 Linux 系统提供简单易用的命令行界面的防火墙管理工具。它是基于 iptables ​的&#xff0c;但提供了更简洁的语法和更直观的操作方式&#xff0c;使得配置防火墙变得更加简单&#xff0c;特别适…