玩家需要在1-100之間猜一個(gè)數(shù),每猜一次程序就會(huì)提示一次是猜大了或猜小了,直至猜中為止
(1)簡單主界面
玩家需通過輸入1或0來選擇是否進(jìn)行游戲,通過簡單的輸出函數(shù)printf即可實(shí)現(xiàn)主界面的打印
代碼如下:
void menu()
{
printf("************\n");
printf("* 1.Play *\n");
printf("* 0.Exit *\n");
printf("************\n");
printf("intput to choose:\n");
}
(2)游戲?qū)崿F(xiàn)
游戲的實(shí)現(xiàn)可分為兩部分,隨機(jī)數(shù)的生成與猜數(shù)環(huán)節(jié)
隨機(jī)數(shù)的生成:
這里需要借助三個(gè)函數(shù)來實(shí)現(xiàn),分別是:
rand()——生成的隨機(jī)數(shù),頭文件為
srand()——隨機(jī)數(shù)的生成器,需和rand()函數(shù)配套使用,頭文件為
time()——時(shí)間戳函數(shù),需要一個(gè)不斷變化的數(shù)來作為生成隨機(jī)數(shù)的來源,頭文件為
代碼如下:
srand((unsigned int)time(NULL));
int random_num = rand() % 100 + 1;
其中函數(shù)用法簡單解釋:
對srand():
由其定義可看出其返回值為空,其參數(shù)為unsigne int型(seed可以理解為隨機(jī)數(shù)的來源),故在調(diào)用該函數(shù)時(shí)需要給它傳一個(gè)unsigne int型的值
對time():
首先,其中的返回與參數(shù)類型time_t通過編譯器(VS2022)的轉(zhuǎn)到定義查看可知其本質(zhì)上是int型:
故當(dāng)我們將其作為srand函數(shù)的參數(shù)時(shí)需對其進(jìn)行強(qiáng)制類型轉(zhuǎn)化為unsigned int型
其次,time函數(shù)的參數(shù)為指針變量,但其實(shí)我們不需要傳具體的參數(shù),故直接傳一個(gè)空指針NULL
對rand():
可以看出,我們需先在rand()之前使用srand()來生成隨機(jī)數(shù),隨機(jī)數(shù)生成完畢后rand()返回的就是生成的隨機(jī)數(shù),故可直接用它進(jìn)行賦值,整合起來也就有了上面那兩行代碼
(PS:以上關(guān)于函數(shù)的聲明、定義及使用方法等均來自MSDN)
猜數(shù)環(huán)節(jié):
循環(huán)輸入猜的數(shù),和隨機(jī)數(shù)進(jìn)行對比,直至猜中跳出循環(huán)
代碼如下:
int guess_num = 0;
while (1)
{
scanf("%d", &guess_num);
if (guess_num< random_num)
printf("Bigger\n");
else if (guess_num >random_num)
printf("Smaller\n");
else if (guess_num == random_num)
{
printf("Bingo!\n");
break;
}
}
整合起來放到一個(gè)game()函數(shù)中:
代碼如下:
void game()
{
srand((unsigned int)time(NULL));
int random_num = rand() % 100 + 1;
//隨機(jī)生成1-100之間的數(shù)
printf("Start Guessing!\n");
int guess_num = 0;
while (1)
{
scanf("%d", &guess_num);
if (guess_num< random_num)
printf("Bigger\n");
else if (guess_num >random_num)
printf("Smaller\n");
else if (guess_num == random_num)
{
printf("Bingo!\n");
break;
}
}
}
(3)邏輯連接
在前兩步的基礎(chǔ)上進(jìn)行主函數(shù)的編寫:我們需要先打印一次菜單,隨后進(jìn)行選擇是否進(jìn)行游戲,故選擇采用do while的循環(huán)語句。在循環(huán)中,若輸入1則執(zhí)行(2)中實(shí)現(xiàn)的game()函數(shù);若輸入0則退出循環(huán),結(jié)束游戲(程序);若輸入了其他數(shù),則提示輸入非法并重新輸入
代碼如下:
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
case 0:
break;
default:
printf("Input error! Please input again\n");
}
} while (input);
完整的代碼如下:
#include#include#include//功能描述:
//1. 輸入1和0選擇是否進(jìn)行游戲
//2. 生成隨機(jī)數(shù)
//3. 每次猜數(shù)后給予相應(yīng)反饋——猜大、猜小、猜中
//打印菜單
void menu()
{
printf("************\n");
printf("* 1.Play *\n");
printf("* 0.Exit *\n");
printf("************\n");
printf("intput to choose:\n");
}
//游戲?qū)崿F(xiàn)
void game()
{
srand((unsigned int)time(NULL));
int random_num = rand() % 100 + 1;
//隨機(jī)生成1-100之間的數(shù)
printf("Start Guessing!\n");
int guess_num = 0;
while (1)
{
scanf("%d", &guess_num);
if (guess_num< random_num)
printf("Bigger\n");
else if (guess_num >random_num)
printf("Smaller\n");
else if (guess_num == random_num)
{
printf("Bingo!\n");
break;
}
}
}
int main()
{
int input = 0;
do
{
menu();
scanf("%d", &input);
switch (input)
{
case 1:
game();
case 0:
break;
default:
printf("Input error! Please input again\n");
}
} while (input);
return 0;
}
運(yùn)行結(jié)果:
在上述的基礎(chǔ)上還可以創(chuàng)建一個(gè)變量來限定猜的次數(shù),若在指定的次數(shù)內(nèi)沒猜對則可執(zhí)行一些“懲罰”,比如關(guān)機(jī)什么的😂,大家還有什么好玩的建議可以留個(gè)評論呀~😁
看完覺得有覺得幫助的話不妨點(diǎn)贊收藏鼓勵(lì)一下,有疑問或看不懂的地方或有可優(yōu)化的部分還懇請朋友們留個(gè)評論,多多指點(diǎn),謝謝朋友們!🌹🌹🌹
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享名稱:【C語言】-猜數(shù)游戲-簡單版-創(chuàng)新互聯(lián)
文章源于:http://www.rwnh.cn/article32/dosesc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、微信小程序、品牌網(wǎng)站建設(shè)、做網(wǎng)站、服務(wù)器托管、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容