/** Implement the run() method for the thread */ public void run() { try { // Create data input and output streams DataInputStream fromPlayer1 = new DataInputStream(player1.getInputStream()); DataOutputStream toPlayer1 = new DataOutputStream(player1.getOutputStream()); DataInputStream fromPlayer2 = new DataInputStream(player2.getInputStream()); DataOutputStream toPlayer2 = new DataOutputStream(player2.getOutputStream()); // Write anything to notify player 1 to start // This is just to let player 1 know to start toPlayer1.writeInt(1); // Continuously serve the players and determine and report // the game status to the players while (true) { // Receive a move from player 1 int row = fromPlayer1.readInt(); int column = fromPlayer1.readInt(); int yCoordinate = game.insert("[X]", column); // Check if Player 1 wins if (game.isWinner(column, yCoordinate, "[X]")) { // if a winner is found toPlayer1.writeInt(PLAYER1_WON); toPlayer2.writeInt(PLAYER1_WON); sendMove(toPlayer2, row, column); break; // Break the loop } else { toPlayer2.writeInt(CONTINUE); sendMove(toPlayer2, row, column); } // Receive a move from Player 2 row = fromPlayer2.readInt(); column = fromPlayer2.readInt(); yCoordinate = game.insert("[O]", column); // Check if Player 2 wins if (game.isWinner(column, yCoordinate, "[O]")) { // if a winner is found toPlayer1.writeInt(PLAYER2_WON); toPlayer2.writeInt(PLAYER2_WON); sendMove(toPlayer1, row, column); break; // Break the loop } else if (game.boardIsFull()) { // Check if all cells are filled toPlayer1.writeInt(DRAW); toPlayer2.writeInt(DRAW); sendMove(toPlayer1, row, column); break; } else { // Notify player 2 to take the turn toPlayer1.writeInt(CONTINUE); // Send player 1's selected row and column to player 2 sendMove(toPlayer1, row, column); } } } catch (IOException ex) { System.err.println(ex); } }
/** Called every tick, updates all objects on local gameboard */ public void Update() { gb.Update(); }