/** * Starts a game of TicTacToe * * @return */ private Player startGame() { display.out(board.toString()); Player winningPlayer = new Player(0, R.none); Player currentPlayer = player1; boolean isPlaying = true; while (isPlaying) { if (!currentPlayer.isAI()) { board.addPlayerAt(playerMove(), currentPlayer); } else { try { Thread.sleep(1000); } catch (Exception e) { System.out.print(e.getMessage()); } board.addPlayerAt(compMove(), currentPlayer); } if (board.testVictory()) { isPlaying = false; winningPlayer = currentPlayer; display.out(String.format(R.winnerIs, winningPlayer.getName())); } else if (testDraw()) { isPlaying = false; display.out(R.draw); } else { currentPlayer = (currentPlayer == player1) ? player2 : player1; } display.out(board.toString()); } return winningPlayer; }
/** * Ask and returns for player for a move * * @return players move */ private int playerMove() { display.out(R.playerMove); int move = -1; while (move == -1) { try { move = Integer.parseInt(br.readLine()); } catch (Exception e) { System.out.println(e.getMessage()); } if ((move < 1 || move > 9) || !board.isEmptyAt(move - 1)) { display.out(R.invalidMove); move = -1; } } return move - 1; }
/** * Gets and returns a AI move * * @return */ private int compMove() { int compMove = CompAI.bestMove(board, player2, player1); while (!board.isEmptyAt(compMove)) { compMove = CompAI.bestMove(board, player2, player1); } display.out(String.format(R.compPlays, compMove)); return compMove; }
private char antherGame(String question) { display.out(question); try { String antherGame = br.readLine(); return (antherGame != null) ? antherGame.charAt(0) : 'n'; } catch (Exception e) { System.out.println(e.getMessage()); } return 'n'; }
public void startMatch() { if (antherGame(R.StartQuestion) == n) { return; } player1 = new Player(1, R.player1Name, false, R.player1Mark); player2 = new Player(2, R.player2Name, true, R.player2Mark); board = new Board(player1, player2); display.out(R.instructions); display.out(R.numPad); display.out(R.begin); do { board.reset(); Player winningPlayer = startGame(); winningPlayer.addWin(); display.score(winningPlayer, player1, player2); display.out(board.toString()); } while (antherGame(R.startAnotherGame) != R.n); display.out(R.gameOver); ; }