Skip to main content
deleted 50 characters in body; edited title
Source Link
Jamal
  • 34.9k
  • 13
  • 133
  • 237

TIC Tic-TACTac-TOEToe Player vs Computer

I have created a logical AI for tica Tic-tacTac-Toe game , i. I want a review about how good or bad it is  . Here the computer AI will defend all your attacks as well as try to attack whenever it gets a chance . Below is the code you can directly try running it .

TIC-TAC-TOE Player vs Computer

I have created a logical AI for tic-tac game , i want a review about how good or bad it is  . Here the computer AI will defend all your attacks as well as try to attack whenever it gets a chance . Below is the code you can directly try running it .

Tic-Tac-Toe Player vs Computer

I have created a logical AI for a Tic-Tac-Toe game. I want a review about how good or bad it is. Here the computer AI will defend all your attacks as well as try to attack whenever it gets a chance.

edited tags
Link
Source Link

TIC-TAC-TOE Player vs Computer

I have created a logical AI for tic-tac game , i want a review about how good or bad it is . Here the computer AI will defend all your attacks as well as try to attack whenever it gets a chance . Below is the code you can directly try running it .

import java.util.Random;
    import java.util.Scanner;
    
    public class TicTac {
        static {
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t  ________________________    _______________________");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t |___  ___|___  ___|  ____|  |___  ___|   _   |  ____|");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t    |  |     |  |  |  |   ____  |  |  |  |_|  |  |");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t    |  |     |  |  |  |  |____| |  |  |   _   |  |");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t    |  |   __|  |__|  |___      |  |  |  | |  |  |___");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t    |__|  |________|______|     |__|  |__| |__|______|");
            System.out.println("\n\n");
        }
    
        private Scanner sc = new Scanner(System.in);
        private char board[] = new char[9];
        private char turn = 'X';
        private Random random = new Random();
        private int winX = 0;
        private int winO = 0;
        private String name;
        private char myChoice = 'O';
    
        public static void main(String[] args) {
            TicTac t = new TicTac();
            int numberOfGames = 1;
            long start, end;
            start = System.currentTimeMillis();
            do {
                t.play();
                numberOfGames--;
                System.out.println("\t\t\t\t\t\t\t\t\t\t\t----------------------------------------------------------------");
            } while (numberOfGames > 0);
            end = System.currentTimeMillis();
            System.out.println("\n\t\t\t\t\t\t\t\t\t\t\tTime taken by the program to execute is : " + (end - start));
        }
    
        private void playersTurn() {
            int r;
            boolean check = false;
            do {
                System.out.println("\n\n\t\t\t\t\t\t\t\twhere do you wnt to play , select from 1 - 9 :");
                try {
                    r = getChoice();
                    if (!(r > 0 && r < 10)) {
                        Thread.sleep(1000);
                        throw new NumberFormatException("Invalid Number");
                    }
                    r -= 1;
                    if (board[r] == ' ') {
                        board[r] = turn;
                        check = true;
                    } else if (board[r] == myChoice) {
                        System.out.println("you already played there");
                    } else {
                        System.out.println("computer played there");
                    }
                } catch (Exception e) {
                    System.out.println("invalid choice. \t " + e);
                }
            } while (!check);
        }
    
        private int getChoice() {
            String x = "1";
    
            try {
                x = sc.nextLine();
                if (x.matches("^[1-9]$")) {
    
                } else {
    
                    throw new NumberFormatException("Invalid Number");
                }
            } catch (Exception e) {
                System.out.println(e.getMessage());
            }
            return Integer.parseInt(x);
        }
    
        private void initializeBoard() {
            for (int i = 0; i < 9; i++) {
                board[i] = ' ';
            }
        }
    
        private void switchPlayer() {
            if (turn == 'X') {
                turn = 'O';
            } else if (turn == 'O') {
                turn = 'X';
            }
        }
    
        private boolean win() {
            for (int i = 0; i < 9; i++) {
                if (board[i] == ' ') {
                    board[i] = turn;
                    if (checkWin()) {
                        return true;
                    } else {
                        board[i] = ' ';
                    }
                }
            }
            return false;
        }
    
        private void attack() {
            boolean check = false;
            do {
                int r = random.nextInt(9);
                if (r == 1 || r == 3 || r == 5 || r == 7 || r != 4) {
                    r = random.nextInt(9);
                }
                if (board[r] == ' ') {
                    board[r] = turn;
                    check = true;
                }
            } while (!check);
        }
    
        private boolean defence() {
            switchPlayer();
            for (int i = 0; i < 9; i++) {
                if (board[i] == ' ') {
                    board[i] = turn;
                    if (checkWin()) {
                        switchPlayer();
                        board[i] = turn;
                        return true;
                    } else {
                        board[i] = ' ';
                    }
                }
            }
            switchPlayer();
            return false;
        }
    
        private boolean filled() {
            for (int i = 0; i < 9; i++) {
                if (board[i] == ' ') {
                    return false;
                }
            }
            return true;
        }
    
        private void play() {
            initializeBoard();
            do {
                if (win()) {
                    switchPlayer();
                } else if (defence()) {
                    switchPlayer();
                } else {
                    attack();
                    switchPlayer();
                }
                display();
                if (turn == myChoice && !checkWin() && !filled()) {
                    playersTurn();
                    switchPlayer();
                    display();
                }
                /*try {
                    Thread.sleep(2000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }*/
                System.out.println("\n");
            } while (!filled() && !checkWin());
            if (checkWin()) {
                switchPlayer();
                if (turn == 'O') {
                    winO++;
                } else {
                    winX++;
                }
                System.out.println();
                display();
                System.out.println("\n");
                System.out.println("\t\t\t\t\t\t\t\t\t\t\t  " + turn + "  has won");
            } else {
                System.out.println();
                display();
                System.out.println("\n");
                System.out.println("\t\t\t\t\t\t\t\t\t\t\t   game is draw... ");
            }
        }
    
        private boolean checkWin() {
            return (board[0] == board[1] && board[1] == board[2] && board[0] != ' ' || board[3] == board[4] && board[4] == board[5] && board[3] != ' ' || board[6] == board[7] && board[7] == board[8] && board[6] != ' ' || board[0] == board[4] && board[4] == board[8] && board[0] != ' ' || board[2] == board[4] && board[4] == board[6] && board[2] != ' ' || board[0] == board[3] && board[3] == board[6] && board[0] != ' ' || board[1] == board[4] && board[4] == board[7] && board[1] != ' ' || board[2] == board[5] && board[5] == board[8] && board[2] != ' ');
        }
    
        private void display() {
    
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t " + board[0] + " | " + board[1] + " | " + board[2] + "           PLAYER 'O' | CPU  'X'");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t---|---|---            ---------|---------");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t " + board[3] + " | " + board[4] + " | " + board[5] + "                      |");
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t---|---|---" + "\t   \t\t\t\t" + winO + "\t|\t" + winX);
            System.out.println("\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t " + board[6] + " | " + board[7] + " | " + board[8] + "                      |");
        }
    }