文章目錄
- 清楚實作目標
- 明確邏輯結構
- 功能細節實作
- 選單模塊
- 儲存戰績
- 游戲模塊
- 游戲模式選擇
- 戰績查詢
- 成品展示
清楚實作目標
做任何一個小專案之前,我們首先都需要明確自己想要實作的目標.
所以猜數字游戲的實作目標是啥?
-
電腦隨機給出一個目標數字,玩家進行猜測
-
電腦會根據玩家猜測的數字,提示猜大了還是小了
-
直到猜對為止,一輪游戲結束.
-
游戲結束會詢問是否繼續.1代表繼續,0代表不繼續.
-
游戲模式有3種(簡單,普通,困難),對應內容分別為猜25次,15次,5次
-
游戲會記錄你的戰績,在選單中按2表示查詢戰績.
明確邏輯結構
清楚的知道了想要實作的目標,那最開始的步驟就是搭建邏輯結構.
所以邏輯結構是啥呢?
-
有一個選單提示,內容為按1代表開始/繼續游戲,2代表查詢戰績,0代表退出游戲,其他按鍵提示輸入錯誤
-
輸入2后,會再次跳出選單.提示輸入錯誤后,可以重新輸入命令
-
輸入1后,會詢問游戲模式,然后開始.
所以邏輯結構如下:
#include <stdio.h>
int computer = 0; //電腦的戰績
int player = 0; //玩家的戰績
int main()
{
int input = 0;//鍵入命令
do
{
menu();//選單提示模塊,后面進行實作
scanf("%d", &input);
switch (input)
{
case 0:
printf("成功退出游戲\n");
break;
case 1:
playgame(); //玩游戲模塊,后面進行實作
store(); //存盤戰績模塊
break;
case 2:
query();//查詢戰績模塊,后面進行實作
break;
}
} while (input);
return 0;
}
功能細節實作
選單模塊
按照目標要求,選單木塊代碼如下:
void menu()
{
printf(
"*******************************************************\n"
"******************* 0----退出游戲 ********************\n"
"******************* 1----開始游戲 ********************\n"
"******************* 2----查詢戰績 ********************\n"
"*******************************************************\n"
);
}
儲存戰績
這個的目標是無論啥時候打開游戲,都會記錄之前玩過的成績.
void store()
{
FILE* fp = fopen("grade.txt","w+");
if (fp == NULL)
{
exit(-1);
}
else
{
fprintf(fp,"computer : player = %d : %d\n",computer,player);
}
fclose(fp);
}
游戲模塊
游戲模塊的功能是:
玩家選擇游戲模式,
然后電腦首先會隨機給出一個玩家需要猜測的數字.
大概提示數字在哪個范圍.
玩家開始猜測.并且每猜測一次,都會提示還剩余幾次機會.
void playgame()
{
srand(time(NULL)); //亂數種子
int target = rand() % 1001;//代表電腦的亂數
int input = 0, num = 0; //input 代表游戲猜測的數字,num代表猜測剩余次數
num = mode(); //游戲模式選擇模塊,后面進行實作
while (1)
{
printf("請輸入你認為是答案的數字:\n");
scanf("%d",&input);
if (num == 0)
{
break;
}
if (input > target)
{
printf("猜大了,再試試\n");
}
else if (input > target)
{
printf("猜小了,再試試\n");
}
else
{
printf("恭喜你,猜對了\n");
break;
}
num--;
printf("你還剩余%d次機會哦~~~~\n", num);
}
if (!num)
{
printf("很遺憾,你輸了\n");
computer++; //標記戰績
}
else
{
printf("恭喜你,你贏了\n");
player++;
}
printf("是否還繼續游戲呢?\n");//這一步是提醒玩家是否繼續.
}
游戲模式選擇
int mode()
{
char str[20] = { 0 };
int num = 0;
printf("請輸入游戲模式:簡單 普通 困難\n:");
scanf("%s", str);
if (strcmp("簡單", str) == 0)
{
num = 25;
}
else if (strcmp("普通", str) == 0)
{
num = 15;
}
else
{
num = 5;
}
return num;
}
戰績查詢
void query()
{
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>
#include <string.h>
int computer = 0; //電腦的戰績
int player = 0; //玩家的戰績
void menu()
{
printf(
"*******************************************************\n"
"******************* 0----退出游戲 *******************\n"
"******************* 1----開始游戲 *******************\n"
"******************* 2----查詢戰績 *******************\n"
"*******************************************************\n"
);
}
int mode()
{
char str[20] = { 0 };
int num = 0;
printf("請輸入游戲模式:簡單 普通 困難\n:");
scanf("%s", str);
if (strcmp("簡單", str) == 0)
{
num = 25;
}
else if (strcmp("普通", str) == 0)
{
num = 15;
}
else
{
num = 5;
}
return num;
}
void playgame()
{
srand(time(NULL)); //亂數種子
int target = rand() % 1001;//控制數字在0-1000
int input = 0, num = 0; //input 代表游戲猜測的數字,num代表猜測剩余次數
num = mode(); //游戲模式選擇模塊
while (1)
{
printf("請輸入你認為是答案的數字(0-1000):\n");
scanf("%d",&input);
if (num == 0)
{
break;
}
if (input > target)
{
printf("猜大了,再試試\n");
}
else if (input < target)
{
printf("猜小了,再試試\n");
}
else
{
printf("恭喜你,猜對了\n");
break;
}
num--;
printf("你還剩余%d次機會哦~~~~\n", num);
}
if (!num)
{
printf("很遺憾,你輸了\n");
computer++; //標記戰績
}
else
{
printf("恭喜你,你贏了\n");
player++;
}
printf("是否還繼續游戲呢?\n");//這一步是提醒玩家是否繼續.
}
void query()
{
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 store()
{
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();//選單提示模塊,后面進行實作
scanf("%d", &input);
switch (input)
{
case 0:
printf("成功退出游戲\n");
break;
case 1:
playgame(); //玩游戲模塊,后面進行實作
store(); //存盤戰績模塊
break;
case 2:
query();//查詢戰績模塊,后面進行實作
break;
}
} while (input);
return 0;
}
小提示:
成品中的戰績查詢實際并沒有真的實作記錄所有次戰績,每次啟動程式戰績都會從0:0更新,那么怎么實作這個功能呢?
留給大家思考一下.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/289404.html
標籤:其他
下一篇:【游戲開發進階】教你Unity通過Jenkins實作自動化打包,打包這種事情就交給策劃了(保姆級教程 | 命令列打包 | 自動構建)
