// // TTTBoard.java: track state of Tic Tac Toe game, both who owns what // square and whose turn it is // // Note this must be Serializable to allow returning through RMI. // import java.io.*; public class TTTBoard implements Serializable { private char[][] _owner; private char _turn; private boolean have_winner = false; public TTTBoard() { _owner = new char[3][3]; // for(int row = 0; row < 3; ++row) // _owner[row] = new char[3]; reset(); } public void reset() { for(int row = 0; row < 3; ++row) { for(int col = 0; col < 3; ++col) _owner[row][col] = ' '; } _turn = 'X'; have_winner = false; } public char owner(int col, int row) { return _owner[row][col]; } public String ownerStr(int col, int row) { char o = owner(col, row); if ( o == 'O' ) return "O"; else if ( o == 'X' ) return "X"; else return " "; } public boolean isOpen(int col, int row) { return !have_winner && owner(col, row) == ' '; } public char turn() { return _turn; } public void pick(int col, int row) { assert !have_winner && _owner[row][col] == ' '; _owner[row][col] = _turn; if ( _turn == 'X' ) _turn = 'O'; else _turn = 'X'; } public char winner() { have_winner = true; for(int col = 0; col < 3; ++col) { if ( _owner[0][col] != ' ' && _owner[0][col] == _owner[1][col] && _owner[1][col] == _owner[2][col] ) return _owner[0][col]; } for(int row = 0; row < 3; ++row) { if ( _owner[row][0] != ' ' && _owner[row][0] == _owner[row][1] && _owner[row][1] == _owner[row][2] ) return _owner[row][0]; } if ( _owner[1][1] != ' ' ) { if ( _owner[0][0] == _owner[1][1] && _owner[1][1] == _owner[2][2] ) return _owner[1][1]; if ( _owner[2][0] == _owner[1][1] && _owner[1][1] == _owner[0][2] ) return _owner[1][1]; } have_winner = false; return ' '; } }