RoboterFabrik/Roboter/tpe/ui/UI.java

268 lines
6.1 KiB
Java
Raw Permalink Normal View History

2023-01-07 14:15:53 +01:00
package tpe.ui;
import java.util.ArrayList;
import java.util.Scanner;
2023-01-09 15:24:30 +01:00
import tpe.exceptions.RobotException;
import tpe.exceptions.roboter.RobotFactory;
import tpe.facade.FactorySystem;
2023-01-07 14:15:53 +01:00
public class UI {
2023-01-09 17:36:33 +01:00
private FactorySystem fs;
Scanner sc = new Scanner(System.in);
2023-01-09 17:36:33 +01:00
public UI(FactorySystem fs) {
this.fs = fs;
menu();
}
2023-01-09 17:36:33 +01:00
private void menu() {
2023-01-07 14:15:53 +01:00
2023-01-09 17:36:33 +01:00
System.out.println("Willkommen bei der " + fs.getFName() + "!");
2023-01-09 17:36:33 +01:00
mainloop: while (true) {
System.out.println();
System.out.println("--------");
2023-01-09 17:59:48 +01:00
System.out.println("Hauptmen<65>");
System.out.println("1 -> Alle Roboter anzeigen");
System.out.println("2 -> Einen neuen Roboter erstellen");
2023-01-09 17:59:48 +01:00
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();
2023-01-09 17:36:33 +01:00
switch (input) {
2023-01-09 18:29:56 +01:00
case 1:
showRobots();
break;
2023-01-09 17:36:33 +01:00
case 2:
buildRobot();
break;
case 3:
choseRobot();
break;
case 4:
break mainloop;
}
2023-01-09 17:36:33 +01:00
System.out.println();
2023-01-09 17:36:33 +01:00
}
}
2023-01-09 18:29:56 +01:00
/**
* Zeigt alle erstellten Roboter an
*/
private void showRobots() {
2023-01-09 17:59:48 +01:00
String[] robots = fs.getRobotStock();
if (robots.length > 0) {
2023-01-09 18:02:30 +01:00
System.out.println("Folgende Roboter sind verfügbar:");
2023-01-09 17:59:48 +01:00
for (String r : robots) {
System.out.println(r);
}
} else {
System.out.println("Bisher keine Roboter konstruiert.");
}
}
2023-01-09 18:29:56 +01:00
/**
* Gibt dem Nutzer die M<EFBFBD>glichkeit C3PO oder R2D2 zu bauen
*/
private void buildRobot() {
2023-01-09 17:36:33 +01:00
String name = null;
System.out.println("Sie haben sich dazu entschieden einen Roboter zu bauen. "
2023-01-09 17:59:48 +01:00
+ "Wenn Sie einen Roboter vom Typ R2D2 bauen m<>chten, dann dr<64>cken Sie die (1). "
+ "Wenn Sie einen Roboter vom Typ C3PO bauen m<>chten, dann dr<64>cken Sie die (2).");
2023-01-09 17:36:33 +01:00
System.out.print("> ");
2023-01-09 17:36:33 +01:00
int robotType = Integer.parseInt(sc.nextLine());
if (robotType > 2 || robotType < 1) {
System.out.println(
2023-01-09 17:59:48 +01:00
"Es stehen nur (1) oder (2) bei der Auswahl des Robotertypen zur verf<72>gung. Bitte erneut w<>hlen.");
2023-01-09 17:36:33 +01:00
System.out.println();
buildRobot();
} else {
System.out.println();
// Namensgabe
boolean realname = true;
while (realname) {
2023-01-09 17:59:48 +01:00
System.out.println("Welchen Namen m<>chten Sie dem Roboter geben.");
2023-01-09 17:36:33 +01:00
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.");
}
}
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
/**
* Nutzer kann durch die EIngabe der Seriennummer den Roboter aussuchen, der
* genutzt werden soll
*/
private void choseRobot() {
2023-01-09 17:36:33 +01:00
2023-01-09 17:59:48 +01:00
System.out.println("Geben Sie die Seriennummer des Roboters ein, mit dem Sie arbeiten m<>chten.");
2023-01-09 17:36:33 +01:00
System.out.print("> ");
2023-01-09 17:36:33 +01:00
int id = Integer.parseInt(sc.nextLine());
System.out.println();
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
if (!fs.containsRobot(id))
System.out.println("Es exisitiert kein Roboter mit der Seriennummer " + id + " .");
else
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
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<75>ck ins Hauptmen<65>");
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
System.out.print("> ");
int input = Integer.parseInt(sc.nextLine());
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
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;
}
2023-01-09 18:29:56 +01:00
}
2023-01-09 17:36:33 +01:00
}
2023-01-09 17:36:33 +01:00
2023-01-09 15:24:30 +01:00
/**
* Gibt den Status des Roboters an
2023-01-09 17:36:33 +01:00
*
2023-01-09 15:24:30 +01:00
* @param id
*/
private void robotStatus(int id) {
2023-01-09 17:36:33 +01:00
boolean status = fs.powerStatus(id);
if (status == true)
System.out.println("Der Roboter ist angeschaltet.");
2023-01-09 17:36:33 +01:00
else
System.out.println("Der Roboter ist ausgeschaltet.");
}
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
/**
* 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.");
2023-01-09 17:36:33 +01:00
2023-01-09 15:24:30 +01:00
System.out.println();
}
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
/**
* Der Roboter kann, nachdem ihm eine Zahlenfolge gegeben wurde, diese je nach
* Typ verarbeiten und zur<EFBFBD>ckgeben
*
* @param id
*/
private void robotSpeak(int id) {
2023-01-09 17:36:33 +01:00
ArrayList<Integer> arrayNumbers = new ArrayList<>();
boolean next = true;
2023-01-09 17:36:33 +01:00
System.out.println(
2023-01-09 17:59:48 +01:00
"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);
2023-01-09 17:36:33 +01:00
int i = 2;
while (next) {
2023-01-09 17:36:33 +01:00
System.out.println("Geben Sie die " + i + ". Zahl Ihrer Folge ein.");
2023-01-09 15:42:33 +01:00
num = Integer.parseInt(sc.nextLine());
arrayNumbers.add(num);
2023-01-09 17:36:33 +01:00
System.out.println(
2023-01-09 17:59:48 +01:00
"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());
2023-01-09 17:36:33 +01:00
if (election == 1) {
i++;
next = true;
2023-01-09 17:36:33 +01:00
} else {
next = false;
2023-01-09 17:36:33 +01:00
int[] numbers = arrayNumbers.stream().mapToInt(j -> j).toArray();
String output;
2023-01-09 15:24:30 +01:00
try {
output = fs.robotInstructions(id, numbers);
System.out.println("Der Roboter gibt folgendes aus: " + output);
2023-01-09 17:36:33 +01:00
} catch (RobotException e) {
2023-01-09 15:24:30 +01:00
System.out.println("Fehler!");
}
}
2023-01-09 17:36:33 +01:00
}
2023-01-09 17:36:33 +01:00
}
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
/**
* Gibt die letzte Fehlermeldung des Roboters zur<EFBFBD>ck
*
* @param id
*/
private void lastError(int id) {
System.out.println(fs.robotBlackbox(id));
2023-01-09 17:36:33 +01:00
}
2023-01-09 17:36:33 +01:00
2023-01-09 18:29:56 +01:00
/**
* Gibt die Informationen eines Roboters zur<EFBFBD>ck
*
* @param id
*/
private void robotData(int id) {
System.out.println(fs.robotInfo(id));
}
2023-01-09 17:36:33 +01:00
}