import java.util.Scanner;
import java.util.Random;
public class TicTacToe {
private char[][] board;
private final char USER = 'X';
private final char COMPUTER = 'O';
private final char EMPTY = '.';
public TicTacToe() {
board = new char[3][3];
initializeBoard();
}
private void initializeBoard() {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
board[row][col] = EMPTY;
}
}
}
public void printBoard() {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
System.out.print(board[row][col]);
}
System.out.println();
}
}
public boolean isBoardFull() {
for (int row = 0; row < 3; row++) {
for (int col = 0; col < 3; col++) {
if (board[row][col] == EMPTY) {
return false;
}
}
}
return true;
}
public boolean hasWon(char player) {
// Check rows and columns
for (int i = 0; i < 3; i++) {
if ((board[i][0] == player && board[i][1] == player && board[i][2] == player)
|| (board[0][i] == player && board[1][i] == player && board[2][i] == player)) {
return true;
}
}
// Check diagonals
if ((board[0][0] == player && board[1][1] == player && board[2][2] == player)
|| (board[0][2] == player && board[1][1] == player && board[2][0] == player)) {
return true;
}
return false;
}
public void makeMove(int row, int col, char player) {
if (row >= 0 && row < 3 && col >= 0 && col < 3 && board[row][col] == EMPTY) {
board[row][col] = player;
}
}
public int[] computerMove() {
int[] move = new int[2];
Random random = new Random();
do {
move[0] = random.nextInt(3);
move[1] = random.nextInt(3);
} while (board[move[0]][move[1]] != EMPTY);
return move;
}
public static void main(String[] args) {
TicTacToe game = new TicTacToe();
Scanner scanner = new Scanner(System.in);
int userRow, userCol;
int[] computerMove;
while (!game.isBoardFull()) {
game.printBoard();
System.out.print("Enter row and column (0-2): ");
userRow = scanner.nextInt();
userCol = scanner.nextInt();
game.makeMove(userRow, userCol, game.USER);
if (game.hasWon(game.USER)) {
game.printBoard();
System.out.println("You won!");
break;
}
if (!game.isBoardFull()) {
computerMove = game.computerMove();
game.makeMove(computerMove[0], computerMove[1], game.COMPUTER);
System.out.println("Computer move: " + computerMove[0] + " " + computerMove[1]);
if (game.hasWon(game.COMPUTER)) {
game.printBoard();
System.out.println("Computer won!");
break;
}
}
}
if (game.isBoardFull() && !game.hasWon(game.USER) && !game.hasWon(game.COMPUTER)) {
game.printBoard();
System.out.println("It's a draw!");
}
}
}