C?語言實現(xiàn)猜數(shù)字小游戲完整示例代碼

1.游戲要求
1.電腦隨機生成1到100的隨機數(shù)。
2.玩家猜數(shù)字,猜數(shù)字過程中,根據(jù)猜測數(shù)字的大小給出猜大或者猜小的結(jié)果反饋,直到猜對,游戲結(jié)束。
2.隨機數(shù)生成
C語言提供了一個函數(shù)叫rand,這個函數(shù)可以生成隨機數(shù),函數(shù)原型如下:

該函數(shù)會返回一個偽隨機數(shù),這個隨機數(shù)的生成范圍實在0到RAND_MAX之間,
RAND_MAX的大小是依賴編譯器上實現(xiàn)的,但是大部分編譯器上是32767。
rand函數(shù)的使用需要包括頭文件:stdlib.h。
第一次運行:

第二次運行:

由此可見兩次的運行結(jié)果是一樣的,所以我們得到的不是真正意義上的隨機數(shù)。那是因為rand函數(shù)是對一個叫“種子”的基準(zhǔn)值進行運算生成的隨機數(shù),又因為默認種子是1,所以這兩次運算的結(jié)果是一樣的,如果想要生成不同的隨機數(shù),就要讓種子是變化的。
這時候我們引進來一個新的函數(shù)叫srand,他是用來初始化隨機數(shù)的生成器,可以改變隨機數(shù)生成器的種子,srand的原型如下:

程序在調(diào)用rand函數(shù)前先調(diào)用srand函數(shù),通過srand函數(shù)的參數(shù)seed來設(shè)置rand函數(shù)生成隨機數(shù)的時候的種子,只要種子在變化,每次生成的隨機數(shù)就在變化。
那也就是說給srand的種子如果是隨機的,rand就能生成隨機數(shù);在生成隨機數(shù)的同時又需要一個隨機數(shù) ,那這就矛盾了。
在程序中我們一般是使用程序運行的時間作為種子的,因為時間時刻在發(fā)生變化的。
在C語言中有個函數(shù)叫time,就可以獲得這個時間,time函數(shù)的原型如下:

time 函數(shù)會返回當(dāng)前的?歷時間,其實返回的是1970年1?1?0時0分0秒到現(xiàn)在程序運?時間之間的差值,單位是秒。返回的類型是time_t類型的,time_t 類型本質(zhì)上其實就是32位或者64位的整型類型
如果 timer 是NULL,就只返回這個時間的差值。time函數(shù)返回的這個時間差也被叫做:時間戳。
具體使用如下:

OK,現(xiàn)在隨機數(shù)的生成我們已經(jīng)解決,那我們要生成1到100之間的隨機數(shù)我們該如何去做那:
rand%100; 余數(shù)的范圍是0到99;
rand%100 + 1 ;范圍是1到100;
3.代碼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
//游戲邏輯
void game()
{
int r = rand() % 100 + 1;
int guess = 0;
int count = 5;
while (count)
{
printf("\n你還有%d次機會\n", count);
printf("請猜數(shù)字>:");
scanf("%d", &guess);
if (guess < r)
{
printf("猜?了\n");
}
else if (guess > r)
{
printf("猜?了\n");
}
else
{
printf("恭喜你,猜對了\n");
break;
}
count--;
}
if (count == 0)
{
printf("你失敗了,正確值是:%d\n", r);
}
}
//菜單
void menu()
{
printf("***********************\n");
printf("****** 1. play ******\n");
printf("****** 0. exit ******\n");
printf("***********************\n");
}
int main()
{
int input = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("請選擇:>");
scanf("%d", &input);
switch (input)
{
case 1:
game();
break;
case 0:
printf("游戲結(jié)束\n");
break;
default:
printf("選擇錯誤,重新選擇\n");
break;
}
}while (input);
return 0;
}總結(jié)
到此這篇關(guān)于C 語言實現(xiàn)猜數(shù)字小游戲的文章就介紹到這了,更多相關(guān)C 語言猜數(shù)字小游戲內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 詳細講解stack與queue的模擬實現(xiàn)
C++ Stack(堆棧) 是一個容器類的改編,為程序員提供了堆棧的全部功能,也就是說實現(xiàn)了一個先進后出(FILO)的數(shù)據(jù)結(jié)構(gòu),許多程序都使用了 queue 容器。queue 容器可以用來表示超市的結(jié)賬隊列或服務(wù)器上等待執(zhí)行的數(shù)據(jù)庫事務(wù)隊列2022-04-04
C++中volatile和mutable關(guān)鍵字用法詳解
這篇文章主要介紹了C++中volatile和mutable關(guān)鍵字用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-02-02
Linux下動靜態(tài)庫的打包與使用指南(C/C++)
c++是面向?qū)ο蟮木幊陶Z言,比較方便實現(xiàn)某些第三方庫,比如翻譯其他面向?qū)ο笳Z言的代碼,比c語言要方便的多,下面這篇文章主要給大家介紹了關(guān)于Linux下C/C++動靜態(tài)庫的打包與使用的相關(guān)資料,需要的朋友可以參考下2023-02-02
詳解VisualS tudio Code開發(fā)Arm嵌入式Linux應(yīng)用
本文介紹如何在 Visual Studio Code 中使用 Yocto Project 生成的 Linux SDK,并針對 Arm 處理器進行 C/C++ 應(yīng)用交叉編譯和調(diào)試,感興趣的朋友跟隨小編一起看看吧2021-04-04

