各位高手在召喚師峽谷馳騁的時候總遇到眼緣怎么辦?
沒關系!
手把手教你做猜數字小游戲!
擺脫眼緣困擾,找回玩小游戲時的快樂心情!

猜數字,我們得首先有一個隨機的數字,那我們如何生成呢?
int main()
{
int a=rand();
printf("%d", a);
return 0;
}
看起來很簡單是不是?但細心的老鐵們就會發現問題了!

雖然我這里顯示的是41,也許你的和我的有所不同,但是,你會發現,無論你運行多少次代碼,程式得到的結果,和之前都是一樣的!Amazing!我用了一個假的rand()?
The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.
rand 函式回傳 0 到 RAND_MAX 范圍內的偽隨機整數, 在呼叫 rand 之前使用 srand 函式播種偽亂數生成器 ,
哦!原來如此,根據msdn的解釋,rand生成的是一個"偽隨機整數"!
其實啊,大家仔細想想,在計算機的世界里面,其實并沒有真正的隨機!一切函式的運行都是基于演算法,所以rand并非我們理解中的隨機!
那么,程式中怎樣能實作較為合理的亂數呢?
我們實作這個游戲當然需要很多亂數呀!
那我們需要用到一個神奇的函式-srand
它的原型為
void srand(usigned int seed)
srand通常和rand配合使用,產生偽亂數序列


Look!根據srand內整形的變化,同時也會導致rand()的變化,那么依據這個原理,我們就可以創造出一個,“亂數生成器”
難點在于!我們如何讓srand其中的整形不斷地變化呢?
大師李小龍曾經說過:“Be water!My friend!”
水?流動?什么可以像水一樣流動,生生不息?
時間!
我們需要時間的力量!
我們需要用的time函式,從而幫助srand函式be water!
The time function returns the number of seconds elapsed since midnight (00:00:00), January 1, 1970, coordinated universal time, according to the system clock. The return value is stored in the location given by timer. This parameter may be NULL, in which case the return value is not stored
time 函式根據系統時鐘回傳自 1970 年 1 月 1 日午夜 (00:00:00) 以來經過的秒數,協調世界時, 回傳值存盤在定時器給定的位置, 此引數可能為 NULL,在這種情況下不存盤回傳值,
大家看!時間是不斷流動的!time函式可以回傳一個從70年以來的整形,而且,這個整形是一直在變的!那么,我們的“亂數生產器”就要大功告成了!
我們從msdn的概念中得知,time(NULL)不會存盤回傳值,但我們可以直接拿過來用,直接讓其回傳給srand!
srand((unsigned)time(NULL));
int main()
{
srand((unsigned)time(NULL));
int a=rand();
printf("%d", a);
return 0;
}
這樣一來,我們每次程式運行,產生的數,都不一樣!
亂數問題處理了!不要著急,我們馬上來做游戲本體!
#include<stdio.h>
#include<stdlib.h>//呼叫srand的頭檔案
#include<time.h>//呼叫time函式的頭檔案
int main()
{
srand((unsigned)time(NULL));//在主函式使用一次即可,用來作為一個播種器,來幫助產生亂數
int p = 1;//先定義一個變數,用來控制進入離開回圈
while (p)//當輸入0,跳出回圈,退出游戲
{
interface();//登陸界面的函式
scanf("%d", &p);//輸入是否進入游戲,1進入,0退出
switch (p)//根據輸入的p,來進入不同的入口
{
case 1:
game();//游戲函式
break;
case 0:
break;//直接退出客戶端
default:
printf("笨蛋,輸錯了,重新輸入!\n");//提高容錯率,避免按錯
break;
}
}
return 0;
}
主函式大致框架做好了,我們再來搞一個精致的登陸頁面!
void interface()
{
printf("?🌂🌂🌂🌂🌂🌂🌂?\n");
printf("********************\n");
printf("********************\n");
printf("1進入游戲,0退出游戲\n");
printf("********************\n");
printf("********************\n");
}
嘿嘿,是不是很不錯?
簡潔,大方,樸素!保護取用戶隱私!
接下來!就是重中之重!游戲的函式本體!
void game()
{
int t = rand()%100+1;//產生函式,而且為了游戲體驗,把數字控制在1-100
int q = 0;//定義要輸入的數
printf("請猜一個數!\n");
while (1)//無阻礙的進入回圈,可以多次游戲
{
scanf("%d", &q);
if (q > t) {
printf("好漢!太大了!\n");
}
else if (q < t) {
printf("好漢!太小了!\n");
}
else {
printf("哥!太對了!\n");
break;//猜對以后,幫助跳出回圈,回到主頁面
}
}
}
這樣的話,簡單的猜數字小游戲就完成了!
希望大家玩的開心~~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413639.html
標籤:其他
