亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++游戲教程基本技巧之隨機化詳解

 更新時間:2022年11月07日 10:40:04   作者:JYqwq  
在小游戲的制作中時常常會要用到隨機數(shù),這篇文章就來和大家談談C++中這個所謂的“隨機”。文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下

0. 引言

小游戲中時常要用到隨機數(shù),今天就來談談這個所謂的“隨機”。

1. 隨機數(shù) rand()

我們要使用隨機數(shù)(嚴格意義上是偽隨機)的話,C++ 中就有 rand() 來提供了這一操作。

rand()返回值是整數(shù)。在不同系統(tǒng)的編譯器下,返回值的范圍不同,我們姑且認為足夠我們使用。

設我們要獲取數(shù)x,逐步推導:

當x∈[0,100] 時,可以寫成 rand()%101;

當 x∈[1,100] 時,可以轉(zhuǎn)化為x′+1(x′∈[0,99]),寫成 rand()%100+1;

當x∈[l,r] 時,可以轉(zhuǎn)化為x′+l(x′∈[0,r−l]),寫成 rand()%(r-l+1)+l。

可現(xiàn)實總是不盡如人意:

為什么每次隨機出來的序列都是一樣的呢?這里我們就要講到下面的東西了

2. 設置隨機種子 srand()

畢竟是偽隨機,所以每次生成的隨機序列需要有一個初始的隨機種子(無符號整數(shù)),srand() 提供了這一操作。

比如設置隨機種子為114514,可以寫成 srand(114514);

然而

這意味著種子要隨機。

3. 時間 time()

time() 返回從 1970.1.1 1970.1.1 1970.1.1 至今的秒數(shù),參數(shù)直接填 NULL 或 0 0 0(也就是空指針)即可。

設置為種子,也就是 srand(time(0));。

效果顯著:

4. 隨機排列 random_shuffle()

如果有一個數(shù)組 a a a,如何讓其進行隨機排列呢?

C++ 有函數(shù) random_shuffle()。

參數(shù)和用法與 sort() 類似,直接調(diào)用即可。

示例代碼:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	srand(time(0)); 
	int n,a[105];
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		cin>>a[i];
	}
	random_shuffle(a+1,a+n+1);
	for(int i=1;i<=n;i++)
	{
		cout<<a[i]<<' '; 
	}
 	return 0;
}

效果:

5. 隨機基本案例

5-1. 隨機 01 矩陣

給定邊長n,要求生成一個隨機 01 矩陣。

示例代碼:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	srand(time(0)); 
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<rand()%2;
		}
		cout<<endl;
	}
 	return 0;
}

效果:

5-2. 隨機區(qū)間

給定n,要求生成n個區(qū)間[l,r](l≤r),并且這些區(qū)間是[1,n]的子區(qū)間。

每次分別對于l,r隨機,然后調(diào)整l,r大小位置。

示例代碼:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	srand(time(0)); 
	int n;
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		int l=rand()%n+1,r=rand()%n+1;
		if(l>r) swap(l,r);//防止 l>r
		cout<<l<<' '<<r<<endl;
	}
 	return 0;
}

效果:

5-3. 隨機浮點數(shù)

給定n和k,要求生成n個[0,n] 的k位浮點數(shù)(不可以有后綴0)。

分成整數(shù)部分和小數(shù)部分考慮。

整數(shù)部分生成[0,n] 的整數(shù),小數(shù)部分生成k位 [0,9] 的數(shù)(在位數(shù)允許時,可以生成一個[0,10k−1] 的整數(shù)代替小數(shù))。

當然,要特判整數(shù)為n的情況。若小數(shù)部分>0,就不在[0,n]內(nèi)了。

處理后綴0時,只要把其存進字符串處理即可。

示例代碼:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	srand(time(0)); 
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		int d=rand()%(n+1);
		cout<<d;
		if(d==n)
		{
			cout<<endl;
			continue;
		}
		string s=".";
		for(int j=1;j<=k;j++)
		{
			s+=(char)(rand()%10+48);
		}
		while(s[s.size()-1]=='0'&&s.size()>2) s.erase(s.size()-1);//防止后綴 0
		cout<<s<<endl;
	}
 	return 0;
}

效果:

5-4. 隨機整數(shù)

給定n,l,r(l,r∈Z,l≤r),要求生成n個整數(shù)x(x∈[l,r])。

可能含有負數(shù),該怎么辦呢?

分三類討論:

1.當l≤r≤0 時,先輸出 -,然后生成[∣r∣,∣l∣] 范圍的整數(shù)。

