commit 8cdd4322099abad573a66151a391c72e50676ec3 Author: Emma Nora Theuer Date: Wed Sep 4 12:54:25 2024 +0200 Initial Commit diff --git a/TicTacToe.java b/TicTacToe.java new file mode 100644 index 0000000..e4bb787 --- /dev/null +++ b/TicTacToe.java @@ -0,0 +1,195 @@ +import java.util.ArrayList; +import java.util.Map; +import java.util.HashMap; +import java.util.Scanner; +import java.util.Random; + +public class TicTacToe { + private static ArrayList freeSpaces; + private static Map fullBoard; + private static Scanner input; + + private static String player() { + while(true){ + System.out.println(String.format("Make your move. Valid moves: {0}", freeSpaces)); + String move = input.nextLine(); + if (freeSpaces.contains(move)) { + return move; + } else { + System.out.println("The move you entered is not valid. Please enter a valid move."); + } + } + } + + private static String ai() { + int rnd = new Random().nextInt(freeSpaces.size()); + String[] tmpFreeSpaces = freeSpaces.toArray(new String[0]); + String move = tmpFreeSpaces[rnd]; + System.out.println(move); + return move; + } + + private static void handle(String playing, String move) { + switch (playing) { + case "player": + fullBoard.put(move, "X"); + freeSpaces.remove(move); + break; + case "ai": + fullBoard.put(move, "O"); + freeSpaces.remove(move); + break; + } + } + + + private static boolean checkForDraw() { + if (freeSpaces.size() == 0) { + return true; + } else { + return false; + } + } + + private static String checkForWin() { + String a1Value = fullBoard.get("a1"); + String a2Value = fullBoard.get("a2"); + String a3Value = fullBoard.get("a3"); + String b1Value = fullBoard.get("b1"); + String b2Value = fullBoard.get("b2"); + String b3Value = fullBoard.get("b3"); + String c1Value = fullBoard.get("c1"); + String c2Value = fullBoard.get("c2"); + String c3Value = fullBoard.get("c3"); + + if (a1Value.equals("X") && a2Value.equals("X") && a3Value.equals("X")) { + return "player"; + } else if (b1Value.equals("X") && b2Value.equals("X") && b3Value.equals("X")) { + return "player"; + } else if (c1Value.equals("X") && c2Value.equals("X") && c3Value.equals("X")) { + return "player"; + } else if (a1Value.equals("X") && b1Value.equals("X") && c1Value.equals("X")) { + return "player"; + } else if (a2Value.equals("X") && b2Value.equals("X") && c2Value.equals("X")) { + return "player"; + } else if (a3Value.equals("X") && b3Value.equals("X") && c3Value.equals("X")) { + return "player"; + } else if (a1Value.equals("X") && b2Value.equals("X") && c3Value.equals("X")) { + return "player"; + } else if (a3Value.equals("X") && b2Value.equals("X") && c1Value.equals("X")) { + return "player"; + } + + if (a1Value.equals("O") && a2Value.equals("O") && a3Value.equals("O")) { + return "ai"; + } else if (b1Value.equals("O") && b2Value.equals("O") && b3Value.equals("O")) { + return "ai"; + } else if (c1Value.equals("O") && c2Value.equals("O") && c3Value.equals("O")) { + return "ai"; + } else if (a1Value.equals("O") && b1Value.equals("O") && c1Value.equals("O")) { + return "ai"; + } else if (a2Value.equals("O") && b2Value.equals("O") && c2Value.equals("O")) { + return "ai"; + } else if (a3Value.equals("O") && b3Value.equals("O") && c3Value.equals("O")) { + return "ai"; + } else if (a1Value.equals("O") && b2Value.equals("O") && c3Value.equals("O")) { + return "ai"; + } else if (a3Value.equals("O") && b2Value.equals("O") && c1Value.equals("O")) { + return "ai"; + } + + if (checkForDraw()){ + return "draw"; + } + + return "none"; + } + + private static void showBoard() { + String a1Value = fullBoard.get("a1"); + String a2Value = fullBoard.get("a2"); + String a3Value = fullBoard.get("a3"); + String b1Value = fullBoard.get("b1"); + String b2Value = fullBoard.get("b2"); + String b3Value = fullBoard.get("b3"); + String c1Value = fullBoard.get("c1"); + String c2Value = fullBoard.get("c2"); + String c3Value = fullBoard.get("c3"); + System.out.println("___1___2___3__"); + System.out.printf("a| %s | %s | %s |\n", a1Value, a2Value, a3Value); + System.out.printf("b| %s | %s | %s |\n", b1Value, b2Value, b3Value); + System.out.printf("c| %s | %s | %s |\n", c1Value, c2Value, c3Value); + System.out.println("______________"); + } + + private static boolean processWin(String status) { + switch (status) { + case "player": + System.out.println("You have won! GG!"); + showBoard(); + return true; + case "ai": + System.out.println("You have lost against an AI that makes random moves. Shameful."); + showBoard(); + return true; + case "draw": + System.out.println("It's a draw!"); + showBoard(); + return true; + default: + return false; + } + } + +// __a___b___c__ +//1| X | O | O | +// _____________ +//2| O | X | X | +// _____________ +//3| O | X | X | +// _____________ + + public static void trueMain() { + while(true) { + showBoard(); + handle("player", player()); + if (processWin(checkForWin())) { + break; + } + + showBoard(); + handle("ai", ai()); + if (processWin(checkForWin())) { + break; + } + } + } + + public static void main(String args[]) { + fullBoard = new HashMap<>(); + freeSpaces = new ArrayList<>(); + input = new Scanner(System.in); + fullBoard.put("a1", " "); + fullBoard.put("a2", " "); + fullBoard.put("a3", " "); + fullBoard.put("b1", " "); + fullBoard.put("b2", " "); + fullBoard.put("b3", " "); + fullBoard.put("c1", " "); + fullBoard.put("c2", " "); + fullBoard.put("c3", " "); + fullBoard.put("a1", " "); + freeSpaces.add("a1"); + freeSpaces.add("a2"); + freeSpaces.add("a3"); + freeSpaces.add("b1"); + freeSpaces.add("b2"); + freeSpaces.add("b3"); + freeSpaces.add("c1"); + freeSpaces.add("c2"); + freeSpaces.add("c3"); + trueMain(); + } +} + +