protected Color play() throws Exception {
        do {
            for (Player p : players) {
                p.displayBoard();//probably should change leave it for now
            }
            Move move = players[toMove].getMove();
            if (move == null) {
                System.out.println(state);
                isGameOver();
                System.out.println("game over " + isGameOver());
            }
            while (!rules.isLegal(state, move)) {
                try {
                    players[toMove].reportIllegalMove();
                } catch (Exception ex) {
                    System.err.println("AAAAHHH!!!! AI has gone CRAZY!!!!"
                            + move.toString() + "\n" + state);
                    //                   System.out.println(state);
                    throw ex;
                }
                move = players[toMove].getMove();
            }

            for (Player p : players) {
                p.reportMove(move);
            }
            processMove(move);
            toMove = (toMove + 1) % 2;
        } while (!isGameOver());
        for (Player p : players) {
            p.displayBoard();
        }
        return declareWinner();
    }