扫雷小游戏制作全过程
在练习了几十个小短句,和其他小项目之后,我开始了第一个比较大的,也比较经典的小游戏——扫雷
首先需要分析,制作这个小项目所需要的大致流程
- 开始游戏
- 初始化棋盘
- 给地图中增加雷
- 用户交互,输入坐标,判断坐标是否有雷
- 胜利/失败
一,开始游戏
我们可以通过switch选择语句来让玩家开始游戏,并通过printf函数来让可视化界面尽量美观
int n; printf("如果你要开始游戏,请输入1 "); scanf("%d", &n); switch (n) { case 1:game(); break; default:printf("Thanks your play"); break; }
二,初始化棋盘
我们准备写一个可改变棋盘大小的游戏,因此我们可以将数组的变量在头文件中定义,长和宽都定义为9,但这个时候就有问题了,我们很难确定边界的坐标周围有多少个‘雷’,因此我们实际的棋盘大小要更大一些,但呈现在玩家面前的只有中间那一块的棋盘。
#define len 9 #define tall 9 #define lens len+2 #define talls tall+2
首先,我们需要两个数组分别作为玩家可视化的界面和棋盘资料,并将一个全部置0,另一个则全部置*作为用户可视化的界面,并将其打印出来
char game1[lens][talls]; char game2[lens][lens]; void Init_news(char a[lens][talls],char n)//初始化全场为一个数符 { for (int i = 0; i < lens; i++) { for (int j = 0; j < talls; j++) { a[i][j] = n; //printf("%d", a[i][j]); } //printf(" "); } } void Print_Init(char a[lens][talls])//打印棋盘 { for (int i = 0; i < 10;i++) { printf("%d ", i); } printf(" "); for (int i = 1; i <= len; i++) { printf("%d ", i); for (int j = 1; j <= tall; j++) { printf("%c ", a[i][j]); } printf(" "); } }
三,给地图中增加地雷
我们需要随机给地图中增加地雷数量,可以将地雷数量设置为n,n可以改变
void Product_Mine(char a[lens][talls],int Num)//为地图里初始化地雷 { int m =0, n =0; while (Num--) { n = rand() % len + 1; m = rand() % tall + 1; a[n][m] = 1;//1的意思为有雷 } }
四,用户交互,输入坐标
由于我们已经将棋盘全部置0,地雷置1,因此只需要将其周围的1加起来,数字大小即为周围地雷数量
int Sum_Mine(char a[lens][talls], int n, int m) { if (a[n][m] == 1) { printf("GAME OVER!即将为您开始下一局游戏 "); main(); } int sum = 0; for (int i = -1; i < 2; i++) { for (int j = -1; j < 2; j++) { sum = sum + a[n + i][m + j] - 0; } } return sum; }
五,胜利/失败
怎么确定胜利或者失败呢?当棋盘总格子-地雷数量=排雷次数。此时地图上全都是地雷,此时胜利。
如果输入的坐标和地雷坐标一致时,此时失败。
当然,如果一次猜完之后,接下来又要猜的话需要循环,则应该将本函数置于死循环之中。
void Guess_Number(char a[lens][talls], char b[lens][talls],int t) { int n,m,i; printf("请输入你所要排查的坐标:"); scanf("%d %d", &n, &m); printf(" "); i = Sum_Mine(a, n, m); Change_Map(b, i,n,m); t++; Print_Init(b); if (t == 71) { printf("You win!! 即将为您开始下一局游戏 "); main(); } }
以上就是我这次小小的实践的收获和结果
ps题外话,后续优化的一些思路
当我这个程序运行时,一次只会判断一个坐标,设想一下,如果点一个坐标,便能让他周围的空格子都呈现出来其数字,玩起来应该会更轻松一点吧
上一篇:
IDEA上Java项目控制台中文乱码