文章目錄
- 游戲效果
- 游戲結構
- 代碼實作
- 主函式
- 選單函式
- 游戲函式
- 關于亂數
- 游戲模式函式
- 保存戰績函式
- 查詢戰績函式
- 整體代碼
- 影片演示
- 升級版
- 簡單模式函式
- 普通模式函式
- 困難模式函式
- 添加游戲模式函式
- 升級版完整代碼
- 影片演示
游戲效果
我們在寫任何一個小專案之前先要明確自己要實作的效果
所以猜數字游戲能實作什么效果呢?
顧名思義,猜數字游戲就是讓系統隨機生成一個數字,由玩家來猜,之后系統反饋資訊,猜大了還是猜小了,逐一減少默認數字的范圍之后,最終鎖定目標,
-
電腦隨機給出一個目標數字,玩家進行猜測
-
電腦會根據玩家猜測的數字,提示猜大了還是小了
-
直到猜對為止,一輪游戲結束.
-
游戲結束會詢問是否繼續.1代表繼續,0代表停止游戲.
其實簡單的猜數字游戲到這里的話就已經可以了
但是我們可以增加一些其他的功能
首先我們可以再設定一下游戲的難度
- 游戲共有3中模式(簡單、普通、困難)
- 簡單模式:猜25次
- 普通模式:猜15次
- 困難模式:猜5次
除了增加游戲的難度以外,還可以再增加戰績查詢模塊
- 游戲會記錄你的戰績,并存盤,當你玩完一把以后,可以在選單中按2表示查詢戰績.
游戲結構
清楚的知道了想要實作的目標,那我們開始搭建邏輯結構.
所以邏輯結構是啥呢?
-
游戲開始會有一個選單提示,然后讓你選擇
-
輸入0代表退出游戲
-
輸入1代表開始游戲
-
輸入2代表查詢戰績
-
輸入其他數字提示輸入錯誤
代碼實作
為了實作游戲的基本功能,我們應該有一個游戲選單,通過選單玩家可以選擇是進入游戲還是退出游戲,且為了可以使該游戲可以反復玩,這個程序應該是一個回圈,選擇退出游戲時就打破這個回圈,
為了使代碼具有條理性我們定義唯一的主函式,然后按功能寫子函式,讓每一個子函式都有其意義,
所以我們這個專案的整個設計邏輯結構如下:
-
選單函式:
menu() -
游戲函式:
game() -
游戲模式函式:
model() -
保存戰績函式:
save() -
查詢戰績函式:
find()
主函式
因為程式從主函式開始運行,到主函式結束時結束,所以主函式應該起到搭建整個游戲基本框架的功能
代碼如下:
int main()
{
int input = 0;
do
{
menu();
printf("請選擇:> ");
scanf("%d", &input);
switch (input)
{
case 0:
printf("成功退出游戲\n");
break;
case 1:
game(); //玩游戲函式
save(); //保存戰績函式
break;
case 2:
find(); //查詢戰績函式
break;
default:
printf("輸入錯誤,請重新輸入!\n");
}
} while (input);
return 0;
}
選單函式
選單功能十分簡單
代碼示例如下:
void menu()
{
printf("\n************Welcome To My Game's World*****************\n");
printf("*******************************************************\n");
printf("******************* 0. 退出游戲 *********************\n");
printf("******************* 1. 開始游戲 *********************\n");
printf("******************* 2. 查詢戰績 *********************\n");
printf("*******************************************************\n");
}
游戲函式
玩家選擇好游戲模式以后,電腦首先會給出一個玩家需要猜的數字(我設定的是1~1000)
玩家開始猜,假如猜大了,系統會提示“猜大了”;假如猜小了,系統會提示“猜小了”;
并且每猜測一次,都會提示還剩余幾次機會
為了使整個游戲看起來比較生動,我用了一些比較搞怪的話哈哈哈
void game()
{
srand(time(NULL)); //亂數生成器
int r = rand() % 1001; //r % 1001 --> 表示生成的亂數范圍是:1~1000
int input = 0; //input 代表你輸入的猜測的數字
int num = 0; //num代表猜測剩余次數
num = model(); //游戲模式函式
while (1)
{
printf("\n請輸入你猜的數字(0-1000):> ");
scanf("%d", &input);
if (num == 0)
{
break;
}
if (input > r)
{
printf("\n猜大了,再猜猜\n");
}
else if (input < r)
{
printf("\n猜小了,再猜猜\n");
}
else
{
printf("恭喜你,猜對了\n");
break;
}
num--;
printf("\n加油,你還剩余%d次機會喲\n", num);
}
if (!num)
{
printf("\n闖關失敗,你不行啊!簡直弱爆了!!!\n");
computer++; //標記電腦的戰績
}
else
{
printf("你真的太棒了!!!\n");
player++; //標記玩家戰績
}
printf("\n你是否還想繼續游戲呢?\n"); //這一步是提醒玩家是否繼續
}
關于亂數
生成亂數的方法:
C語言生成亂數要用rand函式

