目标实现
随机生成雷在不同的位置,并且显示雷周围的数字,这两点是首要解决的问题,涉及算法。解决了这两个问题基本就可以了,再稍加点细节就可以玩扫雷啦。
Java代码
public static void main(String[] args) {
String a[][] = new String[10][10];
int forrandom[] = new int[85];
for (int i = 0; i < 9; i++) {// 初始化数组
for (int j = 0; j < 9; j++) {
a[i][j] = "0";
}
}
for (int i = 0; i < 81; i++) {
forrandom[i] = i;// 0-80
}
for (int i = 0; i < 200; i++) {// 交换
int x = (int) (Math.random() * 81);// 0-0.9 0-80
int y = (int) (Math.random() * 81);
int t = forrandom[x];
forrandom[x] = forrandom[y];
forrandom[y] = t;
}
// 结果前10个
for (int i = 0; i < 10; i++) {
System.out.print(forrandom[i] + " ");
}
System.out.println();
//0 1 2 3 4 5 6 7 8 i=0 对9取余=0
//9 10 11 12 13 14 15 16 17 i=1 对9 =1
//18 19 20 21 22 23 24 25 26 i=2
for (int k = 0; k < 10; k++) {
int x = forrandom[k] / 9;
int y = forrandom[k] % 9;
a[x][y] = "@";
}
// (0,0)(0,1)(0,2)(0,3)..数组下标
// (1,0)(1,1)(1,2)(1,3)..
// (2,0)(2,1)(2,2)(2,3)..
// (3,0)(3,1)(3,2)(3,3)..
// ..
// (-1,-1)(-1,0)(-1,1)(0,-1)(0,1)(1,-1)(1,0)(1,1)
int x[] = { -1, -1, -1, 0, 0, 1, 1, 1 };
int y[] = { -1, 0, 1, -1, 1, -1, 0, 1 };// 与数组相加得到上下左右等坐标
// 找周围
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
int count = 0;
if (a[i][j] != "@") {// 不能为雷
for (int k = 0; k < 8; k++) {
int xx = i + x[k];
int yy = j + y[k];
if (xx >= 0 && yy >= 0) {// 不能出界
if (a[xx][yy] == "@") {
count = count + 1;// 累计这八个方位的雷总数
}
}
}
a[i][j] = count + "";// 输出String型int+""
}
}
}
// 打印输出
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
System.out.print(a[i][j]);
}
System.out.println();
}
}`
随机生成的雷的位置:
得到的扫雷图,@表示雷:
第一次写博客,比较粗糙,希望对你有所帮助