public Move getMove(Board board) {
        try {
            color = GameManager.getInstance().getPlayerColor(this);
        } catch (UnknownPlayerException e) {
            throw new RuntimeException(e);
        }

        Integer columnForWin = getColumnForWin(board);
        if (columnForWin != null)
        {
            return new Move(columnForWin);
        }

        Integer columnForBlock = getColumnForBlock(board);
        if (columnForBlock != null)
        {
            return new Move(columnForBlock);
        }

        int column = getRandomColumn();
        while (!board.canPlay(column))
        {
            column = getRandomColumn();
        }

        return new Move(column);
    }