扫雷小游戏制作全过程
发布时间
阅读量:
阅读量
在练习了几十个小短句,和其他小项目之后,我开始了第一个比较大的,也比较经典的小游戏——扫雷
首先需要分析,制作这个小项目所需要的大致流程
- 开始游戏
- 初始化棋盘
- 给地图中增加雷
- 用户交互,输入坐标,判断坐标是否有雷
- 胜利/失败
一,开始游戏
我们可以通过switch选择语句来让玩家开始游戏,并通过printf函数来让可视化界面尽量美观
int n;
printf("如果你要开始游戏,请输入1\n");
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("\n");
}
}
void Print_Init(char a[lens][talls])//打印棋盘
{
for (int i = 0; i < 10;i++)
{
printf("%d ", i);
}
printf("\n");
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,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!即将为您开始下一局游戏\n");
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("\n");
i = Sum_Mine(a, n, m);
Change_Map(b, i,n,m);
t++;
Print_Init(b);
if (t == 71)
{
printf("You win!!\n 即将为您开始下一局游戏\n");
main();
}
}
以上就是我这次小小的实践的收获和结果
ps题外话,后续优化的一些思路
当我这个程序运行时,一次只会判断一个坐标,设想一下,如果点一个坐标,便能让他周围的空格子都呈现出来其数字,玩起来应该会更轻松一点吧
全部评论 (0)
还没有任何评论哟~
