标题:结果与想象的结果不同,关于扫雷游戏的想法
只看楼主
shenyun345
Rank: 2
等 级:论坛游民
帖 子:32
专家分:10
注 册:2009-7-13
结帖率:50%
 问题点数:0 回复次数:0 
结果与想象的结果不同,关于扫雷游戏的想法
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

很多都不对。
搜索更多相关主题的帖子: 扫雷 public 
2011-08-09 21:48



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-347187-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.104452 second(s), 8 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved