package UE22_200525_MatheServer; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.Socket; public class MatheClient extends Thread { Socket client; private int anzCals = 10; private int level = 1; public MatheClient(Socket s) { client = s; } public static int randomInRange(int min, int max) { return (int) (Math.random() * (max - min)) + min; } @Override public void run() { try (BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream())); BufferedWriter wr = new BufferedWriter(new OutputStreamWriter(client.getOutputStream()))) { while (true) { wr.write("Willkommen beim Mathe-Quiz\n\rWie heftig hättest du es gerne?"); wr.flush(); while (true) { int level; wr.write("\n\rBitte gibt eine Zahl zwischen 1 und 3 ein. (Leer für 1): "); wr.flush(); try { String input = br.readLine(); if (input == null || input.trim().isEmpty()) break; level = Integer.parseInt(input); } catch (Exception _) { continue; } if (level < 1 || level > 3) continue; this.level = level; break; } while (true) { int anz; wr.write("\n\rWie viele Fragen meochtest du loesen (1 - 999) (Leer für 10): "); wr.flush(); try { String input = br.readLine(); if (input == null || input.trim().isEmpty()) break; anz = Integer.parseInt(input); } catch (Exception _) { continue; } if (anz < 1 || anz > 999) continue; this.anzCals = anz; break; } for (int i = 1; i <= anzCals; i++) { int type = randomInRange(1, 4), solution, a, b; String operator; switch (level) { case 1 -> { a = randomInRange(1, 10); b = randomInRange(1, 10); } case 2 -> { a = randomInRange(-100, 100); b = randomInRange(-100, 100); } case 3 -> { a = randomInRange(-10_000, 10_000); b = randomInRange(-10_000, 10_000); } default -> throw new IllegalStateException("Unexpected value: " + level); } switch (type) { case 1 -> { operator = "+"; solution = a + b; } case 2 -> { operator = "-"; solution = a - b; } case 3 -> { operator = "*"; solution = a * b; } case 4 -> { operator = "/"; solution = a / (b == 0 ? 1 : b); } default -> throw new IllegalStateException("Unexpected value: " + type); } String question = "(Level " + level + ") Frage " + i + ": " + a + " " + operator + " " + b + " = "; wr.write(question); wr.flush(); while (true) { String message = "\n\rFalsch :( .. versuche es noch einmal\n\n\r" + question; try { String input = br.readLine(); if (input == null || input.trim().isEmpty() || Integer.parseInt(input) != solution) { wr.write(message); wr.flush(); continue; } } catch (Exception _) { wr.write(message); wr.flush(); continue; } wr.write("\n\rrichtig :)\n\n\r"); wr.flush(); break; } } wr.write("\n\n\n\rHerzlichen Glückwunsch du hast es geschafft!!\n"); wr.flush(); boolean end = true; while (true) { wr.write("\n\rMoechtest du noch einmal spielen? [y/N]: "); wr.flush(); String input = br.readLine(); if (input == null || input.trim().isEmpty() || input.trim().equalsIgnoreCase("n")) break; if (input.trim().equalsIgnoreCase("y")) { end = false; break; } } if (end) break; } } catch (Exception _) { } } }