0% found this document useful (0 votes)
32 views

Tictactoe

This Java code implements a Tic-Tac-Toe game with a graphical user interface and basic AI opponent. It initializes the game board and buttons, handles button clicks to place marks on the board, checks for a win or draw after each turn, and switches between players. The AI opponent tries to win by making winning moves, blocking the user, taking the center, or making strategic corner/side moves.

Uploaded by

tristannerzs0426
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
32 views

Tictactoe

This Java code implements a Tic-Tac-Toe game with a graphical user interface and basic AI opponent. It initializes the game board and buttons, handles button clicks to place marks on the board, checks for a win or draw after each turn, and switches between players. The AI opponent tries to win by making winning moves, blocking the user, taking the center, or making strategic corner/side moves.

Uploaded by

tristannerzs0426
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
You are on page 1/ 8

import java.awt.

*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;

public class Main extends JFrame {


public JButton[][] buttons;
public char currentPlayer;
public JTextArea resultTextArea;
public String player;

public Main() {
enterPlayer();
setTitle("Tic Tac Toe - " + player);
setSize(300, 300);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);

initializeGame();
setupGUI();
}

public void enterPlayer() {


player = JOptionPane.showInputDialog("Enter your name:");
if (player == null || player.isEmpty()) {
player = "Player";
}
}

public void initializeGame() {


buttons = new JButton[3][3];
currentPlayer = 'X';
}

public void setupGUI() {


setLayout(new BorderLayout());

JPanel boardPanel = new JPanel(new GridLayout(3, 3));


resultTextArea = new JTextArea(5, 20);

JScrollPane scrollPane = new JScrollPane(resultTextArea);


add(scrollPane, BorderLayout.SOUTH);

for (int i = 0; i < 3; i++)


for (int j = 0; j < 3; j++)
setupButton(boardPanel, i, j);

add(boardPanel, BorderLayout.CENTER);

resultTextArea.setEditable(false);
resultTextArea.setLineWrap(true);
resultTextArea.setWrapStyleWord(true);

JButton resetButton = new JButton("Reset");


resetButton.addActionListener(e -> resetGame());
add(resetButton, BorderLayout.NORTH);
}

public void setupButton(JPanel boardPanel, int i, int j) {


buttons[i][j] = new JButton();
buttons[i][j].setFont(new Font("Arial", Font.PLAIN, 40));
buttons[i][j].addActionListener(e -> handleButtonClick(i, j));
boardPanel.add(buttons[i][j]);
}

public void resetGame() {


for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
buttons[i][j].setText("");
currentPlayer = 'X';
resultTextArea.setText("");
}

public void handleButtonClick(int row, int col) {


if (buttons[row][col].getText().isEmpty()) {
buttons[row][col].setText(String.valueOf(currentPlayer));
Draw();
}
}

public void switchPlayer() {


currentPlayer = (currentPlayer == 'X') ? 'O' : 'X';
}

public boolean checkWin() {


return checkRows() || checkColumns() || checkDiagonals();
}

public boolean checkRows() {


for (int i = 0; i < 3; i++)
if (checkRow(i)) return true;
return false;
}

public boolean checkRow(int row) {


return buttons[row][0].getText().equals(String.valueOf(currentPlayer)) &&
buttons[row][1].getText().equals(String.valueOf(currentPlayer)) &&
buttons[row][2].getText().equals(String.valueOf(currentPlayer));
}

public boolean checkColumns() {


for (int j = 0; j < 3; j++)
if (checkColumn(j)) return true;
return false;
}

public boolean checkColumn(int col) {


return buttons[0][col].getText().equals(String.valueOf(currentPlayer)) &&
buttons[1][col].getText().equals(String.valueOf(currentPlayer)) &&
buttons[2][col].getText().equals(String.valueOf(currentPlayer));
}

public boolean checkDiagonals() {


return (buttons[0][0].getText().equals(String.valueOf(currentPlayer)) &&
buttons[1][1].getText().equals(String.valueOf(currentPlayer)) &&
buttons[2][2].getText().equals(String.valueOf(currentPlayer))) ||
(buttons[0][2].getText().equals(String.valueOf(currentPlayer)) &&
buttons[1][1].getText().equals(String.valueOf(currentPlayer)) &&
buttons[2][0].getText().equals(String.valueOf(currentPlayer)));
}
public boolean isBoardFull() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (buttons[i][j].getText().isEmpty()) return false;
return true;
}

public void displayWinner(char player) {


String winnerMessage = (player == 'X') ? "You win!" : "You lose! Computer wins!";
resultTextArea.append(winnerMessage + "\n");
saveResultToFile(winnerMessage);
resetGame();
}

public void displayDraw() {


resultTextArea.append("It's a draw!\n");
saveResultToFile("It's a draw!");
resetGame();
}

public void saveResultToFile(String result) {


try (BufferedWriter writer = new BufferedWriter(new FileWriter("tictactoe_results.txt", true))) {
writer.write(player + ": " + result + "\n");
} catch (IOException e) {
e.printStackTrace();
}
}

public void kompyuter() {


if (makeWinningMove() || blockOpponent() || takeCenter() || makeStrategicMove()) {
Draw();
}
}

public boolean makeWinningMove() {


for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (buttons[i][j].getText().isEmpty()) {
buttons[i][j].setText(String.valueOf(currentPlayer));
if (checkWin()) return true;
buttons[i][j].setText("");
}
return false;
}

public boolean blockOpponent() {


for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++)
if (buttons[i][j].getText().isEmpty()) {
buttons[i][j].setText(String.valueOf('X'));
if (checkWin()) {
buttons[i][j].setText(String.valueOf(currentPlayer));
return true;
}
buttons[i][j].setText("");
}
return false;
}
public boolean takeCenter() {
if (buttons[1][1].getText().isEmpty()) {
buttons[1][1].setText(String.valueOf(currentPlayer));
return true;
}
return false;
}

public boolean makeStrategicMove() {


if (buttons[0][0].getText().isEmpty()) {
buttons[0][0].setText(String.valueOf(currentPlayer));
return true;
} else if (buttons[0][2].getText().isEmpty()) {
buttons[0][2].setText(String.valueOf(currentPlayer));
return true;
} else if (buttons[2][0].getText().isEmpty()) {
buttons[2][0].setText(String.valueOf(currentPlayer));
return true;
} else if (buttons[2][2].getText().isEmpty()) {
buttons[2][2].setText(String.valueOf(currentPlayer));
return true;
}
return false;
}

public void Draw() {


if (checkWin()) {
displayWinner(currentPlayer);
} else if (isBoardFull()) {
displayDraw();
} else {
switchPlayer();
if (currentPlayer == 'O') kompyuter();
}
}

public static void main(String[] args) {


SwingUtilities.invokeLater(() -> new Main().setVisible(true));
}
}

You might also like