基于C語(yǔ)言實(shí)現(xiàn)猜數(shù)字游戲
前言
系統(tǒng)生成一個(gè)【1,100】之間數(shù)字,用戶隨便輸入一個(gè)整數(shù),如果用戶輸入的數(shù)字比系統(tǒng)生成的數(shù)字小,提示“猜低了”,如果用戶輸入的數(shù)字比系統(tǒng)生成的數(shù)字大提示猜高了,如果相同,提示猜對(duì)了。
一、先生成一個(gè)【1,100】的隨機(jī)整數(shù)
C語(yǔ)言的標(biāo)準(zhǔn)庫(kù)中已經(jīng)包含了很多現(xiàn)成的功能,rand可以生成一個(gè)隨機(jī)整數(shù),可以查閱cplusplus文檔。瀏覽器輸入www.cplusplus.com。cstdlib這是C++風(fēng)格的寫法,stdlib.h是C語(yǔ)言風(fēng)格的寫法,C++也可以用stdlib.h.C語(yǔ)言中函數(shù)參數(shù)如果沒有,可以直接寫(),也可以寫作(void),但是返回值不可忽略void,一些老的編譯器例如VC6,函數(shù)的返回值也可以忽略,如果省略返回值,表示返回值類型為int。
由上述文章可以看出,我們要生成【1,100】的隨機(jī)整數(shù),是rand()%100+1
注意:這里提示大家:rand這個(gè)函數(shù)以后在工作中,要謹(jǐn)慎使用,多線程,rand函數(shù)線程不安全,實(shí)際開發(fā)中如果對(duì)于隨機(jī)數(shù)要求的不嚴(yán)格的話,就可以有很多中代替rand的方案來實(shí)現(xiàn),例如,可以使用某個(gè)變量的地址來代替。
二、提示用戶進(jìn)行交互
加上一個(gè)和用戶交互的菜單。代碼如下:
int menu() { printf("*********************\n"); printf("歡迎來到猜數(shù)字游戲!\n"); printf("1.開始游戲\n"); printf("2.退出游戲\n"); printf("請(qǐng)輸入您的選擇\n"); printf("*********************\n"); int choice = 0; scanf("%d", &choice); return choice; }
三、偽隨機(jī)和真隨機(jī)
偽隨機(jī)數(shù)是通過一定算法獲得一個(gè)隨機(jī)的值,并不是真的隨機(jī)。
真隨機(jī)數(shù)是伴隨著物理實(shí)驗(yàn)的,比如:拋硬幣、擲骰子、電子元件的噪音、核裂變等,他的結(jié)果符合三大特性的。是真實(shí)的隨機(jī)數(shù)。
當(dāng)我們就按rand來執(zhí)行程序時(shí),會(huì)發(fā)現(xiàn)每次執(zhí)行的隨機(jī)數(shù)都是一樣的,這就是偽隨機(jī)。那么如何生成真正的隨機(jī)數(shù)呢,我們可以使用srand。只需要讓每次執(zhí)行程序的時(shí)候,設(shè)置的隨機(jī)種子不一樣即可,我們就會(huì)想到時(shí)間,時(shí)間是永遠(yuǎn)在變化的。計(jì)算機(jī)里表示時(shí)間,正是通過整數(shù)的方式來表示的,叫做時(shí)間戳,是很重要的。時(shí)間戳是以1970年1月1日0時(shí)0分0秒為基準(zhǔn)時(shí)刻,計(jì)算當(dāng)前時(shí)刻和基準(zhǔn)時(shí)刻的秒數(shù)之差。
time(0)獲取時(shí)間戳,需要包含頭文件time.h。time函數(shù)返回類型叫time-t,time本質(zhì)上是一個(gè)unsigned long long。所以會(huì)需要強(qiáng)制類型轉(zhuǎn)換,把time-t結(jié)果強(qiáng)制轉(zhuǎn)換為unsigned int。(這樣做也許會(huì)丟數(shù)據(jù),目的是為了讓編譯器不必提示這個(gè)警告)。
srand((unsigned int)time(0));
四、整體程序?qū)崿F(xiàn)
#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> #include<time.h> int menu() { printf("*********************\n"); printf("歡迎來到猜數(shù)字游戲!\n"); printf("1.開始游戲\n"); printf("2.退出游戲\n"); printf("請(qǐng)輸入您的選擇\n"); printf("*********************\n"); int choice = 0; scanf("%d", &choice); return choice; } void game() { printf("開始一局猜數(shù)字游戲\n"); int toGuess = rand() % 100 + 1; while (1) { int inputNum = 0; printf("請(qǐng)猜一個(gè)1-100的整數(shù)\n"); scanf("%d", &inputNum); if (inputNum > toGuess) { printf("猜高了!\n"); } else if (inputNum < toGuess) { printf("猜低了!\n"); } else { printf("猜對(duì)了!\n"); break; } } } int main() { srand((unsigned int)time(0)); int choice = menu(); while (1) { if (choice == 1) { game(); break; } else if (choice == 0) { printf("goodbye!\n"); break; } else { printf("您的輸入有誤!\n"); } } system("pause"); return 0; } }
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)三子棋游戲簡(jiǎn)易版
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲簡(jiǎn)易版,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C++實(shí)現(xiàn)LeetCode(76.最小窗口子串)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(76.最小窗口子串),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C語(yǔ)言遞歸應(yīng)用實(shí)現(xiàn)掃雷游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言遞歸應(yīng)用實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-06-06C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動(dòng)態(tài)數(shù)組的區(qū)別分析
這篇文章主要介紹了C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動(dòng)態(tài)數(shù)組的區(qū)別分析,很重要的概念,需要的朋友可以參考下2014-08-08C++實(shí)現(xiàn)LeetCode(77.Combinations 組合項(xiàng))
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(Combinations 組合項(xiàng)),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C++實(shí)現(xiàn)動(dòng)態(tài)煙花代碼
這篇文章主要介紹了利用C++實(shí)現(xiàn)的放煙花程序,用到了EGE圖形庫(kù),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C++有一定幫助,需要的可以參考一下2023-01-01vc6.0中c語(yǔ)言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器)
這篇文章主要介紹了vc6.0中c語(yǔ)言控制臺(tái)程序中的定時(shí)技術(shù)(定時(shí)器),需要的朋友可以參考下2014-04-04淺談C++函數(shù)聲明后面加throw()的作用(必看)
下面小編就為大家?guī)硪黄獪\談C++函數(shù)聲明后面加throw()的作用(必看)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-01-01C++ virtual destructor虛擬析構(gòu)函數(shù)
C++中基類采用virtual虛析構(gòu)函數(shù)是為了防止內(nèi)存泄漏。具體地說,如果派生類中申請(qǐng)了內(nèi)存空間,并在其析構(gòu)函數(shù)中對(duì)這些內(nèi)存空間進(jìn)行釋放,今天通過本文給大家介紹C++ virtual destructor虛擬析構(gòu)函數(shù)的相關(guān)知識(shí),感興趣的朋友一起看看吧2021-05-05