Skip to content

Commit e5d576d

Browse files
committed
improve anyMovesAvailable()
There is no need to iterate over the entire array every time a method is called. We can simple cache the number of free cells in a variable and decrease its value with each player's move.
1 parent e8c6a81 commit e5d576d

File tree

1 file changed

+3
-8
lines changed

1 file changed

+3
-8
lines changed

TicTacToe/src/game/Board.java

+3-8
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ public class Board {
1111
private Mark winningMark;
1212
private final int BOARD_WIDTH = 3;
1313
private boolean crossTurn, gameOver;
14+
private int availableMoves = BOARD_WIDTH * BOARD_WIDTH;
1415

1516
public Board() {
1617
board = new Mark[BOARD_WIDTH][BOARD_WIDTH];
@@ -42,6 +43,7 @@ public boolean placeMark(int row, int col) {
4243
|| isTileMarked(row, col) || gameOver) {
4344
return false;
4445
}
46+
availableMoves--;
4547
board[row][col] = crossTurn ? X : O;
4648
togglePlayer();
4749
checkWin(row, col);
@@ -131,14 +133,7 @@ private void togglePlayer() {
131133

132134
@SuppressWarnings("BooleanMethodIsAlwaysInverted")
133135
public boolean anyMovesAvailable() {
134-
for (int row = 0; row < BOARD_WIDTH; row++) {
135-
for (int col = 0; col < BOARD_WIDTH; col++) {
136-
if (!isTileMarked(row, col)) {
137-
return true;
138-
}
139-
}
140-
}
141-
return false;
136+
return availableMoves > 0;
142137
}
143138

144139
public Mark getMarkAt(int row, int column) {

0 commit comments

Comments
 (0)