/*
 * GameController.java
 *
 * The main program for the TicTacToe game
 *
 * Nadeem Abdul Hamid - Fall 2004 - CSC120A
 *
 */


public class GameController {
    
    public static void main(String[] args) {
        GameController game = new GameController();
        game.runGame();
    }
    
    public void runGame() {
        System.out.println("\n\n\n     Welcome to...\n");
        System.out.println("\n  --- TicTacToe!!! --- \n");
        
        Board board = new Board();

        System.out.print("\nGreetings human! Please enter your name: ");
        String hname = Keyboard.readString();

        HumanPlayer h = new HumanPlayer('X', hname);
        ComputerPlayer c = new ComputerPlayer('O');

        int turn = 1;
        
        int turncontrol = -1;
        while (turncontrol!=0 && turncontrol!=1) {
            System.out.print("Who goes first? (0=" + h.getName() 
			     + ", 1=" + c.getName() + "): ");
            turncontrol = Keyboard.readInt();
        }
        
        while (!board.gameOver()) {
            boolean goodmove = false;
            if (turn%2 == turncontrol) {     
                System.out.println("\n" + c.getName() 
                            + "'s (" + c.getMark() + ") turn...\n");
                int pos = c.decideMove(board);
                //System.out.println("Marking X: " + pos);
                goodmove = board.setMark(pos, c.getMark());
            } else {
                System.out.println("\n" + h.getName() 
                            + "'s (" + h.getMark() + ") turn...\n");
                int pos = h.decideMove(board);
                //System.out.println("Marking O: " + pos);
                goodmove = board.setMark(pos, h.getMark());
            }
            
            if (goodmove) 
                turn ++; 
            else 
                System.out.println("\nInvalid move. Please try again.\n");
        }
        
        System.out.println("\n" + board + "\n");
        if (board.isWin(c.getMark()))
            System.out.println(c.getName() + " wins!");
        else if (board.isWin(h.getMark()))
            System.out.println(h.getName() + " wins!");
        else
            System.out.println("Tie game!");
    }
    
}