C语言阶段性练习——扫雷游戏
目录
1. 扫雷游戏分析和设计
2. 扫雷游戏的代码实现
一、扫雷游戏的分析和设计
1.1 扫雷游戏的功能说明
- 使用控制台实现扫雷游戏;
- 在游戏中设置有菜单,可选择进行游戏或退出游戏;
- 扫雷游戏中的棋盘为9*9的格子棋盘,默认随机的布置10个雷;
- 可通过输入坐标对棋盘内的雷进行排查;
- 若所排查的坐标不是雷,则显示该坐标周围一圈范围内雷的个数;
- 若所排查的坐标是雷,则游戏结束,另重新进行菜单选择。
游戏界面参考:
;
//打印棋盘
void displayboard(char arr[rows][cols], int r, int c);
//棋盘布置雷
void setmine(char arr[rows][cols], int r, int c, int a);
//找雷
void findmine(char arr[rows][cols], char arr2[rows][cols], int r, int c);
game.c
#include "game.h"
void initboard(char arr[rows][cols],int r,int c,char set) //初始化棋盘
{
int i = 0;
int j = 0;
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
arr[i][j] = set;
}
}
}
void displayboard(char arr[rows][cols], int r, int c) //打印棋盘
{
int i = 0;
int j = 0;
for (i = 0; i <= c; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= r; i++)
{
printf("%d ", i);
for (j =1 ; j <= c; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
}
void setmine(char arr[rows][cols], int r, int c, int a) //在棋盘中心9*9区域内布置雷
{
int x = 0;
int y = 0;
while (a)
{
x = rand() % row + 1;
y = rand() % col + 1;
if (arr[x][y] == '0')
{
arr[x][y] = '1';
a--;
}
}
}
int minecount(char arr[rows][cols], int x, int y) //以排查坐标为中心的3*3方格内,求雷的个数
{
return((arr[x - 1][y + 1] + arr[x][y + 1] + arr[x + 1][y + 1] + arr[x - 1][y] + arr[x + 1][y] + arr[x - 1][y - 1] + arr[x][y - 1] + arr[x + 1][y - 1]) - 8 * '0');
}
void findmine(char arr[rows][cols], char arr2[rows][cols], int r , int c) //排查雷
{
int x = 0;
int y = 0;
int win = 0;
while (win < rows * cols - easy) //若排查次数小于9*9方格数-已布置的雷数,则继续排查
{
printf("please input need to cheak point:");
scanf("%d %d", &x, &y);
if ((x > 0 && x < 10) && (y > 0 && y < 10)) //坐标合法性判断,仅可对棋盘中间9*9
{
if (arr[x][y] == '1')
{
printf("game over\n");
displayboard(arr, row, col);
break;
}
else
{
arr2[x][y] = minecount(arr, x, y) + '0';
displayboard(arr2, row, col);
win++;
}
}
else
{
printf("point arr\n");
}
if (win == rows * cols - easy)
{
printf("you win !\n");
displayboard(arr2, row, col);
}
}
}
test.c
#include "game.h"
void menu()
{
printf("**************************\n");
printf("****** 1. play game ******\n");
printf("****** 0. exit game ******\n");
printf("**************************\n");
printf("请选择:->");
//游戏选择菜单打印
}
void game()
{
char mine[rows][cols] = { '0' };
char show[rows][cols] = { '0' };
initboard(mine, rows, cols, '0');
initboard(show, rows, cols, '*');
displayboard(show, row, col);
setmine(mine, row, col, easy);
findmine(mine, show, row, col);
}
int main()
{
srand((unsigned int)time(NULL));
int choose = 0;
do
{
menu();
scanf("%d", &choose);
switch (choose)
{
case 1:
game();
break;
case 0:
printf("exit game\n");
break;
default:
printf("choose arr\n");
break;
}
} while (choose);
return 0;
}