私はEnumを使用する解決プロジェクトを受け取りました。これは、3x3のグリッドテーブルにセルの位置を格納する列挙型と、セルの状態(空、X、またはO)を格納する列挙型を持つtic tac toeゲームです。 getCellState (CellLocation cellLocation);
enumを返すインターフェイスからデータを取得する
マイタスクのみConsultant
インタフェースを記述することであり、私が私に与えられたコードには何も変更することはできません:プラス私はCellState
返しGameBoard
ためのインタフェースを持っています。 私は各ステップの前にBoard
のステータスをチェックするのに苦労しています。
私の考えは、Xがゲームを開始し、私はステップのためにfor
ループを使用し、各ステップで、私はif nrOfSteps%2==0
をチェックしました。 がの場合、私はcellState
をプレーヤーOに設定しました。勝った場合、または引き分けがある場合は、勝利位置にいるかどうかを確認してください。もしそうでなければ、私は動きを提案するでしょう。 など。
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;
}
しかし、私は、現在の状況と認識しています私は上記のコードをチェックしているので、ボードは1つのセルと同等ではありませんでした。そして、明らかに、3つの異なる「ただ1つの細胞」-sに等しいことはできません。
board.equals (CellLocation.TOP_LEFT) && cState==player
誰かが私は1つにCellState
とCellLocation
の両方を組み込むことができますどのようにヒントを与えてもらえ:ボードは、このことにより、プレイヤーXによって占められる唯一つのセルがあった場合、私がチェックすることができればと私もわかりませんクエリ?配列を使うべきですか?例えばCellState[][]
?
おかげで、このように。 私はあなたのコードを試して、それを少し変更しました。なぜなら、私が書かなければならないインターフェースはnullを返す "Public CellLocation suggest(GameBoard gameBoard)"メソッドを持つからです。 それはmainメソッドを持っていないし、私のためにあらかじめ書かれたJUnitテストは、この提案メソッドを見ています。ここからタスクを委任する必要があります。 しかし、この方法では、forループ内のenumをcellLocationに変換して1つの場所だけを返すことはできません。 getCellOwnerメソッドが変数に解決できないというエラーが表示されています。 – Vero
CellStateクラスとCellLocationクラスを表示できますか? –
コメントに投稿できないので、私はaswerとして投稿しました。ありがとう。 – Vero