如何用三个项目描述一个状态

时间:2018-11-27 11:31:31

标签: java

我正在用Java创建棋盘游戏井字游戏。

一个单元格将具有三种状态:空,X或O。

用Java表示此最佳做法是什么?我应该创建自己的Cell类还是仅使用整数(0/1/2)来表示这三种状态?如果它具有两个状态,那么我可以使用boolean来表示这两个状态,是否为具有三个状态的事物定义了类似的类?

6 个答案:

答案 0 :(得分:11)

我将为此使用一个枚举:

enum CellState {
    EMPTY,
    X,
    O
}

然后在您的代码中:

public static void main(String[] args) {
    CellState[][] cellStates = new CellState[3][3];
    cellStates[0][0] = CellState.X;

    // Do other stuff

}

我只是将板结构定义为CellState[][]为例,但这可以是任何东西。

答案 1 :(得分:3)

使用OO语言时,最重要的一点是对象对行为进行建模,并在可能的情况下包含实现行为所需的数据。行为是对象的行为,而不是对象的行为。

因此,除非有没有理由要求您未说明,否则该单元本身没有任何行为,这只是玩家标记的地方。

因此,您可以拥有一个简单的标记阵列,两个玩家都可以更新,其枚举具有三个值,或者您可以让每个玩家更新自己制作的标记数据,在这种情况下,每个玩家都可以拥有一个布尔数组或短位掩码以指示其运行。在后一种情况下,每个玩家仅更改自己的“状态”,并可以测试其获胜条件,而不是共享状态-唯一的共享是他们必须询问另一位玩家所选单元格是否有效。这是否是“最佳实践”取决于您对设计的严格要求-对于这样一个简单的问题,您可以用COBOL编写,而用户会很高兴。

答案 2 :(得分:2)

我会使用一个枚举:

public enum CellState {
    EMPTY,
    X,
    O;
}

还有一个单元格类,其字段类型为CellState

答案 3 :(得分:2)

您可以使用包含三个值的枚举,例如:

public enum CellState {
    EMPTY,
    X,
    O
}

并以这种方式使用它:

board.setCell(cellposition, CellState.X);

答案 4 :(得分:2)

有多种方法,但在这种情况下,我更喜欢使用枚举来表示您的状态。

public enum State {
    EMPTY,
    X,
    O
}

然后您的单元格类将如下所示。

public class Cell {
    private State state;

    public Cell(State state) {
        this.state = state;
    }

    public State getState {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }

}

答案 5 :(得分:-8)

另一种方法是只使用Boolean对象并将null用作第三状态。

Boolean state = null; // => empty state
state = Boolean.TRUE // => X state
state = Boolean.FALSE // => O state