但是單單使用rand()函式來生成亂數是不行的,因為它每玩一次生成的亂數都是相同的,即亂數不隨機,所以要通過srand()函式,種下一個隨機種子,來產生亂數,
根據時間每時每刻都是變化的,可以用time()時間函式來產生種子,


這里time_t的型別就是在C語言中被定義為長整型,而srand()函式的引數型別為unsigned int (無符號整形),所以使用時要強制型別轉換,而且time()函式,不需要設定引數,故用NULL代替,
游戲模式函式
int model()
{
int i = 0;
int num = 0;
printf("請輸入游戲模式:1.簡單 2.普通 3.困難\n請選擇相應的模式:> ");
scanf("%d", &i);
if (i == 1)
{
easy();
num = 25;
}
else if (i == 2)
{
medium();
num = 15;
}
else
{
hard();
num = 5;
}
return num;
}
保存戰績函式
這個的目標是無論啥時候打開游戲,都會記錄之前玩過的成績
void save()
{
FILE* fp = fopen("grade.txt", "w");
if (fp == NULL)
{
exit(-1);
}
else
{
fprintf(fp, "computer : player = %d : %d\n", computer, player);
}
fclose(fp);
}
查詢戰績函式
void find()
{
FILE* fp = fopen("grade.txt", "r");
int a = 0, b = 0;
char p[60] = { 0 };
if (fp == NULL)
{
exit(-1);
}
else
{
fgets(p, 60, fp);
printf("%s\n", p);
}
fclose(fp);
printf("是否繼續游戲?\n");
}
整體代碼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int computer = 0; //電腦的戰績
int player = 0; //玩家的戰績
void menu()
{
printf("\n************Welcome To My Game's World*****************\n");
printf("*******************************************************\n");
printf("******************* 0. 退出游戲 *********************\n");
printf("******************* 1. 開始游戲 *********************\n");
printf("******************* 2. 查詢戰績 *********************\n");
printf("*******************************************************\n");
}
int model()
{
int i = 0;
int num = 0;
printf("請輸入游戲模式:1.簡單 2.普通 3.困難\n請選擇相應的模式:> ");
scanf("%d", &i);
if (i == 1)
{
num = 25;
}
else if (i == 2)
{
num = 15;
}
else
{
num = 5;
}
return num;
}
void game()
{
srand(time(NULL));
int r = rand() % 1001;
int input = 0; //input 代表游戲猜測的數字
int num = 0; //num代表猜測剩余次數
num = model(); //游戲模式函式
while (1)
{
printf("\n請輸入你猜的數字(0-1000):> ");
scanf("%d", &input);
if (num == 0)
{
break;
}
if (input > r)
{
printf("\n猜大了,再猜猜\n");
}
else if (input < r)
{
printf("\n猜小了,再猜猜\n");
}
else
{
printf("恭喜你,猜對了\n");
break;
}
num--;
printf("\n加油,你還剩余%d次機會喲\n", num);
}
if (!num)
{
printf("\n闖關失敗,你不行啊!簡直弱爆了!!!\n");
computer++; //標記電腦的戰績
}
else
{
printf("你真的太棒了!!!\n");
player++;
}
printf("\n你是否還想繼續游戲呢?\n"); //這一步是提醒玩家是否繼續
}
void find()
{
FILE* fp = fopen("grade.txt", "r");
int a = 0, b = 0;
char p[60] = { 0 };
if (fp == NULL)
{
exit(-1);
}
else
{
fgets(p, 60, fp);
printf("%s\n", p);
}
fclose(fp);
printf("是否繼續游戲?\n");
}
void save()
{
FILE* fp = fopen("grade.txt", "w");
if (fp == NULL)
{
exit(-1);
}
else
{
fprintf(fp, "computer : player = %d : %d\n", computer, player);
}
fclose(fp);
}
int main()
{
int input = 0;
do
{
menu();
printf("請選擇:> ");
scanf("%d", &input);
switch (input)
{
case 0:
printf("成功退出游戲\n");
break;
case 1:
game(); //玩游戲函式
save(); //保存戰績函式
break;
case 2:
find(); //查詢戰績函式
break;
default:
printf("輸入錯誤,請重新輸入!\n");
}
} while (input);
return 0;
}
影片演示
我們來看下游戲運行的效果把!!!

其實到了這里的話就基本已經完工了!!!
但是,我覺得選擇模式哪里太單調了,想來點不一樣的,于是乎!騷操作來了!
升級版
我在游戲模式函式model()里面,又分別在對應的簡單、普通、困難模式里面添加了3個函式
當你選擇簡單模式時,螢屏會清屏然后慢慢的列印出一句歡迎語!就像這樣!
普通和困難模式也一樣
我們來看看效果!

