从界面返回枚举

时间:2017-05-28 17:29:37

标签: java enums

我收到了一个使用Enums解决的项目,我有点卡住了。它是一个tic tac toe游戏,它具有存储在3x3网格表中的单元格位置的枚举,以及存储单元格状态(空,X或O)的枚举。另外,我有GameBoard的界面返回CellStategetCellState (CellLocation cellLocation);

我的任务是只编写Consultant接口,我无法更改提供给我的代码中的任何内容。 我很难在每一步之前检查Board的状态。

我的想法是X开始游戏,我使用for循环来执行步骤,在每一步,我都会检查if nrOfSteps%2==0。如果,我会将cellState设置为玩家O.检查我们是否处于获胜位置,是否已经获胜或是否有平局。如果没有,我会建议采取行动。 E.g。

if (nrOfSteps%2!=0){
    cState =CellState.OCCUPIED_BY_X;
      if (isWon(cState, board)){
        throw new IllegalStateException("Player X won!");
      } else if (draw(board, locations)){
        throw new IllegalStateException("No more empty fields!");
      } else
        for (int remainingCells = 0; remainingCells <9; remainingCells++) {
            if (board.equals(locations[remainingCells]) && 
            cState==CellState.EMPTY){
            availableCells[index] = locations[remainingCells];
            index++;
        }
        CellLocation cellToTake = availableCells[(int)(Math.random()*
        (availableCells.length-1))];
        return cellToTake;
}

现在,我的问题是我为isWon方法尝试了以下内容(部分代码现在仅验证第一行):

private boolean isWon(CellState player, GameBoard board){
if (board.equals(CellLocation.TOP_LEFT) && cState==player &&
    board.equals(CellLocation.TOP_CENTRE) && cState==player && 
    board.equals(CellLocation.TOP_RIGHT) && cState==player){
  return true;
}

return false;
}

但我已经意识到,当我在上面的代码中检查时,电路板的当前状态不能只等于一个单元。它显然不能等于3个不同的&#34;只有一个单元&#34; -s。而且我甚至不确定我是否可以通过此检查棋盘是否只有一个由玩家X占用的小区:

board.equals (CellLocation.TOP_LEFT) && cState==player

有人可以就如何将CellStateCellLocation合并到一个查询中提示吗?我应该使用数组吗?例如CellState[][]

2 个答案:

答案 0 :(得分:2)

您可以计算矩阵中单元格的总和(对于每列,行和对角线)。像这样:

applicationWillTerminate

答案 1 :(得分:1)

CellLocation枚举:

public enum CellLocation {
    /** The Cell in the top row and leftmost column */
    TOP_LEFT,

    /** The Cell in the top row and centre column */
    TOP_CENTRE,

    /** The Cell in the top row and rightmost column */
    TOP_RIGHT,

    /** The Cell in the centre row and leftmost column */
    CENTRE_LEFT,

    /** The Cell in the centre row and centre column */
    CENTRE_CENTRE,

    /** The Cell in the centre row and rightmost column */
    CENTRE_RIGHT,

    /** The Cell in the bottom row and leftmost column */
    BOTTOM_LEFT,

    /** The Cell in the bottom row and centre column */
    BOTTOM_CENTRE,

    /** The Cell in the bottom row and rightmost column */
    BOTTOM_RIGHT;
}

CellState枚举:

public enum CellState {
/** this cell is occupied by player X */
OCCUPIED_BY_X,

/** this cell is occupied by player O */
OCCUPIED_BY_O,

/** this cell is Empty */
EMPTY;

}