您如果碰到坐标4,1中的雷情况则如下图,此区域的雷将自动移走
选择VIP 3,从此运气成分不在阻挡您前进的脚步.
在VI3的基础上,提供显示周围三圈非雷区域和探测服务,如图所示
现在您还怕啥啊,随便输入,1刀99级,一键扫雷. 包您HIGH翻天
只需要输入一个坐标,剩下的雷我们帮您排除.
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#include
#define ROWS 11
#define COLS 11
#define COUNT 8
#define SPREAD 8
#define NUM 8
char mine[ROWS][COLS];
char show[ROWS][COLS];
void InitBoard(char board[ROWS][COLS], int row, int col, char set);
void Display(char board[ROWS][COLS], int row, int col);
void SetMine(char board[ROWS][COLS]);
int Checkwin(char show[ROWS][COLS]);
void ClearMine(char board[ROWS][COLS], char show[ROWS][COLS]);
int CountMineNum(char board[ROWS][COLS], int x, int y);
void ShowMineNum(char board[ROWS][COLS], char show[ROWS][COLS], int x, int y);
#include"game.h"
void InitBoard(char board[ROWS][COLS],int row, int col, char set)
{
memset(board, set, row*col*sizeof(board[0][0]));
}
void Display(char Board[ROWS][COLS], int row, int col)
{
int i, j;
printf(" ");
for (int i = 1; i < col; i++)
{
printf(" %d", i);
}
printf("\n");
for (i = 1; i < row; i++)
{
printf("%d ", i);
for (j = 1; j < row; j++)
{
printf("%c ", Board[i][j]);
}
printf("\n");
}
}
void SetMine(char Board[ROWS][COLS])
{
int i, j;
int MineNum = COUNT;
while (MineNum)
{
i = rand() % 9 + 1;
j = rand() % 9 + 1;
if ('0' == Board[i][j])
{
Board[i][j] = '1';
MineNum--;
}
}
}
void ClearMine(char board[ROWS][COLS],char show[ROWS][COLS])
{
int x, y;
int MineNum = COUNT;
printf("爹,请输入扫雷坐标\n");
while (1)
{
scanf("%d%d", &x, &y);
if ('0' == board[x][y])
{
MineNum--;
ShowMineNum(mine, show, x, y);
show[x][y] = CountMineNum(mine,x,y)+'0';
Display(show, 10, 10);
if (COUNT==Checkwin(show))
{
printf("扫雷完毕,爹,您赢了~\n");
break;
}
printf("您继续\n");
printf("输入下一次目标\n");
}
//保证第一次不会被炸死而且会把这颗雷移到别的地方//这部分保证函数的逻辑顺序
if ('1' == board[x][y] && COUNT == MineNum)
{
board[x][y] = '0';
while (1)
{
int x1 = rand() % 9 + 1;
int y1 = rand() % 9 + 1;
if (x1!=x && y!=y1 && '0' == board[x1][y1])
{
board[x1][y1] = '1';
break;
}
}
ShowMineNum(mine, show, x, y);
show[x][y] = CountMineNum(mine, x, y)+'0';
Display(show, 10, 10);
if (COUNT == Checkwin(show))
{
printf("扫雷完毕,爹,您赢了~\n");
break;
}
printf("您继续\n");
printf("输入下一次目标\n");
}
else if ('1' == board[x][y])
{
show[x][y] = board[x][y];
Display(show, 10, 10);
printf("您死了");
break;
}
}
}
int CountMineNum(char board[ROWS][COLS], int x,int y)
{
//统计周围一圈的雷 坐标变换在-SPREAD 到+SPREAD之间
int sum = 0;
int i , j ;
for (i = -NUM; i <= NUM; i++)
{
for (j = -NUM; j <= NUM; j++)
{
if ((x + i) <= 9 && (y + j) <= 9 && (x + i) >= 1 && (y + j) >= 1)
{
if ('1' == board[x + i][y + j])
{
sum++;
}
}
}
}
return sum;
}
void ShowMineNum(char board[ROWS][COLS], char show[ROWS][COLS] ,int x, int y)
{
int i , j ;
//展开周围一圈的非雷 坐标变换在 -SPREAD到+SPREAD之间
for (i = -SPREAD; i <= SPREAD; i++)
{
for (j = -SPREAD; j <= SPREAD; j++)
{
if (board[x + i][y + j] != '1')
{
show[x + i][y + j] = board[x + i][y + j];
}
}
}
}
int Checkwin(char show[ROWS][COLS])
{
int i, j;
int count = 0;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= 9; j++)
{
if ('*' == show[i][j])
{
count++;
}
}
}
return count;
}