【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备

在这里插入图片描述


iecne


🧛‍♂️iecne个人主页:iecne的学习日志
💡每天关注iecne的作品,一起进步
💪学C++必看iecne
本文专栏【C++游戏引擎】.
🐳希望大家多多支持🥰一起进步呀!
iecne


✨前言

哈喽大家好,我是iecne,本期为大家带来的是CPP/C++【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备包教包会,快来看看吧!
引擎支持 Visual Studio 2013 及以上版本,如果你使用的是较低版本的 VS,那么你需要考虑一下更新你的编译器了

任务描述

如何根据据Button制作鼠标控制按钮类
本实践旨在通过多个代码的案列,让大家理解和掌握如何使用【C++游戏引擎Easy2D】Random随机数,不同于Rand,做游戏必备
随机数



Easy2D导读

对于编程而言,初学者最需要的不是技能,而是成就感。
如果你喜欢用 C/C++ 编写自己的小游戏,那么 Easy2D 将是个不错的选择,它大大简化了游戏制作过程,可以帮助你快速开发 Windows 上的 2D 小游戏。
它的特点和它的名字一样,Everything is Easy!


安装 Easy2D

使用简易安装器
运行里面的 install.bat 文件进行安装。
点击此链接进行下载(纯免费,给官方搞成了VIP)
点击下载
安装程序会检测您已经安装的 Visual Studio 版本,并根据您的选择将对应库文件解压至 VS 库目录下。
Easy2D 不支持 VS2012 及以下的版本(包括 VC6.0),如果你使用的是低版本的 VS,那你需要尝试一下新版的 Visual Studio 了。

安装环境:
操作系统:Windows 7 及以上操作系统。
编译环境:Visual Studio 2013 (x86 & x64) 及以上版本。


一.随机数的使用

1.随机数的应用

对于我们初学者来说,在做游戏的时候,经常会遇到概率问题,例如一个东西有30%的概率
那我们在怎么写呢?
很多人就纳闷了,因此我们可以使用随机数


2.温故rand函数

①rand的使用

(1)rand()不需要参数,它会返回一个从0到最大随机数的任意整数,最大随机数的大小通常是固定的一个大整数
(2)如果你要产生0~99这100个整数中的一个随机整数,可以表达为:int num = rand() % 100;

这样,num的值就是一个0~99中的一个随机数了


②随机数的生成

(1)0~100的生成
如果要产生0~100,则是这样:

int num = rand() % 100;

实际如下:

int main()
{   
    int rand_test;
    rand_test = rand()%100;
    cout << rand_test << endl;
    return 0;
}

(2)1~100的生成
由于我们经常会以1为开头,所以普通的rand还是无法绝对做到我们的目的
如果要产生1~100,则是这样:

int num = rand() % 100 +1;

(3)a~b的生成
一般情况下,rand() % (b-a+1)+ a 就表示 a~b 之间的一个随机整数

int main()
{
    int a, b;
    cin >> a >> b;
    int rand_test;
    rand_test = rand() % (b - a + 1) + a;
    cout << rand_test << endl;
    return 0;
}

③处理相同问题

我们看下以下代码:

#include<iostream>
using namespace std;
int main()
{
    int a, b;
    a = 10;
    b = 100;
    int rand_test;
    for (int i = 1; i <= 10; i++)
    {
        rand_test = rand() % (b - a + 1) + a;
        cout << rand_test << endl;
    }
    return 0;
}

指的是10~100中取10个不同的随机数

结果如下:
在这里插入图片描述

效果非常棒,但是我们再次执行一次

在这里插入图片描述

结果相同 ,所以rand()函数生成的随机数每次都一样
其实,函数rand是一个伪随机数,从固定的初始种子计算得出。所以每次运行获取到的随机数序列是相同的。要解决这一问题,需要设置一个随机数种子,一般用当前时间作为种子

所以我们还需要用到srand

srand((unsigned)time(NULL));

在随机数的前面加上此函数,调用时间作为种子,就可以实现真正的随机数

但是,切记:千万不要把此代码放入循环中,否则没用

rand()和srand()要一起使用,其中srand()用来初始化随机数种子,rand()用来产生随机数

因为默认情况下随机数种子为1,而相同的随机数种子产生的随机数是一样的,失去了随机性的意义,所以为使每次得到的随机数不一样,用函数srand()初始化随机数种子。srand()的参数,用time函数值(即当前时间),因为两次调用rand()函数的时间通常是不同的,这样就可以保证随机性了

完整代码:

#include<iostream>
using namespace std;
int main()
{
    int a, b;
    a = 10;
    b = 100;
    int rand_test;
    srand((unsigned)time(NULL));
    for (int i = 1; i <= 10; i++)
    {
        rand_test = rand() % (b - a + 1) + a;
        cout << rand_test << endl;
    }
    return 0;
}

3.random函数

Random 类用于获取随机数,Random::range函数可以获取任意数值类型在任意范围内的随机数,如下所示

// 获得一个 [1, 3] 范围内的整形随机数
int num1 = Random::range(1, 3);
// 获得一个 [1, 3] 范围内的浮点型随机数
float num2 = Random::range(1.0f, 3.0f);

这样子是不是方便多了
但是切记:这个是Easy2D游戏引擎里的内容,千万不能不能加命名空间和头文件就盲目使用


二.random随机数实例

例如我们来写一个随机数10个

首先头文件和命名空间

#include <iostream>
#include <easy2d/easy2d.h>

using namespace std;
using namespace easy2d;

接下来我们定义一个变量rand
循环设定随机数

int main()
{
	int rand;
	for (int i = 1; i <= 10; i++)
	{
		rand = Random::range(1, 100);
		cout << rand << endl;
	}
	return 0;
}

综合起来:

#include <iostream>
#include <easy2d/easy2d.h>

using namespace std;
using namespace easy2d;

int main()
{
	int rand;
	for (int i = 1; i <= 10; i++)
	{
		rand = Random::range(1, 100);
		cout << rand << endl;
	}
	return 0;
}

iecne
第一次如上

在这里插入图片描述
第二次如上

效果不同,说明random不需要strand定义!!!


你学会了吗?


关于命名

Easy2D 按照以下规律命名函数:

小驼峰式命名法则,第一个单词小写,后面的单词首字母大写,如Window::setTitle
所有函数均按照动词+名语形式命名,如Logger::showConsole
获取对象的属性值:get+属性名,如Node::getWidth
修改对象的属性值:set+属性名,如Node::setPos
获取对象的状态(bool值):is+状态名,如Node::isVisiable


总结

本节课主要是讲解了Easy2D引擎实现的教程,至此该课示例的思想博主已经真真切切彻彻底底分享完了,相信大家对这个逻辑有了一定的理解,大家可以自己动手敲敲代码,感受一下,包教包会。若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

帅的人已然点赞收藏关注,而丑的人还在犹豫,被犹豫了,快三连吧!
原创不易,还希望各位大佬支持一下
点赞,你的认可是我创作的动力!
收藏,你的青睐是我努力的方向!
评论,你的意见是我进步的财富!
iecne


感谢每一个观看本篇文章的朋友,更多精彩敬请期待~( ̄▽ ̄~)~:
iecne的博客
若有任何侵权和不妥之处,请私信于我,定积极配合处理,看到必回!!!

iecne

  • 98
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 119
    评论
评论 119
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值