Advertisement
keevosp

Tic-Tac-Toe. Stage 3. hyperskill.org

Jun 2nd, 2023
781
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.65 KB | Source Code | 0 0
  1. package tictactoe;
  2. import java.util.Scanner;
  3.  
  4. public class Main {
  5.     public static void main(String[] args) {
  6.         // write your code here
  7.         Grid grid = new Grid();
  8.         grid.fillGrid();
  9.         grid.setGameInput();
  10.         grid.checkGameState();
  11.     }
  12. }
  13.  
  14. class Grid{
  15. //    Scanner s = new Scanner(System.in);
  16.     static String input;
  17.    
  18.     public char[] field = new char[9];
  19.     protected void fillGrid() {
  20.         for (int i = 0; i < field.length; i++) {
  21.                 field[i] = '_';
  22.         }
  23.     }
  24.     public void showGrid() {
  25.         System.out.print("---------\n" +
  26.                          "| " + field[0] + " " + field[1] + " " + field[2] + " |\n" +
  27.                          "| " + field[3] + " " + field[4] + " " + field[5] + " |\n" +
  28.                          "| " + field[6] + " " + field[7] + " " + field[8] + " |\n" +
  29.                          "---------\n");
  30.     }
  31.    
  32.     public void setGameInput () {
  33.         Scanner s = new Scanner(System.in);
  34.         input = s.nextLine();
  35.         field = input.toCharArray();
  36.         showGrid();
  37.         checkGameState();
  38.     }
  39.    
  40.     public void checkGameState() {
  41.         int xCounter = 0;
  42.         int yCounter = 0;
  43.        
  44.         for (int i = 0; i < field.length; i++) {
  45.             if (field[i] == 'X') {
  46.                 xCounter++;
  47.             } else if (field[i] == 'O') {
  48.                 yCounter++;
  49.             }
  50.         }
  51.         boolean isItImpossibleQuantityDifference = xCounter > yCounter + 1 || xCounter < yCounter - 1 || yCounter > xCounter + 1 || yCounter < xCounter - 1 ? true : false;
  52.        
  53.        
  54.         for (;;) {
  55.             if ((input.contains("_") && !isXWin() && !isOWin()) && !isItImpossibleQuantityDifference) {
  56.                 System.out.println("Game not finished");
  57.                 return;
  58.             } else if (isXWin() && !isOWin()) {
  59.                 System.out.println("X wins");
  60.                 return;
  61.             } else if (isOWin() && !isXWin()) {
  62.                 System.out.println("O wins");
  63.                 return;
  64.             } else if ((isOWin() && isXWin()) || isItImpossibleQuantityDifference || (isXWin() && isOWin())) {
  65.                 System.out.println("Impossible");
  66.                 return;
  67.             } else {
  68.                 System.out.println("Draw");
  69.                 return;
  70.             }
  71.         }
  72.     }
  73.    
  74.     private boolean isXWin () {
  75.         return (field[0] == 'X' && field[4] == 'X' && field[8] == 'X') ||
  76.             ((field[2] == 'X' && field[4] == 'X' && field[6] == 'X') ||
  77.            
  78.             (field[0] == 'X' && field[3] == 'X' && field[6] == 'X') ||
  79.             (field[1] == 'X' && field[4] == 'X' && field[7] == 'X') ||
  80.             (field[2] == 'X' && field[5] == 'X' && field[8] == 'X') ||
  81.            
  82.             (field[0] == 'X' && field[1] == 'X' && field[2] == 'X') ||
  83.             (field[3] == 'X' && field[4] == 'X' && field[5] == 'X') ||
  84.             (field[6] == 'X' && field[7] == 'X' && field[8] == 'X'));
  85.     }
  86.     private boolean isOWin () {
  87.         return (field[0] == 'O' && field[4] == 'O' && field[8] == 'O') ||
  88.                ((field[2] == 'O' && field[4] == 'O' && field[6] == 'O') ||
  89.        
  90.                 (field[0] == 'O' && field[3] == 'O' && field[6] == 'O') ||
  91.                 (field[1] == 'O' && field[4] == 'O' && field[7] == 'O') ||
  92.                 (field[2] == 'O' && field[5] == 'O' && field[8] == 'O') ||
  93.        
  94.                 (field[0] == 'O' && field[1] == 'O' && field[2] == 'O') ||
  95.                 (field[3] == 'O' && field[4] == 'O' && field[5] == 'O') ||
  96.                 (field[6] == 'O' && field[7] == 'O' && field[8] == 'O'));
  97.     }
  98.    
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement