目錄
1.引文
2.實作思路
3.代碼實作及具體決議
1.關于猜數字游戲,我想很多人在小時候都玩過,這是一種起源于20世紀中期的游戲,而他的基本規則就是一個人隨機給出一個數,然后讓另一個人去猜測這個數字的具體大小,如果大了則回答“猜大了”,反之則回答“猜小了”,直到正確才停止,而就是這么一個簡單的游戲,卻隱含不少編程有關的知識,那今天就讓我們嘗試利用c語言去撰寫這樣的一個小游戲吧,
2.由上述關于猜數字游戲的描述我們轉換為程式語言可大致分為以下幾個方面
①:程式的互動性實作(如何與玩家實作互動,如游戲開始與結束控制,即選單)
②:亂數的實作(利用rand和srand函式)
③:亂數與玩家所猜數的判斷(簡單的if判斷)
3.由以上三點分析,我們開始逐步實作這個程式
首先我們在設計程式時要考慮的應該是一個程式主體框架,以及如何將一個問題拆分為幾個小問題分開實作,而非一些細枝末節的東西,這個思維在以后的程式設計中都將占主導地位,這是新人所需要注意的,那我們現把程式框架實作如下:
int main()
{
srand((unsigned int)time(NULL));//控制隨機值(后面會講到)
int input = 0;
do
{
menu();//選單
printf("請選擇");
scanf("%d", &input);
switch (input)
{
case 1:
game();//后面會實作的游戲主體函式
break;
case 0:
printf("退出游戲\n");
break;
default://輸入其他數字時提示錯誤
printf("選擇錯誤\n");
break;
}
} while (input);//這里選擇input為0(即為假)退出游戲
return 0;
}
可以看到當程式框架完成后,我們就將實作游戲的選單和具體內容,那我們現實作一個簡單的選單
void menu()//注意回傳型別為void
{
printf("********************************\n");
printf("******* 1. play *******\n");
printf("******* 0. exit *******\n");
printf("********************************\n");
}
接下來是整個程式的核心內容
void game()
{
int ret = rand() % 100 + 1;//控制隨機值范圍
int num = 0;
//2.猜數字
while (1)
{
printf("請猜數字");
scanf("%d", &num);
if (num == ret)
{
printf("恭喜你,猜對了\n");
break;
}
else if (num > ret)
{
printf("猜大了\n");
}
else
{
printf("猜小了\n");
}
}
}
對于亂數的生成我們用到了一個rand函式,而如果只單獨使用rand函式的話會出現以下情況,

可以看到連續生成10個亂數但是結果卻是一樣的,這便失去了我們猜數字的意義,因此為解決這種問題我們就要為rand函式播下“種子”,于是這里便引出了srand函式 ,如srand(1)來初始化種子,但如果每次的種子都是一樣的便達不到亂數的效果了,因此我們需要引入一個時刻在變化的變數,這里我們通常使用的是系統時間,使用time函式獲取當前系統時間,得到的值就是時間戳,
因此我們得到srand的通常用法如下:srand((unsigned int)time(NULL)),先利用time獲取當前時間戳,再(unsigned int)將獲取的值轉換為無符號整型,然后將值傳給srand函式就可以得到一個時刻在變化的值,
這里需要注意的是rand函式生成的亂數范圍通常是0~32767,而這個范圍對于我們來說通常太大了,因此我們經常會使用如下方法去控制rand的范圍
int ret=rand() % 100 + 1;//范圍0~100
基于上述的詳細分析,我們可以得到完整的代碼如下
#include <stdlib.h>
#include <time.h>//由于使用了time函式需要引頭檔案
#include<stdio.h>
void menu()
{
printf("********************************\n");
printf("******* 1. play *******\n");
printf("******* 0. exit *******\n");
printf("********************************\n");
}
void game()
{
int ret = rand() % 100 + 1;//控制隨機值范圍
int num = 0;
//猜數字
while (1)
{
printf("請猜數字");
scanf("%d", &num);
if (num == ret)
{
printf("恭喜你,猜對了\n");
break;//猜對了退出回圈,回到主函式選單界面
}
else if (num > ret)
{
printf("猜大了\n");
}
else
{
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("退出游戲\n");
break;
default:
printf("選擇錯誤\n");
break;
}
} while (input);
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/341985.html
標籤:其他
上一篇:《C++》 猜單詞小游戲