2.當l≤0≤r 時,先隨機t=0或1來確定符號。

  • 當t=0時,輸出 -,生成[0,∣l∣] 的整數(shù)。
  • 當t=1時,生成[0,r]的整數(shù)。

3.當0≤l≤r時,直接生成[l,r] 的整數(shù)。

注意以上操作中輸出 -0 的情況要處理一下。

示例代碼:

#include<bits/stdc++.h>
using namespace std;

int main()
{
	srand(time(0)); 
	int n,l,r;
	cin>>n>>l>>r;
	while(n--)
	{
		if(l<=r&&r<=0)
		{
			int d=rand()%(abs(l)-abs(r)+1)+abs(r);
			if(d) cout<<'-';//防止 -0
			cout<<d;
		}
		else if(l<=0&&0<=r)
		{
			int f=rand()%2;
			if(f) cout<<rand()%(r+1);
			else
			{
				int d=rand()%(abs(l)+1);
				if(d) cout<<'-';//防止 -0
				cout<<d;
			}
		}
		else cout<<rand()%(r-l+1)+l;
		puts(""); 
	}
 	return 0;
}

效果:

以上就是C++游戲教程基本技巧之隨機化詳解的詳細內(nèi)容,更多關于C++隨機的資料請關注腳本之家其它相關文章!

相關文章

  • C語言詳解Z字形變換排列的實現(xiàn)

    C語言詳解Z字形變換排列的實現(xiàn)

    Z字形變換排列就是指將一個給定字符串根據(jù)給定的行數(shù),以從上往下、從左到右進行 Z 字形排列,下面讓我們用C語言來實現(xiàn)
    2022-04-04
  • FFmpeg中AVIOContext的使用方法詳解

    FFmpeg中AVIOContext的使用方法詳解

    AVIOContext是FFMPEG管理輸入輸出數(shù)據(jù)的結(jié)構(gòu)體,這篇文章主要為大家詳細介紹了這個結(jié)構(gòu)體的具體使用,文中的示例代碼講解詳細,需要的可以參考一下
    2023-08-08
  • C++基礎知識之運算符重載詳解

    C++基礎知識之運算符重載詳解

    這篇文章主要為大家詳細介紹了C++基礎知識之運算符重載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C語言的字符串函數(shù),內(nèi)存函數(shù)筆記詳解

    C語言的字符串函數(shù),內(nèi)存函數(shù)筆記詳解

    這篇文章主要給大家介紹了關于C語言字符串/內(nèi)存的相關函數(shù),文中通過示例代碼總結(jié)的非常詳細,對大家學習或者使用C語言具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2021-09-09
  • C語言實現(xiàn)二叉樹遍歷的迭代算法

    C語言實現(xiàn)二叉樹遍歷的迭代算法

    這篇文章主要介紹了C語言實現(xiàn)二叉樹遍歷的迭代算法,包括二叉樹的中序遍歷、先序遍歷及后序遍歷等,是非常經(jīng)典的算法,需要的朋友可以參考下
    2014-09-09
  • C語言實現(xiàn)單鏈表的快速排序算法

    C語言實現(xiàn)單鏈表的快速排序算法

    大家好,本篇文章主要講的是C語言實現(xiàn)單鏈表的快速排序算法,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下
    2022-01-01
  • C語言中常用的幾個頭文件及庫函數(shù)

    C語言中常用的幾個頭文件及庫函數(shù)

    這篇文章主要介紹了C語言中常用的幾個頭文件及庫函數(shù)的相關資料,需要的朋友可以參考下
    2017-09-09
  • Cocos2d-x UI開發(fā)之菜單類使用實例

    Cocos2d-x UI開發(fā)之菜單類使用實例

    這篇文章主要介紹了Cocos2d-x UI開發(fā)之菜單類使用實例,本文的代碼中含有詳細注釋,需要的朋友可以參考下
    2014-09-09
  • C++ const的各種用法詳解

    C++ const的各種用法詳解

    const名叫常量限定符,用來限定特定變量,以通知編譯器該變量是不可修改的。習慣性的使用const,可以避免在函數(shù)中對某些不應修改的變量造成可能的改動。本文主要談談const的用法,感興趣的同學可以參考閱讀
    2023-04-04
  • 詳解state狀態(tài)模式及在C++設計模式編程中的使用實例

    詳解state狀態(tài)模式及在C++設計模式編程中的使用實例

    這篇文章主要介紹了state狀態(tài)模式及在C++設計模式編程中的使用實例,在設計模式中策略用來處理算法變化,而狀態(tài)則是透明地處理狀態(tài)變化,需要的朋友可以參考下
    2016-03-03

最新評論