Question: I have a tic tac toe program and couldn't figure out how to finish two methods to end the game. Most of the logic is
I have a tic tac toe program and couldn't figure out how to finish two methods to end the game. Most of the logic is complete but there are two sections commented TODO as I couldn't figure them out. Code is below: TicTacToe.java
package tictactoe;
import java.util.Scanner;
public class TicTacToe {
public static final Scanner stdin = new Scanner(System.in);
public static int getPlayerRowColInput() { do { try { int rowOrCol = stdin.nextInt();
if (rowOrCol < 0) { System.out.println(rowOrCol + " is too low, please try again"); } else if (rowOrCol >= GameBoard.BOARD_SIZE) { System.out.println(rowOrCol + " is too high, please try again"); } else { return rowOrCol; } } catch (Exception e) { System.out.println("Invalid input, please try again."); stdin.nextLine(); } } while (true); }
public static int[] getMoveFromPlayer(GameBoard board) { int[] results = new int[2]; int row; int col; boolean isMoveValid; if (board.getIsPlayerOnesTurn()) { System.out.println("Player One's turn (X)"); } else { System.out.println("Player Two's turn (O)"); } do { System.out.println("Enter row for token: "); row = getPlayerRowColInput(); System.out.println("Enter column for token: "); col = getPlayerRowColInput();
isMoveValid = board.canPlaceToken(row, col);
if (!isMoveValid) { System.out.println( "That spot is already taken! " + "Please choose another." ); } } while (!isMoveValid);
results[0] = row; results[1] = col;
return results; }
public static void playRound() { GameBoard board = new GameBoard(); BoardToken winner;
do { board.printBoard(); int[] rowAndCol = getMoveFromPlayer(board); int row = rowAndCol[0]; int col = rowAndCol[1]; BoardToken token;
if (board.getIsPlayerOnesTurn()) { token = BoardToken.createXToken(); } else { token = BoardToken.createOToken(); }
board.placeToken(token, row, col);
} while (!board.isGameOver()); winner = board.getGameWinner(); if (winner.equals(BoardToken.createXToken())) { System.out.println("Player One Wins!"); } else if (winner.equals(BoardToken.createOToken())) { System.out.println("Player Two Wins!"); } else { System.out.println("Cat's game."); System.out.println("The only winning move is not to play."); } }
/** * @param args the command line arguments */ public static void main(String[] args) { boolean keepPlaying = true; String userInput;
System.out.println("Welcome, let's play a game of Tic-Tac-Toe");
do { playRound();
System.out.println("Would you like to play again? (y/n)"); userInput = stdin.nextLine();
switch (userInput.charAt(0)) { case 'y': case 'Y': keepPlaying = true; break; case 'n': case 'N': default: keepPlaying = false; break; } } while (keepPlaying); }
}
*******
GameBoard.java package tictactoe;
public class GameBoard {
public static final int BOARD_SIZE = 3;
private BoardToken[][] boardState; private boolean isPlayerOnesTurn;
public GameBoard() { boardState = new BoardToken[BOARD_SIZE][BOARD_SIZE];
for (int i = 0; i < boardState.length; i++) { for (int j = 0; j < boardState[i].length; j++) { boardState[i][j] = BoardToken.createEmptyToken(); } }
isPlayerOnesTurn = true; }
public boolean isGameOver() { // TODO FINISH THIS METHOD return false; }
public void printBoard() { System.out.println(); for (int i = 0; i < boardState.length; i++) { if (i != 0) { System.out.println("-----"); } for (int j = 0; j < boardState.length; j++) { if (j != 0) { System.out.print("|"); } System.out.print(boardState[i][j].toString()); } System.out.println(); } System.out.println(); }
public void placeToken(BoardToken token, int row, int col) { boardState[row][col] = token; isPlayerOnesTurn = !isPlayerOnesTurn; }
public boolean canPlaceToken(int row, int col) { return boardState[row][col].equals(BoardToken.createEmptyToken()); }
public boolean getIsPlayerOnesTurn() { return this.isPlayerOnesTurn; }
public BoardToken getGameWinner() { // TODO FINISH THIS METHOD return BoardToken.createEmptyToken(); }
}
*******
BoardToken.java
package tictactoe;
public class BoardToken { private char token; public static BoardToken createXToken() { return new BoardToken('X'); } public static BoardToken createOToken() { return new BoardToken('O'); } public static BoardToken createEmptyToken() { return new BoardToken(' '); } private BoardToken(char token) { this.token = token; } public String toString() { return String.valueOf(this.token); } public boolean equals(BoardToken other) { return this.token == other.token; } }
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
