我正在用Java创建棋盘游戏井字游戏。
一个单元格将具有三种状态:空,X或O。
用Java表示此最佳做法是什么?我应该创建自己的Cell类还是仅使用整数(0/1/2)来表示这三种状态?如果它具有两个状态,那么我可以使用boolean来表示这两个状态,是否为具有三个状态的事物定义了类似的类?
答案 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