⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gamemodel.java

📁 windows自带的扫雷游戏
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            }
        }
        //右下
        if ( (x + 1) < xx && (y + 1) < yy) {
            if (blockArray[x + 1][y + 1].isOpened() == false) {
                recursionOpen( (x + 1), (y + 1));
            }
        }
    }

//    public void leftPress
    public void mark(int x, int y) {
        BlockModel bm = blockArray[x][y];
        if (!bm.isOpened()) {
            int currentmark = bm.getMark();
            if (currentmark == BlockModel.UnopenMark) { //如果没有标记
                bm.setMark(BlockModel.FlagMark); //标记为旗子
                mineleaved--;
                mineleaveListener.mineLeaveCountChange(mineleaved);
                if (bm.isMine()) {
                    realmineleaved--;
                }
                else {
                    wrongOptionSet.add(new Integer(y * xx + x));
                }
                //----
                //System.out.println(realmineleaved+" "+mineleaved);
                if (realmineleaved == 0 && mineleaved == 0) {
                    timer.stop();
                    gameTimeListener.gameTimeEnd(0);
                    //通知游戏成功结束
                }
            }
            else
            if (currentmark == BlockModel.FlagMark) { //如果已经是旗子
                if (gameConfigure.isUseMark() == true) { //游戏使用标记
                    bm.setMark(BlockModel.QuestionMark); //标为问号
                }
                else {
                    bm.setMark(BlockModel.UnopenMark);
                }
                mineleaved++;
                mineleaveListener.mineLeaveCountChange(mineleaved);
                if (bm.isMine()) {
                    realmineleaved++;
                }
                else {
                    wrongOptionSet.remove(new Integer(y * xx + x));
                }
                if (realmineleaved == 0 && mineleaved == 0) {
                    timer.stop();
                    gameTimeListener.gameTimeEnd(0);
                    //通知游戏成功结束
                }

            }
            else
            if (currentmark == BlockModel.QuestionMark) {
                bm.setMark(BlockModel.UnopenMark);
            }
        }
    }

    public void numberCheckOpen(int x, int y) {
        BlockModel bm = blockArray[x][y];
        if (bm.isOpened() && !bm.isMine()) {
            int number = bm.getNumber();
            int aroundflag = getAroundFlag(x, y);
            if (number == aroundflag) {
                openAroundblock(x, y);
            }
        }
    }

    private void openAroundblock(int x, int y) {
        BlockModel bm = null;
        //左上
        if ( (x - 1) >= 0 && (y - 1) >= 0) {
            bm = blockArray[x - 1][y - 1];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x - 1, y - 1);
                }
            }
        }
        //上
        if ( (y - 1) >= 0) {
            bm = blockArray[x][y - 1];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x, y - 1);
                }
            }

        }
        //右上
        if ( (x + 1) < xx && (y - 1) >= 0) {
            bm = blockArray[x + 1][y - 1];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x + 1, y - 1);
                }
            }

        }
        //左
        if ( (x - 1) >= 0) {
            bm = blockArray[x - 1][y];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x - 1, y);
                }
            }

        }
        //右
        if ( (x + 1) < xx) {
            bm = blockArray[x + 1][y];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x + 1, y);
                }
            }

        }
        //左下
        if ( (x - 1) >= 0 && (y + 1) < yy) {
            bm = blockArray[x - 1][y + 1];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x - 1, y + 1);
                }
            }

        }
        //下
        if ( (y + 1) < yy) {
            bm = blockArray[x][y + 1];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x, y + 1);
                }
            }

        }
        //右下
        if ( (x + 1) < xx && (y + 1) < yy) {
            bm = blockArray[x + 1][y + 1];
            if (bm.isOpened() == false) {
                if (! (bm.getMark() == 10 && bm.isMine())) {
                    open(x + 1, y + 1);
                }
            }

        }

    }

    private int getAroundFlag(int x, int y) {
        int count = 0;
        if ( (x - 1) >= 0 && (y - 1) >= 0) {
            if (blockArray[x - 1][y - 1].isOpened() == false) {
                if (blockArray[x - 1][y - 1].getMark() == 10) {
                    count++;
                }
            }
        }
        //上
        if ( (y - 1) >= 0) {
            if (blockArray[x][y - 1].isOpened() == false) {
                if (blockArray[x][y - 1].getMark() == 10) {
                    count++;
                }

            }

        }
        //右上
        if ( (x + 1) < xx && (y - 1) >= 0) {
            if (blockArray[x + 1][y - 1].isOpened() == false) {
                if (blockArray[x + 1][y - 1].getMark() == 10) {
                    count++;
                }

            }

        }
        //左
        if ( (x - 1) >= 0) {
            if (blockArray[x - 1][y].isOpened() == false) {
                if (blockArray[x - 1][y].getMark() == 10) {
                    count++;
                }

            }

        }
        //右
        if ( (x + 1) < xx) {
            if (blockArray[x + 1][y].isOpened() == false) {
                if (blockArray[x + 1][y].getMark() == 10) {
                    count++;
                }

            }

        }
        //左下
        if ( (x - 1) >= 0 && (y + 1) < yy) {
            if (blockArray[x - 1][y + 1].isOpened() == false) {
                if (blockArray[x - 1][y + 1].getMark() == 10) {
                    count++;
                }

            }

        }
        //下
        if ( (y + 1) < yy) {
            if (blockArray[x][y + 1].isOpened() == false) {
                if (blockArray[x][y + 1].getMark() == 10) {
                    count++;
                }

            }

        }
        //右下
        if ( (x + 1) < xx && (y + 1) < yy) {
            if (blockArray[x + 1][y + 1].isOpened() == false) {
                if (blockArray[x + 1][y + 1].getMark() == 10) {
                    count++;
                }

            }
        }
        return count;

    }

    public BlockModel[][] getBlocks() {
        return blockArray;
    }

    public int getMineleaved() {
        return mineleaved;
    }

    public void setGameTimeListener(TimeListener listener) {
        this.gameTimeListener = listener;
    }

    public void setMineLeaveCountListener(MineLeaveCountListener listener) {
        this.mineleaveListener = listener;
    }

    public int getGametime() {
        return gametime;
    }

    private Set getPositions(int positionCount, int maxPositionNumber,
                             int reserved) {
        Random rand = new Random();
        Set set = new HashSet();
        while (set.size() != positionCount) {
            int t = rand.nextInt(maxPositionNumber);
            if (t == reserved) {
                continue;
            }
            set.add(new Integer(t));
        }
        return set;
    }

    /**
     * 实现接口
     */
    public void exitGame() {
        gameConfigure.savetoconfigure();
        System.exit(0);
    }

    public void setGameLevel(int level) {
        gameConfigure.setLevel(level);


    }

    public void setUseMark(boolean isusemark) {
        gameConfigure.setUseMark(isusemark);
    }

    public void startGame() {
if(timer!=null)        timer.stop();
        initlistener.gameinit();
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -