1:初始化二维数组。
(1)建立一个全局的二维数组。
#define ROW 10//行
#define COL 10//列
int map[ROW][COL];
//初始化二维数组
for(int i = 0;i < ROW;i++)
{
for(int j = 0;j < COL;j++)
{
map[i][j] = 0;
}
}
(2)接下来就是布置雷,10行10列的二维数组我们布置10个雷,我们用-1表示雷,NUM表示雷的个数。
#define NUM 10
//布置雷我们使用while函数。
//这里我们用到随机数。
/*
int r = rand() % ROW; // r的范围在0-9。
int c = rand() % COL; //c的范围在0-9。
*/
int n = 0;//首先让n等于0
while(n<NUM)//当n小于10时继续布雷。
{
int r = rand() % ROW + 1;//r的范围在0-9。
int c = rand() % COL + 1;//c的范围在0-9。
if(map[r][c] == 0)//判断map[r][c]是否没雷,没雷就布雷。
{
map[r][c] = -1;
n++;
}
}
(3)雷布置完后就是跟据雷的分布 ,填充其他地方雷的数据。
例如:
0 1 1 1 0
0 1 -1 2 0
0 1 2 -1 1
0 0 1 1 1
这里我们需要遍历九宫格,
1 1 1
1 -1 1
1 1 1
我们会发现最边上的不好遍历因为它不是完整的九宫格,这是我们就需要扩大棋盘,来添加一个辅助区:
这样最边上的雷周围数据我们也可以使用九宫格的方式去填充数据。
由此我们在上面可以将行和列定义为:
#define ROW 12
#define COL 12
随机数就必须初始化为:
int r = rand() %( ROW - 1)+ 1;//r的范围在1-10。
int c = rand() % (COL - 1)+ 1;//c的范围在1-10。
我们也可以:
#define ROW 10
#define COL 10
int r = rand() % ROW + 1;//1--ROW
int c = rand() % COL + 1;//1--C0L
//下面我们就使用九宫格的方式去填充数据:
for(int i = 1;i <= ROW;i++)
{
for(int j = 1;j <= COL;j++)
{// 遍历二维数组
if(map[i][j] != -1)//找到不为雷的元素
{
//遍历九宫格
for(int m=i-1;m<=i+1;m++)
{
for(int n=j-1;n<=j+1;n++)
{
if(map[m][n]==-1)
{
map[i][j]++;
}
}
}
}
}
}
//打印
int i,j;
for(i = 1;i < ROW;i++)
{
for(j = 1;j < COL;j++)
{
printf("%2d",map[i][j]);
}
printf("\n");
}
然后打印出来,打印的时候不需要打印辅助区:
第一次运行:
第二次运行:
后期我会给大家分享加密以及用户玩游戏的过程,欢迎大家来微信公众号:Q的编程世界,回复Q.扫雷,即可得到扫雷完整代码。