public Move getComputerMove(BoardSymbol symbol) {
    BoardSymbol oppositeSymbol = symbol.getOppositeSymbol();
    for (int i = 0; i < board.length; i++) {
      for (int j = 0; j < board[i].length; j++) {
        if (board[i][j] == BoardSymbol.Empty) {
          Move move = new Move(i, j);
          if (isWinningMove(symbol, move)) {
            return move;
          }
        }
      }
    }

    for (int i = 0; i < board.length; i++) {
      for (int j = 0; j < board[i].length; j++) {
        if (board[i][j] == BoardSymbol.Empty) {
          Move move = new Move(i, j);
          if (isWinningMove(oppositeSymbol, move)) {
            return move;
          }
        }
      }
    }

    for (int i = 0; i < board.length; i++) {
      for (int j = 0; j < board[i].length; j++) {
        if (board[i][j] == BoardSymbol.Empty) {
          return new Move(i, j);
        }
      }
    }

    throw new BoardFullException();
  }