头文件部分:
#define _CRT_SECURE_NO_WARNINGS 1
#define LINE 11//行数
#define ROW 11//列数
#define NUM 10//雷数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void printmenu();//菜单
void introduce();//介绍说明
void printboard(char arr[LINE][ROW]);//打印棋盘
void resetarr(char arr[LINE][ROW],char ch);//初始化数组
void deposit1(char deposit[LINE][ROW]);//埋雷
void check(char deposit[LINE][ROW], char view[LINE][ROW]);//玩家排查雷时用到,显示每个坐标周围雷数(该坐标变成与雷数挂钩的数字),后面为输入的坐标
源文件部分:
#include”扫雷.h”
void resetarr(char arr[LINE][ROW], char ch)//初始化view,deposit
{
char n = '0'; char n1 = '0';
for (int i = 0; i < LINE; i++)
{
arr[0][i] = '0';
arr[i][0] = '0';
}
for (int i = 1; i < LINE; i++)
{
arr[1][i] = n;
arr[i][1] = n1;
n++;
n1++;
}
for (int i = 2; i < LINE; i++)
{
for (int j = 2; j < ROW; j++)
{
arr[i][j] = ch;
}
}
}
void printboard(char arr[LINE][ROW])
{
for (int i = 1; i < ROW; i++)
{
for (int j = 1; j < LINE; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
}
void deposit1(char deposit[LINE][ROW])//LINE=11;ROW=11
{
int x = NUM;
srand((unsigned)time(NULL));
do
{
int line = rand() % 9 + 2;
int row = rand() % 9 + 2;
if (deposit[line][row] == '0')
{
deposit[line][row] = '#';
x--;
}
} while (x);
}
void check(char deposit[LINE][ROW], char view[LINE][ROW])
{
int n = 0;//我们在这里设置的棋盘是99的,有十个雷,所以当排查到第71个都不是雷的时候游戏就赢了
//玩家输入第二行第二列,对应的是我们数组中的第四行,第四列,即deposit[3][3]
int x, y;
printf("开始扫雷!\n");
while (1)
{
printf("请输入坐标行列数:");
scanf("%d %d", &x, &y);
char num='0';//记录雷数
if (deposit[x + 1][y + 1]=='#')
{
printf("您踩到地雷了,游戏结束,bye~~");
//打印出deposit给玩家看雷在哪
printboard(deposit[LINE][ROW]);
exit(1);
}
else
{
if (deposit[x][y] == '#')
{
num++;
}
else if (deposit[x][y + 1] == '#')
{
num++;
}
else if (deposit[x][y + 2] == '#')
{
num++;
}
else if (deposit[x + 1][y] == '#')
{
num++;
}
else if (deposit[x + 1][y + 2] == '#')
{
num++;
}
else if (deposit[x + 2][y] == '#')
{
num++;
}
else if (deposit[x + 2][y + 1] == '#')
{
num++;
}
else if (deposit[x + 2][y + 2] == '#')
{
num++;
}
n++;//表示成功排查掉一个
view[x + 1][y + 1] =num;
//将玩家选择的坐标周围的雷数呈现出来
printboard(view[LINE][ROW]);
//当所有坐标都排查完时跳出循环,游戏胜利
if (n == ((LINE - 2) * (ROW - 2) - NUM))
{
break;
}
}
}
printf("恭喜你,排除掉了所有的雷,游戏胜利!\n");
}
int main()
{
char view[LINE][ROW];//玩家真正排雷的地方
char deposit[LINE][ROW];//布置雷,在判断玩家是否有踩到雷时根据这个数组来判断
//先对数组进行初始化
resetarr(view,'');
resetarr(deposit,'0');
printboard(view);
printf("\n");
printboard(deposit);
deposit1(deposit[LINE][ROW]);
}
修改处见注释,供参考:
#define _CRT_SECURE_NO_WARNINGS 1
#define LINE 11//行数
#define ROW 11//列数
#define NUM 10//雷数
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void printmenu();//菜单
void introduce();//介绍说明
void printboard(char arr[LINE][ROW]);//打印棋盘
void resetarr(char arr[LINE][ROW],char ch);//初始化数组
void deposit1(char deposit[LINE][ROW]);//埋雷
void check(char deposit[LINE][ROW], char view[LINE][ROW]);//玩家排查雷时用到,显示每个坐标周围雷数(该坐标变成与雷数挂钩的数字),后面为输入的坐标
//源文件部分:
//#include”扫雷.h”
void resetarr(char arr[LINE][ROW], char ch)//初始化view,deposit
{
char n = '0'; char n1 = '0';
for (int i = 0; i < LINE; i++)
{
arr[0][i] = '0';
arr[i][0] = '0';
}
for (int i = 1; i < LINE; i++)
{
arr[1][i] = n;
arr[i][1] = n1;
n++;
n1++;
}
for (int i = 2; i < LINE; i++)
{
for (int j = 2; j < ROW; j++)
{
arr[i][j] = ch;
}
}
}
void printboard(char arr[LINE][ROW])
{
for (int i = 1; i < ROW; i++)
{
for (int j = 1; j < LINE; j++)
{
printf("%c ", arr[i][j]);
}
printf("\n");
}
}
void deposit1(char deposit[LINE][ROW])//LINE=11;ROW=11
{
int x = NUM;
srand((unsigned)time(NULL));
do
{
int line = rand() % 9 + 2;
int row = rand() % 9 + 2;
if (deposit[line][row] == '0')
{
deposit[line][row] = '#';
x--;
}
}while (x);
}
void check(char deposit[LINE][ROW], char view[LINE][ROW])
{
int n = 0;//我们在这里设置的棋盘是99的,有十个雷,所以当排查到第71个都不是雷的时候游戏就赢了
//玩家输入第二行第二列,对应的是我们数组中的第四行,第四列,即deposit[3][3]
int x, y;
printf("开始扫雷!\n");
while (1)
{
printf("请输入坐标行列数:");
scanf("%d %d", &x, &y);
char num='0';//记录雷数
if (deposit[x + 1][y + 1]=='#')
{
printf("您踩到地雷了,游戏结束,bye~~\n"); //修改
//打印出deposit给玩家看雷在哪
printboard(deposit); //printboard(deposit[LINE][ROW]);修改
return; //exit(1); 修改
}
else
{
if (deposit[x][y] == '#')
{
num++;
}
else if (deposit[x][y + 1] == '#')
{
num++;
}
else if (deposit[x][y + 2] == '#')
{
num++;
}
else if (deposit[x + 1][y] == '#')
{
num++;
}
else if (deposit[x + 1][y + 2] == '#')
{
num++;
}
else if (deposit[x + 2][y] == '#')
{
num++;
}
else if (deposit[x + 2][y + 1] == '#')
{
num++;
}
else if (deposit[x + 2][y + 2] == '#')
{
num++;
}
n++;//表示成功排查掉一个
view[x + 1][y + 1] =num;
//将玩家选择的坐标周围的雷数呈现出来
printboard(view); //printboard(view[LINE][ROW]); 修改
//当所有坐标都排查完时跳出循环,游戏胜利
if (n == ((LINE - 2) * (ROW - 2) - NUM))
{
break;
}
}
}
printf("恭喜你,排除掉了所有的雷,游戏胜利!\n");
}
int main()
{
char view[LINE][ROW];//玩家真正排雷的地方
char deposit[LINE][ROW];//布置雷,在判断玩家是否有踩到雷时根据这个数组来判断
//先对数组进行初始化
resetarr(view,' '); //修改
resetarr(deposit,'0');
printboard(view);
printf("\n");
printboard(deposit);
deposit1(deposit);//deposit1(deposit[LINE][ROW]); 修改
check(deposit, view); //修改
return 0;
}