In the following example for a Tic-Tac-Toe game implementation, several pieces a
ID: 3747616 • Letter: I
Question
In the following example for a Tic-Tac-Toe game implementation, several pieces are missing or incomplete. Remember to get the computer's input and also win by getting 3 in a row vertically.
Code:
import java.util.Scanner;
public class Main {
// Our keyboard scanner
static Scanner in = new Scanner(System.in);
public static void main(String[] args) {
boolean nextGame = true;
while (nextGame) {
// Play one game
oneGame();
// Check if we want to continue
System.out.print("Shall we play one more (y/n)? ");
String next = in.nextLine();
if ((next.charAt(0) == 'y') || (next.charAt(0) == 'Y'))
nextGame = true;
else
nextGame = false;
}
System.out.println("Goodbye!");
}
public static void oneGame() {
char[][] playField = {{' ',' ',' '},{' ',' ',' '},{' ',' ',' '}} ;
// Game loop
while (true) {
printBoard(playField);
getUserInput(playField);
if (findWin('X',playField)) {
System.out.println("Congratulations, you won!");
break;
}
if (findTie(playField)) {
System.out.println("It's a draw!");
break;
}
getComputerInput(playField);
if (findWin('O',playField)) {
System.out.println("Better luck next time!");
break;
}
if (findTie(playField)) {
System.out.println("It's a draw!");
break;
}
// Next round, show where we are
printBoard(playField);
}
printBoard(playField);
}
public static void getUserInput(char[][] playField) {
boolean valid = false;
while (!valid) {
System.out.print("Please enter your move (row and col, no space): ");
String move = in.nextLine();
if (move.length() == 2) {
int row = (int) move.charAt(0) - 97;
int col = (int) move.charAt(1) - 49;
if (((row == 0) || (row == 1) || (row == 2))
&& ((col == 0) || (col == 1) || (col == 2))) {
if (playField[row][col] == 0 || playField[row][col] == ' ') {
playField[row][col] = 'X';
valid = true;
} else {
System.out.println("This field is already taken, choose another!");
}
} else {
System.out.println("This field is invalid!");
}
} else {
System.out.println("Please only enter the right code (a1,...) for the play!");
}
}
}
public static void getComputerInput(char[][] playField) {
// Computer move
}
public static boolean findTie(char[][] playField) {
// Determine TIE condition
}
public static boolean findWin(char playerChar, char[][] playField) {
int winSum = playField.length * (int) playerChar;
int sum = 0;
boolean gameOver = false;
// Across
for (int i = 0; i < playField.length; i++) {
sum = 0;
for (int j = 0; j < playField[i].length; j++) {
sum += (int) playField[i][j];
}
if (sum == winSum)
gameOver = true;
}
// Diagonal (top left, low right)
sum = 0;
for (int i = 0, j = 0; i < playField.length && j < playField[0].length; i++, j++) {
sum += (int) playField[i][j];
}
if (sum == winSum)
gameOver = true;
return gameOver;
}
public static void printBoard(char[][] playField) {
// Print the board
System.out.println(" 1 2 3");
System.out.println(" +-----+-----+-----+");
System.out.println("a | " + playField[0][0] + " | " + playField[0][1] + " | "
+ playField[0][2] + " |");
System.out.println(" |-----+-----+-----|");
System.out.println("b | " + playField[1][0] + " | " + playField[1][1] + " | "
+ playField[1][2] + " |");
System.out.println(" |-----+-----+-----|");
System.out.println("c | " + playField[2][0] + " | " + playField[2][1] + " | "
+ playField[2][2] + " |");
System.out.println(" +-----+-----+-----+");
}
}
Explanation / Answer
ANSWER:
Here is the code for the Tic Tac Toe game which is perfectly in working condition.
import java.util.Scanner;
public class main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
char[][] TTT_Board = new char[3][3];
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
TTT_Board[i][j] = '_';
}
}
int count_moves = 0;
char player_turn = 'X';
System.out.println("Current TTT_Board: ");
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(TTT_Board[i][j]);
System.out.print(" ");
}
System.out.println();
}
System.out.println();
while (count_moves < 9) {
boolean Valid_Input = false;
while(!Valid_Input){
System.out.print("Enter row (0-2): ");
int row = s.nextInt();
System.out.print("Enter column (0-2): ");
int column = s.nextInt();
if(row>=0 && row<=2 && column>=0 && column<=2){
if(TTT_Board[row][column]=='_'){
TTT_Board[row][column] = player_turn;
Valid_Input = true;
}
else{
System.out.println("Position already filled, enter again");
}
}
else{
System.out.println("Invalid Position, enter again");
}
}
for (int i = 0; i < 3; i++) {
for (int j = 0; j < 3; j++) {
System.out.print(TTT_Board[i][j]);
System.out.print(" ");
}
System.out.println();
}
System.out.println();
boolean win = false;
for (int i = 0; i < 3; i++) {
if (TTT_Board[i][0] == TTT_Board[i][1] &&
TTT_Board[i][1] == TTT_Board[i][2] &&
TTT_Board[i][0] == player_turn) win = true;
if (TTT_Board[0][i] == TTT_Board[1][i] &&
TTT_Board[1][i] == TTT_Board[2][i] &&
TTT_Board[0][i] == player_turn) win = true;
}
if(TTT_Board[0][0]==TTT_Board[1][1] &&
TTT_Board[1][1]==TTT_Board[2][2] &&
TTT_Board[2][2]== player_turn) win = true;
if(TTT_Board[0][2]==TTT_Board[1][1] &&
TTT_Board[1][1]==TTT_Board[2][0] &&
TTT_Board[2][0]== player_turn) win = true;
if (win) {
System.out.println(player_turn + " wins!");
break;
}
if(player_turn=='X')
player_turn = 'O';
else if(player_turn=='O')
player_turn = 'X';
count_moves++;
}
if (count_moves == 9) System.out.println("Tie game.");
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.