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

news2024/10/4 8:18:55

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

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.coloradmin.cn/o/2187686.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

以企业的视角进行大学生招聘

课程来源&#xff1a;中国计算机学会---朱颖韶&#xff08;资深人力资源领域--HR&#xff09; 一、招聘流程 1.简历->门槛 注重&#xff1a;专业学历、行业经验 2.笔试面试->专业知识与技能 3.简历面试-> 过往的成果 4.面试 沟通能力、学习力-----了解动机、价值观…

Pikachu-Sql Inject-insert/update/delete注入

insert 注入 插入语句 insert into tables values(value1,value2,value3); 如&#xff1a;插入用户表 insert into users (id,name,password) values (id,username,password); 当点击注册 先判断是否有SQL注入漏洞&#xff0c;经过判断之后发现存在SQL漏洞。构造insert的pa…

8644 堆排序

### 思路 堆排序是一种基于堆数据结构的排序算法。堆是一种完全二叉树&#xff0c;分为最大堆和最小堆。堆排序的基本思想是将待排序数组构造成一个最大堆&#xff0c;然后依次将堆顶元素与末尾元素交换&#xff0c;并调整堆结构&#xff0c;直到排序完成。 ### 伪代码 1. 读取…

自闭症干预寄宿学校:专业治疗帮助孩子发展

自闭症干预寄宿学校&#xff1a;星贝育园的专业治疗助力孩子全面发展 在自闭症儿童的教育与康复领域&#xff0c;寄宿学校以其独特的教育模式和全面的关怀体系&#xff0c;为众多家庭提供了重要的选择。广州星贝育园自闭症儿童寄宿制学校&#xff0c;作为这一领域的佼佼者&…

达梦core文件分析(学习笔记)

目录 1、core 文件生成 1.1 前置条件说明 1.2 关于 core 文件生成路径的说明 1.3查看 core 文件的前置条件 2、查看 core 文件堆栈信息 2.1 使用gdb 2.2 使用达梦dmrdc 3、core 分析过程 3.1 服务端主动 core 3.2因未知异常原因导致的 core 4、测试案例 4.1测试环境…

(十八)、登陆 k8s 的 kubernetes-dashboard 更多可视化工具

文章目录 1、回顾 k8s 的安装2、确认 k8s 运行状态3、通过 token 登陆3.1、使用现有的用户登陆3.2、新加用户登陆 4、k8s 可视化工具 1、回顾 k8s 的安装 Mac 安装k8s 2、确认 k8s 运行状态 kubectl proxy kubectl cluster-info kubectl get pods -n kubernetes-dashboard3、…

网页前端开发之Javascript入门篇(4/9):循环控制

Javascript循环控制 什么是循环控制&#xff1f; 答&#xff1a;其概念跟 Python教程 介绍的一样&#xff0c;只是语法上有所变化。 参考流程图如下&#xff1a; 其对应语法&#xff1a; var i 0; // 设置起始值 var minutes 15; // 设置结束值&#xff08;15分钟…

Stream流的终结方法(一)

1.Stream流的终结方法 2.forEach 对于forEach方法&#xff0c;用来遍历stream流中的所有数据 package com.njau.d10_my_stream;import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.function.Consumer; import java.util…

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo

安全帽头盔检测数据集 3类 12000张 安全帽数据集 voc yolo 安全帽头盔检测数据集介绍 数据集名称 安全帽头盔检测数据集 (Safety Helmet and Person Detection Dataset) 数据集概述 该数据集专为训练和评估基于YOLO系列目标检测模型&#xff08;包括YOLOv5、YOLOv6、YOLOv7…

SpringCloud入门(十一)路由过滤器和路由断言工厂

一、路由过滤器 路由过滤器&#xff08; GatewayFilter &#xff09;是网关中提供的一种过滤器&#xff0c;可以对进入网关的请求和微服务返回的响应做处理&#xff1a; 如图&#xff1a;网关路由过滤器&#xff1a; 路由过滤器的作用是&#xff1a; 1.对路由的请求或响应做加…

