知識
不管是網(wǎng)站,軟件還是小程序,都要直接或間接能為您產(chǎn)生價值,我們在追求其視覺表現(xiàn)的同時,更側(cè)重于功能的便捷,營銷的便利,運營的高效,讓網(wǎng)站成為營銷工具,讓軟件能切實提升企業(yè)內(nèi)部管理水平和效率。優(yōu)秀的程序為后期升級提供便捷的支持!
猜數(shù)字游戲(偽隨機數(shù)對猜數(shù)字游戲的影響)
發(fā)表時間:2020-10-19
發(fā)布人:葵宇科技
瀏覽次數(shù):102
猜數(shù)字游戲的實現(xiàn)
由體系隨機產(chǎn)生一個100內(nèi)的數(shù)字,請求用戶猜測這個整數(shù)。輸入一個猜猜想的┞符數(shù),斷定是否與產(chǎn)生的隨機數(shù)相等,由屏幕顯示斷定結(jié)不雅。如不雅猜得紕謬,給出“大年夜了”或“小了”的提示,直到猜出這個數(shù)為止。
猜數(shù)字游戲的邏輯:
1.法度榜樣主動生成一個隨機的1-100的┞符數(shù)。
2.用戶來輸入一個整數(shù)。
3.體系會根據(jù)輸情面況來提示用戶,是猜高了,照樣低了,照樣猜對了。
起首,我們須要一個菜單來實現(xiàn)和用戶的交互:
我們經(jīng)由過程menu()這個函數(shù)來實現(xiàn)和用戶的交互,函數(shù)的返回值為choice的值,輸入1表示開端游戲,輸入0表示退出游戲。
int menu() {
printf("=============================\n");
printf(" 1. 開端游戲\n");
printf(" 0. 退出游戲\n");
printf("=============================\n");
printf(" 請輸入您的選擇: ");
int choice = 0;
scanf("%d", &choice);
return choice;
}
其次我們須要來完成這個游戲函數(shù):
猜數(shù)字的邏輯:
1. 法度榜樣主動生成一個 1-100 的隨機整數(shù)。
2. 大年夜控制臺攫取用戶的輸入。
3. 比較用戶輸入的數(shù)字和體系生成的數(shù)字之間的關(guān)系,并給用戶提示。
void game() {
// 1. 法度榜樣主動生成一個 1-100 的隨機整數(shù).
int toGuess = rand() % 100 + 1;
while (1) {
// 2. 大年夜控制臺攫取用戶的輸入.
printf("請輸入要猜的數(shù)字: ");
int input = 0;
scanf("%d", &input);
// 3. 比較用戶輸入的數(shù)字和體系生成的數(shù)字之間的關(guān)系, 并給用戶提示.
if (input < toGuess) {
printf("低了!\n");
} else if (input > toGuess) {
printf("高了!\n");
} else {
printf("猜對了!\n");
break;
}
}
}
下面我們在主函數(shù)中調(diào)用他們,實現(xiàn)猜數(shù)字游戲:
int main() {
while (1) {
// 調(diào)用菜單函數(shù), 和用戶進行交互
int choice = menu();
if (choice == 1) {
game();
} else if (choice == 0) {
printf("法度榜樣退出, 再會!\n");
break;
} else {
// 寫法度榜樣得推敲到用戶的不法輸入的情況.
printf("您的輸入有誤, 請從新輸入!\n");
}
}
system("pause");
return 0;
}
到此這個猜數(shù)字游戲已經(jīng)根本實現(xiàn),下面我們來測試一下:
我們可以看到三次進行游戲獲得的結(jié)不雅是:第一次42,第二次68,第三次35。
退出法度榜樣,我們再來玩一次猜數(shù)字:
我們可以看出:獲得的
第一個元素始終是42,第二個元素始終是68,第三個元素始終是35……
由此我們可以知道當(dāng)前的猜數(shù)字游戲照樣存在問題的,這個問題是什么呢?
經(jīng)由多次反復(fù)運行法度榜樣后,獲得的隨機數(shù)序列是固定序列。
為什么會出現(xiàn)這個問題呢?
經(jīng)由過程查閱一些材料懂得到:
計算機弗成能產(chǎn)生真正的隨機數(shù)。在這里,我們應(yīng)用的隨機數(shù)是將隨機數(shù)種子(srand函數(shù)介紹的參數(shù))作為初始前提,經(jīng)由必定的計算產(chǎn)生的。
這么說可能會有一點難以懂得,我們來舉個游戲中的例子:
比如LOL就有一套自力的偽隨機機制,以25%暴擊舉例,如不雅蠻王第一刀沒暴擊,第二刀也沒暴擊,第三刀照樣沒暴擊,那么第四刀暴擊的幾率就會大年夜大年夜的晉升(不是25%),信賴很多玩游戲的同窗都邑有這種領(lǐng)會,這里的暴擊就是一個偽隨機數(shù)。
那么怎么解決這個問題讓偽隨機變成真隨機呢?
膳綾擎我們知道了:隨機數(shù)是將隨機數(shù)種子(srand函數(shù)介紹的參數(shù))作為初始前提,經(jīng)由必定的計算產(chǎn)生的。
隨機數(shù)種子雷同,獲得的隨機數(shù)序列就是雷同的。
隨機數(shù)種子不合,獲得的隨機數(shù)序列就是不合的。
所以,我們只須要設(shè)置不合的隨機數(shù)種子就能解決這個問題,在這里我們應(yīng)用時光(計算機頂用整數(shù)表示時光)作為隨機數(shù)種子.
應(yīng)用srand(time(0))調(diào)劑隨機數(shù)種子。讓我們運行兩次,來看下代碼的運行結(jié)不雅:
第一次
結(jié)不雅是27,66。
第二次
結(jié)不雅是44,85。
可以看出調(diào)劑隨機數(shù)種子后,隨機數(shù)序列就不合了,猜數(shù)字游戲也就實現(xiàn)了。
完全的代碼:
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("請輸入要猜的數(shù)字: ");
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)案例查看更多
相關(guān)閱讀
- 軟件定制
- 制作一個小程序
- 云南軟件定制
- 云南小程序開發(fā)制作公司
- 做網(wǎng)站
- 前端開發(fā)
- 河南小程序制作
- 跳轉(zhuǎn)小程序
- 網(wǎng)站建設(shè)首頁
- 云南小程序開發(fā)制作
- 云南建設(shè)廳網(wǎng)站首頁
- 網(wǎng)站建設(shè)開發(fā)
- 江蘇小程序開發(fā)
- 網(wǎng)站建設(shè)高手
- 國內(nèi)知名網(wǎng)站建設(shè)公司排名
- 開通微信小程序被騙
- 云南省城鄉(xiāng)建設(shè)廳網(wǎng)站
- 云南小程序開發(fā)
- 支付寶小程序被騙
- 云南網(wǎng)站建設(shè)百度
- 楚雄小程序開發(fā)
- 百度排名
- 網(wǎng)站建設(shè)招商
- 云南網(wǎng)站建設(shè)制作
- 云南旅游網(wǎng)站建設(shè)
- 怎么做網(wǎng)站
- 云南小程序開發(fā)課程
- 公眾號模板消息
- 云南網(wǎng)站優(yōu)化公司
- 服務(wù)器