一、打印菜单
void mune()
{
printf("********************************\n");
printf("********* 1.play **********\n");
printf("********* 0.exit **********\n");
printf("********************************\n");
}
do-while语句打印菜单(while语句后面要加;)
里面嵌套switch语句判断输入选项
void test()
{
int a = 0;
do
{
mune();
printf("请选择:>");
scanf("%d", &a);
switch (a)
{
case 1:
game();
break;
case 0:
printf("退出游戏");
break;
default:
printf("输入错误");
break;
}
} while (a);//加;
}
二、初始化棋盘
头文件中
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
边界不好处理所以初始化的棋盘比用到的棋盘要大一圈
创建两个数组,再创建一个函数
一组用来存放雷,用‘0’表示没雷,用‘1’表示雷
二组用来排雷,用‘ * ’表示还没排查的坐标
为了让这两个数组可以共用一个函数,所以元素都用char类型
三、打印棋盘
创建一个函数,打印游戏界面
void displayboard(char arr[ROWS][COLS], int row, int col)
{
printf("-----扫雷-----\n");
int i = 0;
for (i = 0; i <= col; i++)
{
printf("%d ", i);
}
printf("\n");
for (i = 1; i <= row; i++)
{
printf("%d", i);
int j = 0;
for (j = 1; j <= col; j++)
{
printf(" %c", arr[i][j]);
}
printf("\n");
}
}
四、布置雷
头文
#define ROW 9
#define COL 9
#define ROWS ROW+2
#define COLS COL+2
#define easy_count 10
确定雷的数量
用while循环和rand()函数随机生成雷
记得加上<time.h> 、 <stdlib.h>和 srand((unsigned int)time(NULL));
void setmine(char arr[ROWS][COLS], int row, int col)
{
int count = easy_count;
int x = 0;
int y = 0;
while (count)
{
x = rand() % row + 1;
y = rand() % col + 1;
if (arr[x][y] != '1')
{
arr[x][y] = '1';
count--;
}
}
}
五、排查雷
创建一个函数
void findmine(char arr[ROWS][COLS], char arr2[ROWS][COLS], int row, int col)
{
int x = 0;
int y = 0;
int win = 0;
while (win<row * col-easy_count)
{
printf("请输入要排查的坐标");
scanf("%d %d", &x, &y);
if (x >= 1 && x <= row && y >= 1 && y <= col)
{
if (arr[x][y] == '1')
{
printf("踩雷了,游戏结束\n");
displayboard(arr, ROW, COL);
break;
}
else
{
int count = getminecount(arr, x, y);
arr2[x][y] = count + '0';//加‘0’转化成字符
displayboard(arr2, ROW, COL);
win++;
}
}
else
{
printf("输入的坐标有误,重新输入");
}
if (win == row * col - easy_count)
{
printf("游戏通关");
displayboard(arr, ROW, COL);
}
}
}
输入一个坐标
判断坐标是否越界
判断是不是雷
是雷,游戏结束
不是雷, 利用‘1’-‘0’=1 ,把字符转换成整型创建函数,统计这个坐标周围雷的个数,显示
int getminecount(char arr[ROWS][COLS], int x, int y)
{
/*一*/
//return arr[x - 1][y] +
// arr[x - 1][y - 1] +
// arr[x - 1][y + 1] +
// arr[x][y - 1] +
// arr[x][y + 1] +
// arr[x + 1][y - 1] +
// arr[x + 1][y] +
// arr[x + 1][y - 1] - 8 * '0';
/*二*/
int i = 0;
int count = 0;
for (i = -1; i <= 1; i++)
{
int j = 0;
for (j = -1; j <= 1; j++)
{
count += (arr[x + i][y + j] - '0');//arr[x][y]=0,加上也无所谓
}
}
return count;
}