结果与想象的结果不同,关于扫雷游戏的想法
public class Shaolei {/*
* 只是一点思路,做一个模型遇到问题,所以还没有用到图形界面
*
* 想的是一个9*9的扫雷,但是后面设置每个坐标对应的数字时候,要用到
* (i-1)(i+1)之类的,就要加上一些判断语句来判断,避免数组越界。
* 不想麻烦,就声明了11*11的二维数组了,然后只显示1到9之间的内容。
*/
static int[][] s = new int[11][11]; //声明11*11滴数组
//将数组初始化,值全部为0
public static void main(String[] args) {
for (int i = 0; i < 11; i++) {
for (int j = 0; j < 11; j++) {
s[i][j] = 0;
}
}
setS(); //调用随机设置雷,暂时就用数字9代替雷吧
//设置每个坐标上面对应的数字
for (int i = 1; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (s[i][j] != 9) {
s[i][j] = jishu(i, j); //调用方法
}
}
}
//显示
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9; j++) {
System.out.print(s[i][j] + " ");
}
System.out.println();
}
}
//随即产生雷,雷用数字9代替
public static void setS() {
int n = 0;
while (n < 10) {
int i = (int) (9 * Math.random()) + 1;
int j = (int) (9 * Math.random()) + 1;
if (s[i][j] == 9) {
n--;
} else {
s[i][j] = 9;
n++;
}
}
}
//设置每个坐标对应的数字的方法
public static int jishu(int i, int j) {
int count = 0;
if (s[i - 1][j - 1] == 9) {
count += 1;
}
if (s[i + 1][j - 1] == 9) {
count += 1;
}
if (s[i][j - 1] == 9) {
count += 1;
}
if (s[i + 1][j - 1] == 9) {
count += 1;
}
if (s[i - 1][j] == 9) {
count += 1;
}
if (s[i - 1][j + 1] == 9) {
count += 1;
}
if (s[i + 1][j] == 9) {
count += 1;
}
if (s[i + 1][j + 1] == 9) {
count += 1;
}
s[i][j] = count;
return count;
}
}
自己认为思路没有错,但是结果不是想象的。大家帮忙看些,谢谢找出问题所在。
下面是我运行的一次结果,
0 0 0 0 1 1 2 1 1
0 0 0 0 0 9 3 3 9
1 2 0 0 1 2 9 9 2
9 2 1 2 0 1 9 3 1
1 1 9 1 0 1 1 1 0
0 1 1 1 0 0 0 1 1
1 2 0 0 0 0 1 1 9
9 1 0 0 0 0 0 9 2
1 1 0 0 0 0 1 1 1
很多都不对。