@Override
    Move makeMove() {
        Move m = null;
        if (!_started) {
            while (true) {
                String s = getGame().getMove();
                if (s.equals("p")) {
                    break;
                } else {
                    m = Move.create(s);
                    if (getBoard().isLegal(m)) {
                        return m;
                    } else {
                        getBoard().display.update((Move) null);
                    }
                }

            }
        }

        ArrayList[] legalMoves = {new ArrayList<Move>(), new ArrayList<Move>(),
            new ArrayList<Move>()};
        Iterator<Move> i = getBoard().legalMoves();
        while (i.hasNext()) {
            Move legalMove = i.next();
            legalMoves[1 - evaluate(legalMove, getBoard(), 3, side())].add(
                    legalMove);
        }
        for (ArrayList<Move> moves : legalMoves) {
            if (moves.size() > 0) {
                m = moves.get(getGame().getRandomSource()
                        .nextInt(moves.size()));
                break;
            }
        }
        if (m == null) {
            return null;
        }

        System.out.println(side().toString() + "::" + m.toString());
        return m;
    }