Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

To be written in Java: The Tic-Tac-Toe game. This program will allow up to 2 pla

ID: 3884899 • Letter: T

Question

To be written in Java:

The Tic-Tac-Toe game. This program will allow up to 2 players to play the game. In one player mode, user plays against computer. In two player mode, 2 users play against each other. In each mode, players can chose to be 'X' or 'O', 'X' will always go first in both modes. After each turn, the program must display the latest status of the board, and detect any invalid inputs. The game will end when there is a draw or a win, and output who won. Player will always return to Game Menu after every game.

Main Menu selection:

Game Menu 1. New Game 2. Main Men 3. Quit Selection:

Explanation / Answer

Here the code is written in java .

The name of the file is Main.java because the public class named as Main .

import java.io.*;
import java.util.*;
//this is the public class
public class Main
{

public void play() {

TicTacToe game = new TicTacToe();

System.out.println("Welcome! Tic Tac Toe is a two player game.");
System.out.print("Enter player one's name: ");
game.setPlayer1(game.getPrompt());
System.out.print("Enter player two's name: ");
game.setPlayer2(game.getPrompt());
boolean markerOk = false;
while (!markerOk)
{
System.out.print("Select any letter as " + game.getPlayer1() + "'s marker: ");
String marker = game.getPrompt();
if (marker.length() == 1 &&
Character.isLetter(marker.toCharArray()[0])) {
markerOk = true;
game.setMarker1(marker.toCharArray()[0]);
} else {
System.out.println("Invalid marker, try again");
}
}
markerOk = false;
while (!markerOk)
{
System.out.print("Select any letter as " + game.getPlayer2() + "'s marker: ");
String marker = game.getPrompt();
if (marker.length() == 1 &&
Character.isLetter(marker.toCharArray()[0])) {
markerOk = true;
game.setMarker2(marker.toCharArray()[0]);
} else {
System.out.println("Invalid marker, try again");
}
}

boolean continuePlaying = true;

while (continuePlaying) {

game.init();
System.out.println();
System.out.println(game.getRules());
System.out.println();
System.out.println(game.drawBoard());
System.out.println();

String player = null;
while (!game.winner() && game.getPlays() < 9) {
player = game.getCurrentPlayer() == 1 ? game.getPlayer1() : game.getPlayer2();
boolean validPick = false;
while (!validPick) {
System.out.print("It is " + player + "'s turn. Pick a square: ");
String square = game.getPrompt();
if (square.length() == 1 && Character.isDigit(square.toCharArray()[0])) {
int pick = 0;
try {
pick = Integer.parseInt(square);
} catch (NumberFormatException e) {
//Do nothing here, it'll evaluate as an invalid pick on the next row.
}
validPick = game.placeMarker(pick);
}
if (!validPick) {
System.out.println("Square can not be selected. Retry");
}
}
game.switchPlayers();
System.out.println();
System.out.println(game.drawBoard());
System.out.println();
}
if (game.winner())
{
System.out.println("Game Over - " + player + " WINS!!!");
} else {
System.out.println("Game Over - Draw");
}
System.out.println();
System.out.print("Play again? (Y/N): ");
String choice = game.getPrompt();
if (!choice.equalsIgnoreCase("Y")) {
continuePlaying = false;
}
}
}

public static void main(String[] args)
{
Main main = new Main();
main.play();
}
}


