Source of Game.java


  1: 
  2: package tictactoe; 
  3: 
  4: import java.awt.*;
  5: import java.awt.event.*;
  6: import java.applet.Applet; 
  7: 
  8: public class Game extends Applet {
  9: 
 10:   public Game() {
 11:     players = new Player[2];
 12:     board = new Board(this, 3, 3); 
 13:     messageBar = new Label("Game begin."); 
 14:     setLayout(new BorderLayout()); 
 15:     add(board, BorderLayout.CENTER);  
 16:     add(messageBar, BorderLayout.SOUTH);  
 17: 
 18:     Panel controlPanel = new Panel();     
 19:     Button newGameButton = new Button("New Game");
 20:     Choice gameTypeChoice = new Choice(); 
 21:     gameTypeChoice.addItem("human-machine");
 22:     gameTypeChoice.addItem("human-human");
 23:     gameTypeChoice.addItem("machine-machine");
 24:     add(controlPanel, BorderLayout.NORTH); 
 25:     controlPanel.setLayout(new FlowLayout());
 26:     controlPanel.add(newGameButton); 
 27:     controlPanel.add(gameTypeChoice);
 28:     
 29:     newGameButton.addActionListener(new ActionListener() { 
 30:         public void actionPerformed(ActionEvent event) { 
 31:           newGame(); 
 32:         }
 33:       });
 34: 
 35:     gameTypeChoice.addItemListener(new ItemListener() { 
 36:         public void itemStateChanged(ItemEvent event)  {
 37:           if (event !=null &&
 38:               event.getStateChange() == ItemEvent.SELECTED) { 
 39:             setGameType((String) event.getItem());
 40:           }
 41:         }
 42:       });
 43:   }
 44: 
 45:   public void init() {
 46:     setGameType(getParameter("type"));
 47:     newGame(); 
 48:   }
 49: 
 50:   public void setGameType(String gameType) {
 51:     this.gameType = gameType;
 52:   }
 53: 
 54:   public void newGame() {
 55:     if (gameType.equals("human-human")) {
 56:       players[0] = new HumanPlayer(this, 1); 
 57:       players[1] = new HumanPlayer(this, 2);
 58:     } else if (gameType.equals("machine-machine")) {
 59:       players[0] = new MachinePlayer(this, 1); 
 60:       players[1] = new MachinePlayer(this, 2);
 61:     } else {
 62:       players[0] = new HumanPlayer(this, 1); 
 63:       players[1] = new MachinePlayer(this, 2);
 64:     }
 65: 
 66:     board.reset();
 67:     messageBar.setText("Game begin.");
 68:     players[0].start();
 69:     players[1].start();
 70:     players[0].setNext(players[1]);
 71:     players[1].setNext(players[0]);
 72:     players[0].turn(); 
 73:   }
 74: 
 75:   /** 
 76:    *  return false if it's an illegal move. 
 77:    */
 78:   public boolean makeMove(Move move) {
 79:     if (board.makeMove(move, turn.getId())) {
 80:       board.checkGame(turn.getId());
 81:       if (isOver()) {
 82:         int winner = board.getWinner(); 
 83:         if (winner >= 0) {
 84:           displayMessage("Player " + winner + " won."); 
 85:         } else {
 86:           displayMessage("It's a draw");
 87:         }
 88:         for (int n = 0; n < players.length; n++)
 89:           players[n].interrupt(); 
 90:       }
 91:       return true; 
 92:     } else {
 93:       return false; 
 94:     }
 95:   }
 96: 
 97:   public Player getPlayer() {
 98:     return turn; 
 99:   }
100: 
101:   public Board getBoard() {
102:     return board; 
103:   }
104: 
105:   public boolean isOver() {
106:     return board.isOver(); 
107:   }
108: 
109:   public void displayMessage(String msg) {
110:     messageBar.setText(msg); 
111:   }
112: 
113:   protected String gameType;
114:   protected Player players[];
115:   protected Player turn; 
116:   protected Board  board;
117:   protected Label  messageBar; 
118: 
119: 
120: 
121:   public static void main(String[] args) { 
122:     String gameType = "human-machine"; 
123:     if (args.length > 0) { 
124:       gameType = args[0];
125:     }
126:     Frame frame = new Frame("Tic-Tac-Toe");
127:     frame.setLayout(new BorderLayout());
128:     Game game = new Game();
129:     frame.add(game, BorderLayout.CENTER);
130:     game.setGameType(gameType); 
131:     game.newGame();
132:     frame.setSize(280, 300); 
133:     frame.addWindowListener(new WindowAdapter() { 
134:         public void windowClosing(WindowEvent e) { 
135:           System.exit(0);
136:         }
137:       });
138:     frame.show();     
139:   }
140: 
141: }
142: