要用C語言實作一個猜數字游戲,那么首先需要了解我們的游戲的要求~
【游戲要求】
【猜數字游戲】:
由電腦隨機生成一個(1~100)的數字,然后由玩家來猜數字,
玩家猜小了,則告知猜小了;玩家猜大了,則告知猜大了,直到猜對為止,
游戲可以一直玩下去,
那么我們將用代碼一步步實作這些要求~
【代碼實作】
#include <stdio.h>
void menu()
{
}
int main()
{
do
{
menu();
} while ();
return 0;
}
這是一開始的基本的代碼架構,因為游戲可以一直玩下去,所以設定了do...while回圈來實作這一點,其中的menu是一個“選單”,幫助玩家選擇“開始游戲”或“退出游戲”,目前這些都只是基本架構,
- menu的內容可由程式設計者自行設計調整,這里選擇了簡潔的畫面,提示玩家通過1/0的輸入來實作游戲的開始和關閉,
- 用scanf獲取玩家輸入的數字之后要進行判斷,用switch...case陳述句,分成1、0、其他三種情況進行判斷,
- while內的條件判斷可以用input的值來決定,因為0代表退出游戲也就是結束回圈,
代碼實作如下:
#include <stdio.h>
void menu()
{
printf("****************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("****************\n");
}
int main()
{
int input = 0;
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
printf("猜數字\n");
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯誤,請重新選擇!\n");
break;
}
} while (input);
return 0;
}
此時的運行界面是這樣的:

輸入1會不斷回圈運行,輸入0則會退出,第一階段的目標就這樣達成了!
【補充:建議大家寫一段代碼之后就要測驗一下(比如現在我們的游戲代碼就可以測驗了),如果因為前面代碼的錯誤導致后面代碼需要推倒重來是非常可惜的!所以一定要記得一個階段一個階段的運行檢測代碼哦!】
當然,我們的游戲并不可能只是回圈列印“猜數字”這么簡單,接下來要用代碼將游戲豐滿起來!于是我們可以在case 1 這個需要開始游戲的情況下插入一個關于游戲的函式,一旦需要開始游戲則進入這個游戲函式開始游戲,那么接下來要做的就是實作我們的游戲函式,
實作這個函式首先需要電腦生成一個亂數給我們猜,
C語言中有一個叫做rand()的函式
它可以生成一個范圍為0~32767亂數,它不需要引數,可以回傳一個int型別的值,頭檔案是<stdlib.h>,
但是!發現rand生成的亂數每次重開游戲都是一樣的順序!這是不行的!這是偽亂數!
然后我們再次閱讀檔案,發現上面寫在運行rand前需要一個srand函式,

它需要一個引數,如srand(100),如果輸入的數相同則會生成相同的亂數,輸入的數不同則生成不同的亂數,那么問題又出現了,如果需要srand生成一個亂數,那么就需要給它輸入一個亂數,哈哈哈這個先有雞還是先有蛋的問題應該要怎么解決呢?
我們需要給srand傳進去一個一直在發生變化的數,那么什么東西一直在發生變化呢?時間!時間在不停流逝不停變化!如果把時間傳給它就能解決這一問題了!那么接下來,就需要介紹一個東西;
【時間戳】
時間戳是一個自增的整數,它表示從1970年1月1日零時整的GMT時區開始的那一刻,到現在的毫秒數,
C語言的time函式可以回傳時間戳,

可以將時間戳放在傳入的地址引數里,也可以直接用其回傳值回傳時間戳,此時引數可以數額職位空指標,它回傳的time_t型別本質上是一個整數,而srand需要的也是一個整數,那么就可以實作代碼了!代碼:srand((unsigned int)time(NULL));但要注意,srand只需要在整個一輪游戲中呼叫一次即可,(若頻繁呼叫,則可能會得到相同值)于是,我們將srand放在了主函式里,這樣就能實作亂數了,另外還要記得調整亂數范圍至1~100,我們采取%100+1的方法就行啦!
亂數生成要點如下:1、需要rand 2、需要srand 3、需要利用時間戳 4、srand只需要呼叫一次 5、調整亂數范圍
猜數字的實作
用while回圈來讓玩家一遍一遍地猜數字,用if...else陳述句來判斷猜的大了還是小了,猜對了則用break跳出回圈,
整體代碼如下:
#include <stdio.h>
#include <time.h>
void menu()
{
printf("****************\n");
printf("*****1.play*****\n");
printf("*****0.exit*****\n");
printf("****************\n");
}
//猜數字游戲的實作
//時間戳
void game()
{
int guess = 0;
//生成亂數
int ret = rand() % 100 + 1; //rand可以生成一個0~32767的亂數 調整其范圍
//猜數字
while (1)
{
printf("猜數字:>\n");
scanf("%d", &guess);
if (guess < ret)
{
printf("猜小了\n");
}
else if (guess > ret)
{
printf("猜大了\n");
}
else
{
printf("恭喜你,猜對啦!\n");
break;
}
}
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL)); //srand只需呼叫一次所以放在這
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("退出游戲\n");
break;
default:
printf("選擇錯誤,請重新選擇!\n");
break;
}
} while (input);
return 0;
}
至此,這個猜數字游戲的代碼就此結束了!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/413628.html
標籤:其他