class TicTacToe
{

private char[][] board = new char[3][3];
private String player1;
private String player2;
private int currentPlayer;
private char marker1;
private char marker2;
private int plays;
private BufferedReader reader =
new BufferedReader(new InputStreamReader(System.in));

protected void init()
{
int counter = 0;
for (int i = 0; i < 3; i++) {
for (int i1 = 0; i1 < 3; i1++) {
board[i][i1] = Character.forDigit(++counter, 10);
}
}
currentPlayer = 1;
plays = 0;
}

protected void switchPlayers() {
if (getCurrentPlayer() == 1) {
setCurrentPlayer(2);
} else {
setCurrentPlayer(1);
}
setPlays(getPlays() + 1);
}

protected boolean placeMarker(int play) {
for (int i = 0; i < 3; i++) {
for (int i1 = 0; i1 < 3; i1++) {
if (board[i][i1] == Character.forDigit(play, 10)) {
board[i][i1] = (getCurrentPlayer() == 1) ? getMarker1() : getMarker2();
return true;
}
}
}
return false;
}

protected boolean winner() {
//Checking rows
char current = ' ';
for (int i = 0; i < 3; i++) {
int i1 = 0;
for (i1 = 0; i1 < 3; i1++) {
if (!Character.isLetter(board[i][i1])) {
break;
}
if (i1 == 0) {
current = board[i][i1];
} else if (current != board[i][i1]) {
break;
}
if (i1 == 2) {
//Found winner
return true;
}
}
}
//Checking columns
for (int i = 0; i < 3; i++) {
current = ' ';
int i1 = 0;
for (i1 = 0; i1 < 3; i1++) {
if (!Character.isLetter(board[i1][i])) {
break;
}
if (i1 == 0) {
current = board[i1][i];
} else if (current != board[i1][i]) {
break;
}
if (i1 == 2) {
//Found winner
return true;
}
}
}
//Checking diagonals
current = board[0][0];
if (Character.isLetter(current) && board[1][1] == current && board[2][2] == current) {
return true;
}
current = board[2][0];
if (Character.isLetter(current) && board[1][1] == current && board[0][2] == current) {
return true;
}
return false;
}

protected String getRules()
{
StringBuilder builder = new StringBuilder();
builder.append("Players take turns marking a square. Only squares ");
builder.append("not already marked can be picked. Once a player has ");
builder.append("marked three squares in a row, the player wins! If all squares ");
builder.append("are marked and no three squares are the same, a tie game is declared. ");
builder.append("Have Fun! ");
return builder.toString();
}

protected String getPrompt() {
String prompt = "";
try {
prompt = reader.readLine();
} catch (IOException ex) {
ex.printStackTrace();
}
return prompt;
}

protected String drawBoard() {
StringBuilder builder = new StringBuilder("Game board: ");
for (int i = 0; i < 3; i++) {
for (int i1 = 0; i1 < 3; i1++) {
builder.append("[" + board[i][i1] + "]");
}
builder.append(" ");
}
return builder.toString();
}

public int getCurrentPlayer() {
return currentPlayer;
}

public void setCurrentPlayer(int currentPlayer) {
this.currentPlayer = currentPlayer;
}

public char getMarker1() {
return marker1;
}

public void setMarker1(char marker1) {
this.marker1 = marker1;
}

public char getMarker2() {
return marker2;
}

public void setMarker2(char marker2) {
this.marker2 = marker2;
}

public int getPlays() {
return plays;
}

public void setPlays(int plays) {
this.plays = plays;
}

public String getPlayer1() {
return player1;
}

public void setPlayer1(String player1) {
this.player1 = player1;
}

public String getPlayer2() {
return player2;
}

public void setPlayer2(String player2) {
this.player2 = player2;
}
}

output-

aashish@aashish ~/Desktop/My_D/chegg $ javac Main.java
aashish@aashish ~/Desktop/My_D/chegg $ java Main
Welcome! Tic Tac Toe is a two player game.
Enter player one's name: Rony
Enter player two's name: Johny
Select any letter as Rony 's marker: O
Select any letter as Johny's marker: X

Players take turns marking a square. Only squares
not already marked can be picked. Once a player has
marked three squares in a row, the player wins! If all squares
are marked and no three squares are the same, a tie game is declared.
Have Fun!

Game board:
[1][2][3]
[4][5][6]
[7][8][9]


It is Rony 's turn. Pick a square: 5

Game board:
[1][2][3]
[4][O][6]
[7][8][9]


It is Johny's turn. Pick a square: 3

Game board:
[1][2][X]
[4][O][6]
[7][8][9]


It is Rony 's turn. Pick a square: 2

Game board:
[1][O][X]
[4][O][6]
[7][8][9]


It is Johny's turn. Pick a square: 8

Game board:
[1][O][X]
[4][O][6]
[7][X][9]


It is Rony 's turn. Pick a square: 4

Game board:
[1][O][X]
[O][O][6]
[7][X][9]


It is Johny's turn. Pick a square: 6

Game board:
[1][O][X]
[O][O][X]
[7][X][9]


It is Rony 's turn. Pick a square: 7

Game board:
[1][O][X]
[O][O][X]
[O][X][9]


It is Johny's turn. Pick a square: 9

Game board:
[1][O][X]
[O][O][X]
[O][X][X]


Game Over - Johny WINS!!!

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote