-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathHanoiController.java
More file actions
122 lines (105 loc) · 4.09 KB
/
HanoiController.java
File metadata and controls
122 lines (105 loc) · 4.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import java.util.Scanner;
/**
* HanoiController orchestriert Model (Hanoi) und View (ConsoleView).
* Verwaltet die Spielschleife und verarbeitet Benutzereingaben.
*
* @author (Ihr Name)
* @version (eine Versionsnummer oder ein Datum)
*/
public class HanoiController {
// Instanzvariablen
private Hanoi hanoi;
private ConsoleView view;
private Scanner scanner;
/**
* Konstruktor für Objekte der Klasse HanoiController
*/
public HanoiController(int anzahl) {
// Instanzvariable initialisieren
hanoi = new Hanoi(anzahl);
view = new ConsoleView();
scanner = new Scanner(System.in);
}
/**
* Fordert das Modell auf, die oberste Scheibe vom Turm `pTurm`
* zu nehmen und als aktive Scheibe zu halten. Diese Methode ist
* eine einfache Weiterleitung an `Hanoi.vonTurmNehmen(int)` und
* kapselt den direkten Zugriff auf das Modell.
*
* @param pTurm Index des Quell-Turms (0..2)
*/
private void vonTurmNehmen(int pTurm) {
hanoi.vonTurmNehmen(pTurm);
}
/**
* Legt die aktuell aktive Scheibe auf den Turm `pTurm`, falls der
* Zug gültig ist. Diese Methode leitet an
* `Hanoi.aufTurmLegen(int)` weiter und trennt View/Controller von
* den Model-Details.
*
* @param pTurm Index des Ziel-Turms (0..2)
*/
private void aufTurmLegen(int pTurm) {
hanoi.aufTurmLegen(pTurm);
}
/**
* Startet die Spielschleife. Verarbeitet Benutzereingaben interaktiv.
*/
public void spielLoop() {
System.out.println("=== Türme von Hanoi ===");
System.out.println("Ziel: Alle Scheiben von Turm 0 zu Turm 2 verschieben");
System.out.println("Regel: Größere Scheibe darf nicht auf kleinerer liegen\n");
boolean spielLaeuft = true;
while (spielLaeuft) {
view.setzeTuerme(hanoi.gibTuerme());
view.zeigeTuerme();
view.zeigeAusgewaehlteScheibe(hanoi.gibAktiveScheibe());
view.zeigeBefehle();
String eingabe = scanner.nextLine().trim();
if (eingabe.isEmpty()) {
continue;
}
String[] teile = eingabe.split(" ");
String befehl = teile[0].toLowerCase();
try {
if (befehl.equals("n")) {
if (teile.length < 2) {
System.out.println("Fehler: Turmnummer erforderlich (z.B. 'n 0')");
continue;
}
int turm = Integer.parseInt(teile[1]);
if (turm < 0 || turm > 2) {
System.out.println("Fehler: Turmnummer muss 0, 1 oder 2 sein");
continue;
}
System.out.println("\n→ Scheibe von Turm " + turm + " genommen");
vonTurmNehmen(turm);
} else if (befehl.equals("l")) {
if (teile.length < 2) {
System.out.println("Fehler: Turmnummer erforderlich (z.B. 'l 1')");
continue;
}
int turm = Integer.parseInt(teile[1]);
if (turm < 0 || turm > 2) {
System.out.println("Fehler: Turmnummer muss 0, 1 oder 2 sein");
continue;
}
System.out.println("\n→ Scheibe auf Turm " + turm + " gelegt");
aufTurmLegen(turm);
} else if (befehl.equals("z")) {
System.out.println();
} else if (befehl.equals("q")) {
System.out.println("Auf Wiedersehen!");
spielLaeuft = false;
} else {
System.out.println("Unbekannter Befehl: " + befehl);
}
} catch (NumberFormatException e) {
System.out.println("Fehler: Turmnummer muss eine Zahl sein");
} catch (Exception e) {
System.out.println("Fehler: " + e.getMessage());
}
}
scanner.close();
}
}