package tpe.ui; import java.util.ArrayList; import java.util.Scanner; import tpe.exceptions.RobotException; import tpe.exceptions.roboter.RobotFactory; import tpe.facade.FactorySystem; public class UI { private FactorySystem fs; Scanner sc = new Scanner(System.in); public UI(FactorySystem fs) { this.fs = fs; menu(); } private void menu() { System.out.println("Willkommen bei der " + fs.getFName() + "!"); mainloop: while (true) { System.out.println(); System.out.println("--------"); System.out.println("Hauptmen�"); System.out.println("1 -> Alle Roboter anzeigen"); System.out.println("2 -> Einen neuen Roboter erstellen"); System.out.println("3 -> Einen Roboter w�hlen und mit diesem arbeiten"); System.out.println("4 -> Beenden"); System.out.println(); System.out.print("> "); int input = Integer.parseInt(sc.nextLine()); System.out.println(); switch (input) { case 1: showRobots(); break; case 2: buildRobot(); break; case 3: choseRobot(); break; case 4: break mainloop; } System.out.println(); } } /** * Zeigt alle erstellten Roboter an */ private void showRobots() { String[] robots = fs.getRobotStock(); if (robots.length > 0) { System.out.println("Folgende Roboter sind verfügbar:"); for (String r : robots) { System.out.println(r); } } else { System.out.println("Bisher keine Roboter konstruiert."); } } /** * Gibt dem Nutzer die Möglichkeit C3PO oder R2D2 zu bauen */ private void buildRobot() { String name = null; System.out.println("Sie haben sich dazu entschieden einen Roboter zu bauen. " + "Wenn Sie einen Roboter vom Typ R2D2 bauen m�chten, dann dr�cken Sie die (1). " + "Wenn Sie einen Roboter vom Typ C3PO bauen m�chten, dann dr�cken Sie die (2)."); System.out.print("> "); int robotType = Integer.parseInt(sc.nextLine()); if (robotType > 2 || robotType < 1) { System.out.println( "Es stehen nur (1) oder (2) bei der Auswahl des Robotertypen zur verf�gung. Bitte erneut w�hlen."); System.out.println(); buildRobot(); } else { System.out.println(); // Namensgabe boolean realname = true; while (realname) { System.out.println("Welchen Namen m�chten Sie dem Roboter geben."); System.out.print("> "); name = sc.nextLine(); if (name != "") break; } System.out.println(); int serialnumber = fs.constructRobot(robotType, name); System.out.println("Sie haben einen Roboter vom Typ " + robotType + " mit dem Namen " + name + " mit der Seriennummer " + serialnumber + " erstellt."); } } /** * Nutzer kann durch die EIngabe der Seriennummer den Roboter aussuchen, der * genutzt werden soll */ private void choseRobot() { System.out.println("Geben Sie die Seriennummer des Roboters ein, mit dem Sie arbeiten m�chten."); System.out.print("> "); int id = Integer.parseInt(sc.nextLine()); System.out.println(); if (!fs.containsRobot(id)) System.out.println("Es exisitiert kein Roboter mit der Seriennummer " + id + " ."); else loop: while (true) { System.out.println("Was m�chten Sie mit Ihrem Roboter tun?"); System.out.println("1 -> Zustand des Roboters"); System.out.println("2 -> AN oder Aus schalten"); System.out.println("3 -> Roboter spricht"); System.out.println("4 -> Letzte Fehlermeldung auslesen"); // Haben bzw. brauchen wir solch eine Funktion System.out.println("5 -> Daten des Roboters abrufen"); System.out.println("6 -> Zur�ck ins Hauptmen�"); System.out.print("> "); int input = Integer.parseInt(sc.nextLine()); switch (input) { case 1: robotStatus(id); break; case 2: onoffbutton(id); break; case 3: robotSpeak(id); break; case 4: lastError(id); break; case 5: robotData(id); break; case 6: break loop; } } } /** * Gibt den Status des Roboters an * * @param id */ private void robotStatus(int id) { boolean status = fs.powerStatus(id); if (status == true) System.out.println("Der Roboter ist angeschaltet."); else System.out.println("Der Roboter ist ausgeschaltet."); } /** * Schaltet den Roboter ein oder aus * * @param id */ private void onoffbutton(int id) { boolean status = fs.triggerPower(id); if (status == true) System.out.println("Der Roboter wurde eingeschaltet."); else System.out.println("Der Roboter wurde ausgeschaltet."); System.out.println(); } /** * Der Roboter kann, nachdem ihm eine Zahlenfolge gegeben wurde, diese je nach * Typ verarbeiten und zurückgeben * * @param id */ private void robotSpeak(int id) { ArrayList arrayNumbers = new ArrayList<>(); boolean next = true; System.out.println( "Um den Robotersprechen zu lassen, m�ssen Sie eine beliebig lange Folge von ganzen Zahlen angeben"); System.out.println(); System.out.println("Geben Sie die 1. Zahl Ihrer Folge ein."); int num = Integer.parseInt(sc.nextLine()); arrayNumbers.add(num); int i = 2; while (next) { System.out.println("Geben Sie die " + i + ". Zahl Ihrer Folge ein."); num = Integer.parseInt(sc.nextLine()); arrayNumbers.add(num); System.out.println( "Wenn Sie eine weiter Zahl eingeben m�chten, w�hlen Sie (1). Wenn Sie die Eingabe beenden m�chten (2)."); int election = Integer.parseInt(sc.nextLine()); if (election == 1) { i++; next = true; } else { next = false; int[] numbers = arrayNumbers.stream().mapToInt(j -> j).toArray(); String output; try { output = fs.robotInstructions(id, numbers); System.out.println("Der Roboter gibt folgendes aus: " + output); } catch (RobotException e) { System.out.println("Fehler!"); } } } } /** * Gibt die letzte Fehlermeldung des Roboters zurück * * @param id */ private void lastError(int id) { System.out.println(fs.robotBlackbox(id)); } /** * Gibt die Informationen eines Roboters zurück * * @param id */ private void robotData(int id) { System.out.println(fs.robotInfo(id)); } }