第二十章(自定义类型,联合和枚举)

1. 联合体类型的声明 2. 联合体的特点 3. 联合体⼤⼩的计算 4. 枚举类型的声明 5. 枚举类型的优点 6. 枚举类型的使⽤ 光阴如骏马加鞭一、联合体 概念&#xff1a;像结构体一样&#xff0c;联合体也是由一个或者多个成员组成的&#xff0c;这些成员也可以是不同的类型。 …

JavaSE篇:文件IO

一 认识文件 在硬盘这种持久化存储的I/O设备或其他存储介质中 &#xff0c;当我们想要进行数据保存时&#xff0c;往往不是保存成⼀个整体&#xff0c;⽽是独⽴成⼀个个的单位进⾏保存&#xff0c;这个独⽴的单位就被抽象成⽂件的概念。就类似办公桌上的⼀份份真实的⽂件⼀般。…

疾风气象大模型如何预测气象数据,预测数据怎么获得

随着科技的快速发展&#xff0c;人工智能和大数据技术逐渐渗透到各个领域&#xff0c;气象预测也不例外。过去&#xff0c;气象预测主要依赖于物理模型&#xff0c;结合大气、海洋、陆地等系统的观测数据&#xff0c;通过复杂的数值计算来推测未来天气。而如今&#xff0c;大模…

八、跳跃、闪避

一、人物跳跃功能 1、动画 设置一个bool值 条件设置为true 2、逻辑 实现跳跃&#xff0c;一定有IsGround&#xff1b;判断是否为地面&#xff0c;进行跳跃功能 写一个跳跃和一个条约结束方法 跳跃设置为false&#xff0c;结束设置为true 3、代码 public void Jump() {if…

Ray_Tracing_In_One_Weekend下

1Lambertian漫反射材质 一个物体的材质&#xff0c;可以分成两部分来看&#xff0c;因为物体没有绝对光滑和绝对粗糙 漫反射&#xff1a;由于物体粗糙&#xff0c;那么对于微小平面&#xff0c;光线会向四周反射&#xff0c;光源的一部分光线传回人眼 镜面反射&#xff1a;假…

C++ 类和对象的初步介绍

文章目录 1.面向过程和面向对象的初步认识2.类的引入3.类的定义4. 类的访问限定符及封装4.1 访问限定符4.2 封装 5.类的作用域6.类的实例化 1.面向过程和面向对象的初步认识 C语言是面向过程的&#xff0c;关注的过程&#xff0c;分析出求解问题的步骤&#xff0c;通过函数调用…

OpenCV Canny()函数

OpenCV Canny()函数被用来检测图像物体的边缘。其算法原理如下&#xff1a; 高斯滤波&#xff1a;使用高斯滤波器平滑图像以减少噪声。高斯滤波器是一种线性滤波器&#xff0c;可以消除图像中的高频噪声&#xff0c;同时保留边缘信息。计算梯度强度和方向&#xff1a;使用Sobe…

教资备考--高中数学(仅为高中数学梳理)

按照高中学习数学梳理的方案进行整理

爬虫——同步与异步加载

一、同步加载 同步模式--阻塞模式&#xff08;就是会阻止你浏览器的一个后续加载&#xff09;停止了后续的解析 因此停止了后续的文件加载&#xff08;图像&#xff09; 比如hifini音乐网站 二、异步加载 异步加载--xhr(重点) 比如腾讯新闻&#xff0c;腾讯招聘等 三、同…

组合框QGroupBox设置checked属性

我们可以给组合框设置checked属性 //获取和设置checked属性是否开启 bool isCheckable() const void setCheckable(bool checkable)//获取和设置选中还是非选中 bool isChecked() const void setChecked(bool checked)效果如下&#xff1a; 如果checked属性使能之后&#xff0…