blockmodel.java

来自「一个完全实现的扫雷程序」· Java 代码 · 共 124 行

JAVA
124
字号
package mine.model;

import java.util.Observable;

public class BlockModel
    extends Observable {
    public final static int QuestionMark = 13; //标记为3种,旗子,问号,
    public final static int FlagMark = 10;
    public final static int UnopenMark = 9;
    private int xPos;
    private int yPos; //位置坐标
    private boolean opened; //此块是否已经开启,如果开启,则不能再进行设置
    private int mark = BlockModel.UnopenMark; //标记的类型,分为旗子和问号,如果开启,则不能设置
    private boolean mine; //有两种类型,不是雷,就是数字
    private boolean wrongMineOpinion; //是否含有错误推断
    private int number; //如果是数字,则一不定不是雷,雷不能取得值
    private boolean onmine;
    private boolean isdown = false; //用于处理鼠标按下松开的事件
    public BlockModel() {
    }

    public void setdown(boolean down) {
        if (!opened && mark == BlockModel.UnopenMark && isdown != down) {
            //如果没有打开,并未做过标记才进行设置
            isdown=down;
            setChanged();
            notifyObservers();
        }
    }
    public boolean isdown(){
        return isdown;
    }

    public BlockModel(int x, int y) {
        xPos = x;
        yPos = y;
    }

    public int getXPos() {
        return xPos;
    }

    public int getYPos() {
        return yPos;
    }

    public boolean isOpened() {
        return opened;
    }

    public void setOpened(boolean opened) {
        //如果不一致,再进行通知
        if (this.opened != opened) {
            this.opened = opened;
            setChanged();
            notifyObservers();
        }
    }

    public int getMark() {
        if (opened) {
            throw new GameRuntimeException("已经打开,不能再取得标记值");
        }
        return mark;
    }

    public void setMark(int mark) {
        if (opened) {
            throw new GameRuntimeException("已经打开,不能再设置标记值");
        }
        if (this.mark != mark) {
            this.mark = mark;
            setChanged();
            notifyObservers();
        }
    }

    public boolean isMine() {
        return mine;
    }

    public void setMine(boolean mine) {
        this.mine = mine;
    }

    public boolean isWrongMineOpinion() {
        return wrongMineOpinion;
    }

    public void setWrongMineOpinion(boolean wrongMineOpinion) {
        this.wrongMineOpinion = wrongMineOpinion;
    }

    public int getNumber() {
        if (mine) {
            throw new GameRuntimeException("已经是雷,不可获得数字值");
        }
        return number;
    }

    public void setNumber(int number) {
        if (mine) {
            throw new GameRuntimeException("已经是雷,不设置数字值");
        }
        this.number = number;
    }

    public boolean isOnmine() {
        return onmine;
    }

    public void setOnmine(boolean onmine) {
        if (!mine) {
            throw new GameRuntimeException("不是雷,怎么可能踩上呢");
        }
        this.onmine = onmine;
    }

    public int hashCode() {
        return (xPos+"-"+yPos).hashCode();
    }

}

⌨️ 快捷键说明

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