package Uebung_02; import java.util.Objects; import java.util.Random; import java.util.Scanner; public class Main { public static void main(String[] args) { String[] moveArray = {" ", " ", " ", " ", " ", " ", " ", " ", " "}; boolean gameGoing = true; String savingMemory; // printBoard(moveArray); //Not needed for the first run, actually. while(gameGoing){ printBoard(playerMove(moveArray)); gameGoing = isGameGoing(moveArray, gameGoing); if(gameGoing == false){ break; } printBoard(enemyMove(moveArray)); gameGoing = isGameGoing(moveArray, gameGoing); } } private static boolean isGameGoing(String[] moveArray, boolean gameGoing) { String savingMemory; savingMemory = checkWin(moveArray); //Yes, yes, I bowed to the mighty IntelliJ refactoring. if (savingMemory == "Player win!") { gameGoing = false; System.out.println(savingMemory); } else if (savingMemory == "PC win!") { gameGoing = false; System.out.println(savingMemory); } else if (savingMemory == "DRAW!!!!") { gameGoing = false; System.out.println(savingMemory); } else System.out.println(savingMemory); return gameGoing; } private static void printBoard(String[] moveArray){ System.out.print("[" + moveArray[0] + "]" + "[" + moveArray[1] + "]" + "[" + moveArray[2] + "]" + "\n" + "[" + moveArray[3] + "]" + "[" + moveArray[4] + "]" + "[" + moveArray[5] + "]" + "\n" + "[" + moveArray[6] + "]" + "[" + moveArray[7] + "]" + "[" + moveArray[8] + "]" + "\n" + "\n"); } private static String[] enemyMove( String[] moveArray){ boolean argh = true; //so I know when to stop generating moves while (argh == true) { //Yes. I know. I told IntelliJ to leave me alone as well. You will not make me budge either. Random random = new Random(); int randomInt = random.nextInt(9); if(Objects.equals(moveArray[randomInt], " ")){ moveArray[randomInt] = "O"; argh = false; } else { System.out.print("Thinking."); try { Thread.sleep(300); } catch (InterruptedException e) { System.err.println("Thread was interrupted!"); } System.out.print("."); try { Thread.sleep(300); } catch (InterruptedException e) { System.err.println("Thread was interrupted!"); } System.out.print("."+ "\n"); } } return moveArray; } private static String[] playerMove ( String[] moveArray){ boolean validInput = true; while (validInput) { //Yes, I know its counterintuitive. No, I don't care. System.out.println("Where do you wanna out in your move?"); System.out.print("\n"+"[1]" + "[2]" + "[3]" + "\n" + "[4]" + "[5]" + "[6]" + "\n" + "[7]" + "[8]" + "[9]" + "\n"); Scanner scanner = new Scanner(System.in); int playerMove = scanner.nextInt() - 1; if(playerMove<=8){ System.out.println("This is a correct move!"); moveArray[playerMove] = "X"; validInput = false; } else { System.out.println("No, this is not a valid input, ya git!"); //useful comments are for the weak. } } return moveArray; } private static String checkWin(String[] moveArray){ String playerChar = "X"; //Yes, I know it can be made simpler. But I was too lazy to type the logic myself, so I let ChatGpt write it and then had to bastardise it to fit into my code. Sue me. String pcChar = "O"; // Check for player win //rows if ((moveArray[0] == playerChar && moveArray[1] == playerChar && moveArray[2] == playerChar) || // Row 1 (moveArray[3] == playerChar && moveArray[4] == playerChar && moveArray[5] == playerChar) || // Row 2 (moveArray[6] == playerChar && moveArray[7] == playerChar && moveArray[8] == playerChar)) { // Row 3 return "Player win!"; } // Check columns if ((moveArray[0] == playerChar && moveArray[3] == playerChar && moveArray[6] == playerChar) || // Column 1 (moveArray[1] == playerChar && moveArray[4] == playerChar && moveArray[7] == playerChar) || // Column 2 (moveArray[2] == playerChar && moveArray[5] == playerChar && moveArray[8] == playerChar)) { // Column 3 return "Player win!"; } // Check diagonals if ((moveArray[0] == playerChar && moveArray[4] == playerChar && moveArray[8] == playerChar) || // Diagonal top-left to bottom-right (moveArray[2] == playerChar && moveArray[4] == playerChar && moveArray[6] == playerChar)) { // Diagonal top-right to bottom-left return "Player win!"; } //Check for PC win //rows if ((moveArray[0] == pcChar && moveArray[1] == pcChar && moveArray[2] == pcChar) || // Row 1 (moveArray[3] == pcChar && moveArray[4] == pcChar && moveArray[5] == pcChar) || // Row 2 (moveArray[6] == pcChar && moveArray[7] == pcChar && moveArray[8] == pcChar)) { // Row 3 return "PC win!"; } // Check columns if ((moveArray[0] == pcChar && moveArray[3] == pcChar && moveArray[6] == pcChar) || // Column 1 (moveArray[1] == pcChar && moveArray[4] == pcChar && moveArray[7] == pcChar) || // Column 2 (moveArray[2] == pcChar && moveArray[5] == pcChar && moveArray[8] == pcChar)) { // Column 3 return "PC win!"; } // Check diagonals if ((moveArray[0] == pcChar && moveArray[4] == pcChar && moveArray[8] == pcChar) || // Diagonal top-left to bottom-right (moveArray[2] == pcChar && moveArray[4] == pcChar && moveArray[6] == pcChar)) { // Diagonal top-right to bottom-left return "PC win!"; } //And of course check for draw if ( moveArray[0] != " " && moveArray[1] != " "&& moveArray[2] != " "&& moveArray[3] != " "&& moveArray[4] != " "&& moveArray[5] != " "&& moveArray[6] != " "&& moveArray[7] != " "&& moveArray[8] != " "){ return "DRAW!!!!"; } //else return "Something went wrong. Please consult your local Witch Doctor."; else return "You are not done yet! The enemy is still standing!"; } }