簡單模式函式
void easy()
{
char arr1[] = "The Game is about to enter easy mode";
char arr2[] = "####################################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//睡眠函式-單位是毫秒
system("cls");//執行系統命令的
left++;
right--;
}
printf("只有菜雞才會選擇簡單模式!\n");
return 0;
}
普通模式函式
void medium()
{
char arr1[] = "The Game is about to enter medium mode";
char arr2[] = "######################################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//睡眠函式-單位是毫秒
system("cls");//執行系統命令的
left++;
right--;
}
printf("哎喲!你終于不玩簡單模式了呀?\n");
return 0;
}
困難模式函式
void hard()
{
char arr1[] = "The Game is about to enter hard mode";
char arr2[] = "####################################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//睡眠函式-單位是毫秒
system("cls");//執行系統命令的
left++;
right--;
}
printf("這可不是一般的難哦!拿出你的實力讓我看看吧!\n");
return 0;
}
注意:需要參考頭檔案:#include <windows.h>
添加游戲模式函式
int model()
{
//char str[20] = { 0 };
int i = 0;
int num = 0;
printf("請輸入游戲模式:1.簡單 2.普通 3.困難\n請選擇相應的模式:> ");
scanf("%d", &i);
if (i == 1)
{
easy(); //簡單模式函式
num = 25;
}
else if (i == 2)
{
medium(); //普通模式函式
num = 15;
}
else
{
hard(); //困難模式函式
num = 5;
}
return num;
}
升級版完整代碼
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <windows.h>
int computer = 0; //電腦的戰績
int player = 0; //玩家的戰績
void menu()
{
printf("\n************Welcome To My Game's World*****************\n");
printf("*******************************************************\n");
printf("******************* 0. 退出游戲 *********************\n");
printf("******************* 1. 開始游戲 *********************\n");
printf("******************* 2. 查詢戰績 *********************\n");
printf("*******************************************************\n");
}
void easy()
{
char arr1[] = "The Game is about to enter easy mode";
char arr2[] = "####################################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//睡眠函式-單位是毫秒
system("cls");//執行系統命令的
left++;
right--;
}
printf("只有菜雞才會選擇簡單模式!\n");
return 0;
}
void medium()
{
char arr1[] = "The Game is about to enter medium mode";
char arr2[] = "######################################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//睡眠函式-單位是毫秒
system("cls");//執行系統命令的
left++;
right--;
}
printf("哎喲!你終于不玩簡單模式了呀?\n");
return 0;
}
void hard()
{
char arr1[] = "The Game is about to enter hard mode";
char arr2[] = "####################################";
int left = 0;
int right = strlen(arr1) - 1;
while (left <= right)
{
arr2[left] = arr1[left];
arr2[right] = arr1[right];
printf("%s\n", arr2);
Sleep(100);//睡眠函式-單位是毫秒
system("cls");//執行系統命令的
left++;
right--;
}
printf("這可不是一般的難哦!拿出你的實力讓我看看吧!\n");
return 0;
}
int model()
{
int i = 0;
int num = 0;
printf("請輸入游戲模式:1.簡單 2.普通 3.困難\n請選擇相應的模式:> ");
scanf("%d", &i);
if (i == 1)
{
easy();
num = 25;
}
else if (i == 2)
{
medium();
num = 15;
}
else
{
hard();
num = 5;
}
return num;
}
void game()
{
srand(time(NULL));
int r = rand() % 1001;
int input = 0; //input 代表游戲猜測的數字
int num = 0; //num代表猜測剩余次數
num = model(); //游戲模式函式
while (1)
{
printf("\n請輸入你猜的數字(0-1000):> ");
scanf("%d", &input);
if (num == 0)
{
break;
}
if (input > r)
{
printf("\n猜大了,再猜猜\n");
}
else if (input < r)
{
printf("\n猜小了,再猜猜\n");
}
else
{
printf("恭喜你,猜對了\n");
break;
}
num--;
printf("\n加油,你還剩余%d次機會喲\n", num);
}
if (!num)
{
printf("\n闖關失敗,你不行啊!簡直弱爆了!!!\n");
computer++; //標記電腦的戰績
}
else
{
printf("你真的太棒了!!!\n");
player++;
}
printf("\n你是否還想繼續游戲呢?\n"); //這一步是提醒玩家是否繼續
}
void find()
{
FILE* fp = fopen("grade.txt", "r");
int a = 0, b = 0;
char p[60] = { 0 };
if (fp == NULL)
{
exit(-1);
}
else
{
fgets(p, 60, fp);
printf("%s\n", p);
}
fclose(fp);
printf("是否繼續游戲?\n");
}
void save()
{
FILE* fp = fopen("grade.txt", "w");
if (fp == NULL)
{
exit(-1);
}
else
{
fprintf(fp, "computer : player = %d : %d\n", computer, player);
}
fclose(fp);
}
int main()
{
int input = 0;
do
{
menu();
printf("請選擇:> ");
scanf("%d", &input);
switch (input)
{
case 0:
printf("成功退出游戲\n");
break;
case 1:
game(); //玩游戲函式
save(); //保存戰績函式
break;
case 2:
find(); //查詢戰績函式
break;
default:
printf("輸入錯誤,請重新輸入!\n");
}
} while (input);
return 0;
}
影片演示

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/343105.html
標籤:其他
上一篇:【Unity使用UGUI實作王者榮耀UI界面(一)】加載頁面(進度條)
下一篇:猜數字游戲 C語言
