猜數字遊戲(僞随機數對猜數字遊戲的影響) - 新聞資(zī)訊 - 雲南小程序開發|雲南軟件開發|雲南網站(zhàn)建設-西山區知普網絡科技工作室

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不管是網站(zhàn),軟件還是小程序,都要直接或間接能為您産生價值,我們在追求其視覺表現的同時,更側重于功能的便捷,營銷的便利,運營的高效,讓網站(zhàn)成為營銷工具,讓軟件能切實提升企業(yè)内部管理水平和(hé)效率。優秀的程序為後期升級提供便捷的支持!

您當前位置>首頁 » 新聞資(zī)訊 » 技術(shù)分享 >

猜數字遊戲(僞随機數對猜數字遊戲的影響)

發表時間:2020-10-19

發布人:葵宇科技

浏覽次數:42

猜數字遊戲的實現 

由體系随機産生一個(gè)100内的數字,請求用戶猜測這個(gè)整數。輸入一個(gè)猜猜想的┞符數,斷定是否與産生的随機數相等,由屏幕顯示斷定結不雅。如(rú)不雅猜得纰謬,給出“大年夜了”或“小了”的提示,直到猜出這個(gè)數為止。

猜數字遊戲的邏輯:

1.法度榜樣主動(dòng)生成一個(gè)随機的1-100的┞符數。
2.用戶來輸入一個(gè)整數。
3.體系會根據輸情面況來提示用戶,是猜高了,照樣低了,照樣猜對了。


起首,我們須要一個(gè)菜單來實現和(hé)用戶的交互:

我們經由過程menu()這個(gè)函數來實現和(hé)用戶的交互,函數的返回值為choice的值,輸入1表示開端遊戲,輸入0表示退出遊戲。

int menu() {
	printf("=============================\n");
	printf(" 1. 開端遊戲\n");
	printf(" 0. 退出遊戲\n");
	printf("=============================\n");
	printf(" 請輸入您的選擇: ");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}


其次我們須要來完成這個(gè)遊戲函數:

猜數字的邏輯:

1. 法度榜樣主動(dòng)生成一個(gè) 1-100 的随機整數。

2. 大年夜控制台攫取用戶的輸入。

3. 比較用戶輸入的數字和(hé)體系生成的數字之間的關(guān)系,并給用戶提示。

void game() {
	// 1. 法度榜樣主動(dòng)生成一個(gè) 1-100 的随機整數. 
	int toGuess = rand() % 100 + 1;
	while (1) {
		// 2. 大年夜控制台攫取用戶的輸入. 
		printf("請輸入要猜的數字: ");
		int input = 0;
		scanf("%d", &input);
		// 3. 比較用戶輸入的數字和(hé)體系生成的數字之間的關(guān)系, 并給用戶提示. 
		if (input < toGuess) {
			printf("低了!\n");
		} else if (input > toGuess) {
			printf("高了!\n");
		} else {
			printf("猜對了!\n");
			break;
		}
	}
}

下(xià)面我們在主函數中(zhōng)調用他們,實現猜數字遊戲:

int main() {

	while (1) {
		// 調用菜單函數, 和(hé)用戶進行交互
		int choice = menu();
		if (choice == 1) {
			game();
		} else if (choice == 0) {
			printf("法度榜樣退出, 再會!\n");
			break;
		} else {
			// 寫法度榜樣得推敲到用戶的不法輸入的情況.
			printf("您的輸入有誤, 請從新輸入!\n");
		}
	}

	system("pause");
	return 0;
}

到此這個(gè)猜數字遊戲已經根本實現,下(xià)面我們來測試一下(xià):

我們可(kě)以看到三次進行遊戲獲得的結不雅是:第一次42,第二次68,第三次35。


退出法度榜樣,我們再來玩一次猜數字:

我們可(kě)以看出:獲得的

第一個(gè)元素始終是42,第二個(gè)元素始終是68,第三個(gè)元素始終是35……

由此我們可(kě)以知道當前的猜數字遊戲照樣存在問(wèn)題的,這個(gè)問(wèn)題是什麼呢(ne)?

經由多次反複運行法度榜樣後,獲得的随機數序列是固定序列。

為什麼會出現這個(gè)問(wèn)題呢(ne)?

經由過程查閱一些材料懂得到:

計算機弗成能産生真正的随機數。在這裡,我們應用的随機數是将随機數種子(zǐ)(srand函數介紹的參數)作為初始前提,經由必定的計算産生的。

這麼說可(kě)能會有一點難以懂得,我們來舉個(gè)遊戲中(zhōng)的例子(zǐ):

比如(rú)LOL就有一套自力的僞随機機制,以25%暴擊舉例,如(rú)不雅蠻王第一刀沒暴擊,第二刀也沒暴擊,第三刀照樣沒暴擊,那麼第四刀暴擊的幾率就會大年夜大年夜的晉升(不是25%),信賴很多玩遊戲的同窗都邑有這種領會,這裡的暴擊就是一個(gè)僞随機數。

那麼怎麼解決這個(gè)問(wèn)題讓僞随機變成真随機呢(ne)?

膳绫擎我們知道了:随機數是将随機數種子(zǐ)(srand函數介紹的參數)作為初始前提,經由必定的計算産生的。

随機數種子(zǐ)雷同,獲得的随機數序列就是雷同的。

随機數種子(zǐ)不合,獲得的随機數序列就是不合的。

所以,我們隻須要設置不合的随機數種子(zǐ)就能解決這個(gè)問(wèn)題,在這裡我們應用時光(計算機頂用整數表示時光)作為随機數種子(zǐ).


應用srand(time(0))調劑随機數種子(zǐ)。讓我們運行兩次,來看下(xià)代碼的運行結不雅:

第一次

結不雅是27,66。


第二次

結不雅是44,85。

可(kě)以看出調劑随機數種子(zǐ)後,随機數序列就不合了,猜數字遊戲也就實現了。


完全的代碼:

VS2013

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int menu() {
	printf("=============================\n");
	printf(" 1. 開端遊戲\n");
	printf(" 0. 退出遊戲\n");
	printf("=============================\n");
	printf(" 請輸入您的選擇: ");
	int choice = 0;
	scanf("%d", &choice);
	return choice;
}
void game() {
	int toGuess = rand() % 100 + 1;
	while (1) {
		printf("請輸入要猜的數字: ");
		int input = 0;
		scanf("%d", &input);
		if (input < toGuess) {
			printf("低了!\n");
		}
		else if (input > toGuess) {
			printf("高了!\n");
		}
		else {
			printf("猜對了!\n");
			break;
		}
	}
}
int main() {
	srand(time(0)); 
	while (1) {
		int choice = menu();
		if (choice == 1) {
			game();
		}
		else if (choice == 0) {
			printf("法度榜樣退出, 再會!\n");
			break;
		}
		else {
			printf("您的輸入有誤, 請從新輸入!\n");
		}
	}
	system("pause");
	return 0;
}

相關(guān)案例查看更多