180 lines
6.6 KiB
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!";
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|