@Override public List<DiscreteGameState> availableStates() { List<Position> availableMoves = board.getOpenPositions(); List<DiscreteGameState> availableStates = new ArrayList<DiscreteGameState>(availableMoves.size()); for (Position move : availableMoves) { TicTacToeGameState newState = new TicTacToeGameState(this); newState.play(move.getRow(), move.getCol()); newState.switchPlayer(); availableStates.add(newState); } return availableStates; }