C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單猜數(shù)字游戲
前言
對(duì)于c語(yǔ)言初學(xué)者來(lái)說(shuō)用c語(yǔ)言實(shí)現(xiàn)猜數(shù)字游戲是基本的問(wèn)題,本篇文章會(huì)細(xì)致的講解如何用代碼來(lái)實(shí)現(xiàn)猜數(shù)字游戲。希望讀者在閱讀本篇博客前學(xué)習(xí)玩分支與循環(huán)和最基本的c語(yǔ)言語(yǔ)法知識(shí)。
提示:以下是本篇文章正文內(nèi)容,下面案例可供參考
一、預(yù)期實(shí)現(xiàn)猜數(shù)字游戲的功能
1:什么是猜數(shù)字游戲
猜數(shù)字游戲顧名思義是電腦隨機(jī)生成一個(gè)數(shù)字,讓玩家來(lái)猜。如果沒(méi)猜對(duì),電腦會(huì)提示玩家猜大了還是猜小了,玩家可以多次嘗試,直到玩家猜對(duì)了本次游戲就結(jié)束。
2:預(yù)期效果
在實(shí)現(xiàn)猜數(shù)字的基礎(chǔ)上,玩家如果覺(jué)得不過(guò)癮可以選擇再來(lái)一次,如果玩膩了,也可以選擇退出游戲
二、具體思路講解
1.總體思路
為了實(shí)現(xiàn)游戲的基本功能,我們應(yīng)該有一個(gè)游戲菜單,通過(guò)菜單玩家可以選擇是進(jìn)入游戲還是退出游戲,且為了可以使該游戲可以反復(fù)玩,這個(gè)過(guò)程應(yīng)該是一個(gè)循環(huán),選擇退出游戲時(shí)就打破這個(gè)循環(huán)。為了使代碼具有條理性我們定義唯一的主函數(shù),然后按功能寫(xiě)子函數(shù),讓每一個(gè)子函數(shù)都有其意義。綜上我們需要打印菜單模塊的一個(gè)子函數(shù)和游戲?qū)崿F(xiàn)(包括電腦生成隨機(jī)數(shù)和玩家可以循環(huán)多次猜數(shù)字的功能)的子函數(shù),不妨把是否選擇進(jìn)入游戲放在主函數(shù)里。
2.菜單功能的實(shí)現(xiàn)
因?yàn)槲覀儼堰x擇過(guò)程放在主函數(shù)里,所以菜單功能十分簡(jiǎn)單。代碼示例如下
void menu()
{
printf("*****歡迎來(lái)到猜數(shù)字游戲*****\n");
printf("********1:進(jìn)入游戲*********\n");
printf("********0:退出游戲*********\n");
printf("****************************\n");
}
3.主函數(shù)部分的實(shí)現(xiàn)
因?yàn)槌绦驈闹骱瘮?shù)開(kāi)始運(yùn)行,到主函數(shù)結(jié)束時(shí)結(jié)束,所以主函數(shù)應(yīng)該起到搭建整個(gè)游戲基本框架的功能。主函數(shù)不僅要實(shí)現(xiàn)是否選擇進(jìn)入游戲還應(yīng)該合理引用menu()和game()使整個(gè)程序形成有機(jī)的整體。
int main()
{
srand((unsigned)time(NULL));//定義一個(gè)隨機(jī)生成數(shù),注意不能把它放在循環(huán)語(yǔ)句中,否則會(huì)使生成的數(shù)字不夠隨機(jī)
int input = 0;
do
{
menu();
printf("請(qǐng)輸入你的選擇:");
scanf("%d",&input);
if (input == 1)
{
game();//選擇玩游戲則調(diào)用game()函數(shù)進(jìn)行游戲功能的實(shí)現(xiàn)
}
else if (input == 0)
{
printf("游戲已經(jīng)退出");
break;//因?yàn)閣hile判斷條件,所以此句非必須
}
else
{
printf("您輸入的是無(wú)效指令,請(qǐng)重新輸入\n");//因?yàn)橹挥?和0才有意義,但玩家可能輸入其它數(shù)字,此處應(yīng)給提示
}
} while (input != 0);
return 0;
}
4.游戲game()函數(shù)的代碼實(shí)現(xiàn)
在game()中我們要實(shí)現(xiàn)兩個(gè)功能1:電腦隨機(jī)生成一個(gè)1-100之間的隨機(jī)數(shù)。2:玩家進(jìn)行猜數(shù)字游戲,其中c語(yǔ)言實(shí)現(xiàn)生成隨機(jī)數(shù)的原理復(fù)雜,需先定義一個(gè)隨機(jī)數(shù)生成起點(diǎn),再用rand()函數(shù)進(jìn)行生成隨機(jī)數(shù)。
代碼如下:
void game()
{
//1:實(shí)現(xiàn)1-100之間的隨機(jī)數(shù)的生成
int random_num = rand()%100+1;//rand()是隨機(jī)數(shù)生成函數(shù)需要搭配srand((unsigned)time(NULL))使用
//2:進(jìn)入玩家猜數(shù)字環(huán)節(jié)
while (1)
{
int guess = 0;//guess中儲(chǔ)存的是玩家猜測(cè)的數(shù)字
printf("請(qǐng)輸入猜測(cè)的數(shù)字:");
scanf("%d", &guess);
if (guess < random_num)
printf("猜小了\n");
else if (guess > random_num)
printf("猜大了\n");
else
{
printf("恭喜你猜對(duì)了\n");
break;//為了防止死循環(huán),若猜對(duì)了應(yīng)打破循環(huán)
}
}
}
其中g(shù)ame需引用的頭文件是#include<stdlib.h>
srand((unsigned)time(NULL))需引用的頭文件是#include<time.h>
5.總程序代碼
如下:
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//游戲規(guī)則
//1:電腦隨機(jī)生成一個(gè)1-100之間的數(shù)字
//2:玩家進(jìn)行猜數(shù)字 電腦會(huì)提示猜大了或者猜小了直到玩家猜對(duì)游戲結(jié)束
//3:游戲可以重復(fù)玩,即玩家玩完一把后可選擇再玩一把或者是直接退出
void menu()
{
int input = 0;
printf("*****歡迎來(lái)到猜數(shù)字游戲*****\n");
printf("********1:進(jìn)入游戲*********\n");
printf("********0:退出游戲*********\n");
printf("****************************\n");
}
void game()
{
//1:實(shí)現(xiàn)1-100之間的隨機(jī)數(shù)的生成
int random_num = rand()%100+1;//rand()是隨機(jī)數(shù)生成函數(shù)需要搭配srand((unsigned)time(NULL))使用
//2:進(jìn)入玩家猜數(shù)字環(huán)節(jié)
while (1)
{
int guess = 0;//guess中儲(chǔ)存的是玩家猜測(cè)的數(shù)字
printf("請(qǐng)輸入猜測(cè)的數(shù)字:");
scanf("%d", &guess);
if (guess < random_num)
printf("猜小了\n");
else if (guess > random_num)
printf("猜大了\n");
else
{
printf("恭喜你猜對(duì)了\n");
break;//為了防止死循環(huán),若猜對(duì)了應(yīng)打破循環(huán)
}
}
}
int main()
{
srand((unsigned)time(NULL));
int input = 0;
do
{
menu();
printf("請(qǐng)輸入你的選擇:");
scanf("%d",&input);
if (input == 1)
{
game();
}
else if (input == 0)
{
printf("游戲已經(jīng)退出");
break;
}
else
{
printf("您輸入的是無(wú)效指令,請(qǐng)重新輸入\n");
}
} while (input != 0);
return 0;
}
三.常見(jiàn)錯(cuò)誤
1.再game()中把隨機(jī)數(shù)語(yǔ)句段放在while循環(huán)中,導(dǎo)致在游戲過(guò)程中,每猜一次隨機(jī)數(shù)變化一次,導(dǎo)致如果第一次猜不對(duì),就一直猜不對(duì)。
2.在game()中每次猜數(shù)字后if判斷條件寫(xiě)錯(cuò),導(dǎo)致原本猜大了電腦顯示猜小了,原本猜小了顯示猜大了,這樣除非第一次猜對(duì)否則永遠(yuǎn)猜不對(duì)。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
COLORREF,COLOR,RGB,CString的轉(zhuǎn)化總結(jié)分析
實(shí)際的軟件開(kāi)發(fā)過(guò)程中,常需要用到非.net平臺(tái)的代碼。這時(shí)候就可能碰到ColorRef(也就是以int類(lèi)型代表的顏色值或是以DWORD值表示的顏色)。這跟.net平臺(tái)下的顏色的相互轉(zhuǎn)換MS并沒(méi)有直接實(shí)現(xiàn)2013-09-09
C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析
這篇文章主要介紹了C++編程中刪除運(yùn)算符與相等運(yùn)算符的使用解析,delete和==以及!=運(yùn)算符的使用是C++入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2016-01-01
C++?RBTree紅黑樹(shù)的性質(zhì)與實(shí)現(xiàn)
紅黑樹(shù)是一種二叉搜索樹(shù),但在每個(gè)結(jié)點(diǎn)上增加一個(gè)存儲(chǔ)位表示結(jié)點(diǎn)的顏色,可以是Red或Black;通過(guò)對(duì)任何一條從根到葉子的路徑上各個(gè)結(jié)點(diǎn)著色方式的限制,紅黑樹(shù)確保沒(méi)有一條路徑會(huì)比其他路徑長(zhǎng)出倆倍,因而是平衡的2023-03-03
C語(yǔ)言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)
下面小編就為大家?guī)?lái)一篇C語(yǔ)言之復(fù)雜鏈表的復(fù)制方法(圖示詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-07-07
C語(yǔ)言中回調(diào)函數(shù)和qsort函數(shù)的用法詳解
這篇文章主要為大家詳細(xì)介紹一下C語(yǔ)言中回調(diào)函數(shù)和qsort函數(shù)的用法教程,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定幫助,需要的可以參考一下2022-07-07
Matlab控制電腦攝像實(shí)現(xiàn)實(shí)時(shí)人臉檢測(cè)和識(shí)別詳解
人臉識(shí)別過(guò)程主要由四個(gè)階段組成:人臉檢測(cè)、圖像預(yù)處理、面部特征提取和特征識(shí)別。這篇文章主要介紹了如何使用MATLAB控制筆記本電腦的攝像頭,并進(jìn)行實(shí)時(shí)人臉檢測(cè)和識(shí)別,需要的可以參考一下2022-10-10
利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例
今天小編就為大家分享一篇關(guān)于利用rapidjson實(shí)現(xiàn)解析嵌套的json的方法示例,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-04-04
C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)代碼
本篇文章是對(duì)C++中獲取UTC時(shí)間精確到微秒的實(shí)現(xiàn)進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C語(yǔ)言菜鳥(niǎo)基礎(chǔ)教程之單精度浮點(diǎn)數(shù)與雙精度浮點(diǎn)數(shù)
在C語(yǔ)言中,單精度浮點(diǎn)數(shù)(float)和雙精度浮點(diǎn)數(shù)(double)類(lèi)型都是用來(lái)儲(chǔ)存實(shí)數(shù)的,雙精度是用記憶較多,有效數(shù)字較多,數(shù)值范圍較大。2017-10-10

