1.初始方阵:笔者采用‘+’作为方阵的基础内容,此做法也导致了接下来关于此数组的任何操作都需要在字符型的背景下进行。
2.为了保证程序的健壮性,笔者加入了纠错系统使得玩家的错误输入值得以纠正。
3.在安排雷阵,笔者挑选了十个元素作为雷点,并以不同的值命名雷点和普通点,完全随机吗?并不是,笔者偷偷将外面两圈的雷点转移至内圈,主要目的是避免复杂的分类讨论。◕‿◕
4.为了避免强制类型转换带来的不确定性,笔者将周围雷数的返回值制作成判断语句给其他变量赋值。
5.当你踩雷后笔者选择不显示雷的位置,因为就只能玩一次了。
6.你可以添加的部分:
1.以时钟值代表种子以生成随机数组来实现真正的随机雷,传送门:利用时钟值来实现数组的真正随机 · 王赫辰/c语言 - 码云 - 开源中国 (gitee.com)
2.写出当元素位于外面两圈时n的判断条件。
3.在结束后打印出雷的位置,建议建立第三个数组,以数组二的值作为判断条件给新定义的变量赋值并打印。
7.代码:
#include
int main()
{
int a = 0;
int d = 0;
int e = 0;
for (a; a < 5; a++)
{
printf("扫雷\n开始请按1\n结束请按0\n");
int b = 0;
scanf_s("%d", &b);
if (b == 1)
{
char arr[8][8] = { '+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+',
'+','+','+','+','+','+','+','+' };
for (d = 0; d < 8; d++)
{
printf("%d", d);
for (e = 0; e < 8; e++)
{
printf("%c ", arr[d][e]);
}
printf("\n");
}
printf(" 0 1 2 3 4 5 6 7\n ");
int d = 0, e = 0;
int arr1[8][8] = { 0 };
arr1[2][2] = 1;
arr1[5][5] = 1;
arr1[4][2] = 1;
arr1[5][4] = 1;
arr1[4][2] = 1;
arr1[3][5] = 1;
arr[3][6] = 1;
arr[2][8] = 1;
int f = 0;
int g = 0;
int h = 0;
for (h; h < 100; h++)
{
printf("请按数字提示输入坐标\n");
scanf_s("%d %d", &f, &g);
if (arr1[f][g] == 0)
{
if (f == 0 || g == 0 || f == 7 || g == 7)
{
arr[f][g] = '0';
for (d = 0; d < 8; d++)
{
printf("%d", d);
for (e = 0; e < 8; e++)
{
printf("%c ", arr[d][e]);
}
printf("\n");
}
printf(" 0 1 2 3 4 5 6 7\n ");
int d = 0, e = 0;
}
else
{
int n = 0;
if (arr1[f - 1][g] == 1)
{
n = n + 1;
}
if (arr1[f - 1][g - 1] == 1)
{
n = n + 1;
}
if (arr1[f - 1][g + 1] == 1)
{
n = n + 1;
}
if (arr1[f + 1][g] == 1)
{
n = n + 1;
}
if (arr1[f + 1][g - 1] == 1)
{
n = n + 1;
}
if (arr1[f + 1][g + 1] == 1)
{
n = n + 1;
}
if (arr1[f][g - 1] == 1)
{
n = n + 1;
}
if (arr1[f][g + 1] == 1)
{
n = n + 1;
}
if (n == 0)
{
arr[f][g] = '0';
}
if (n == 1)
{
arr[f][g] = '1';
}
if (n == 2)
{
arr[f][g] = '2';
}
for (d = 0; d < 8; d++)
{
printf("%d", d);
for (e = 0; e < 8; e++)
{
{
printf("%c ", arr[d][e]);
}
}
printf("\n");
}
printf(" 0 1 2 3 4 5 6 7\n ");
int d = 0, e = 0;
}
}
if (arr1[f][g] == 1)
{
printf("你输了");
break;
}
}
}
else if (b == 0)
{
break;
}
else
{
printf("请重新输入\n");
int c = 0;
scanf_s("%d", &c);
b = c;
}
}
return 0;
}