Musterloesungen/src/main/java/Uebung_02/Main.java

180 lines
6.6 KiB
Java

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!";
}
}