Advertisement
TheRightGuy

TicTacToe 2.0

Feb 1st, 2022
885
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.83 KB | None | 0 0
  1. package tictactoe;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Scanner;
  5.  
  6. public class TicTacToe {
  7.  
  8.     private final String PLAYER_CHARACTER = "X";
  9.     private final String COMPUTER_CHARACTER = "O";
  10.     private final String[] grid = new String[9];
  11.  
  12.     public TicTacToe() {
  13.         gameLoop();
  14.     }
  15.  
  16.     private void gameLoop() {
  17.         Scanner input = new Scanner(System.in);
  18.         gridInitialization();
  19.  
  20.         while (hasWinner()) {
  21.             humanPlayer(input);
  22.             if (isDraw()) return;
  23.             computerPlayer();
  24.             displayGrid();
  25.         }
  26.     }
  27.  
  28.     private void gridInitialization() {
  29.         for (int i = 0; i < grid.length; i++) {
  30.             grid[i] = String.valueOf(i + 1);
  31.         }
  32.     }
  33.  
  34.     private void humanPlayer(Scanner input) {
  35.         int player;
  36.         System.out.println("Pick a number from 1 - 9 ");
  37.         player = input.nextInt();
  38.         while (isTileTaken(grid[index(player)])) {
  39.             System.out.println("Try again that tile is taken");
  40.             player = input.nextInt();
  41.         }
  42.         grid[index(player)] = PLAYER_CHARACTER;
  43.     }
  44.  
  45.     private void computerPlayer() {
  46.         int computer;
  47.         computer = (int) (Math.random() * 9 + 1);
  48.         while (isTileTaken(grid[index(computer)])) {
  49.             computer = (int) (Math.random() * 9 + 1);
  50.         }
  51.         grid[index(computer)] = COMPUTER_CHARACTER;
  52.     }
  53.  
  54.     private boolean isDraw() {
  55.         if (Arrays.stream(grid).distinct().count() == 2 && hasWinner()) {
  56.             System.out.println("DRAW");
  57.             return true;
  58.         }
  59.         return false;
  60.     }
  61.  
  62.     private boolean isTileTaken(String tile) {
  63.         return tile.equals("X") || tile.equals("O");
  64.     }
  65.  
  66.     private void displayGrid() {
  67.         /*
  68.             WHAT is the question
  69.          */
  70.         int LAST_ROW_INDEX = 3;
  71.         for (int i = 1; i < grid.length + 1; i++) {
  72.             if(i % LAST_ROW_INDEX == 0) {
  73.                 System.out.print(grid[index(i)] + "\n");
  74.             }else {
  75.                 System.out.print(grid[index(i)] + "|");
  76.             }
  77.         }
  78.     }
  79.  
  80.     private int index(int i) {
  81.         return i - 1;
  82.     }
  83.  
  84.     private boolean hasWinner() {
  85.         if (isWinner(PLAYER_CHARACTER)) {
  86.             System.out.println("Player Won\nGame Over");
  87.             return false;
  88.         } else if (isWinner(COMPUTER_CHARACTER)) {
  89.             System.out.println("Computer Won\nGame Over");
  90.             return false;
  91.         }
  92.         return true;
  93.     }
  94.  
  95.     private boolean isWinner(String userCharacter) {
  96.         return hasWonHorizontally(userCharacter)
  97.                 || hasWonVertically(userCharacter)
  98.                 || hasWonDiagonally(userCharacter);
  99.     }
  100.  
  101.     private boolean hasWonDiagonally(String userCharacter) {
  102.         return grid[0].equals(userCharacter) && grid[4].equals(userCharacter) && grid[8].equals(userCharacter)
  103.                 || grid[2].equals(userCharacter) && grid[4].equals(userCharacter) && grid[6].equals(userCharacter);
  104.     }
  105.  
  106.     private boolean hasWonVertically(String userCharacter) {
  107.         return grid[0].equals(userCharacter) && grid[3].equals(userCharacter) && grid[6].equals(userCharacter)
  108.                 || grid[1].equals(userCharacter) && grid[4].equals(userCharacter) && grid[7].equals(userCharacter)
  109.                 || grid[2].equals(userCharacter) && grid[5].equals(userCharacter) && grid[8].equals(userCharacter);
  110.     }
  111.  
  112.     private boolean hasWonHorizontally(String userCharacter) {
  113.         return grid[0].equals(userCharacter) && grid[1].equals(userCharacter) && grid[2].equals(userCharacter)
  114.                 || grid[3].equals(userCharacter) && grid[4].equals(userCharacter) && grid[5].equals(userCharacter)
  115.                 || grid[6].equals(userCharacter) && grid[7].equals(userCharacter) && grid[8].equals(userCharacter);
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement