Skip to content

Commit c991429

Browse files
authored
clean-up: remove dungeon from homework (#1047)
Der Dungeon bzw. der DevDungeon sollte eigentlich das Narrativ für diese Veranstaltung bilden. Es stellt sich leider immer stärker heraus, dass dies nicht wirklich realistisch ist: - Abhängigkeit zu libGDX und Hardware/Betriebssystem: Im _Prinzip_ sollte alles über Gradle aufgelöst werden - aber in der Praxis hakelt es immer wieder, vor allem unter Windows. Da es bei den Übungen um eine Prüfungsleistung geht, muss nur _ein_ Student mit Problemen kommen und das Ding hat sich erledigt. Dazu kommt, dass ich keinen Support für Linux und/oder Windows leisten kann. - Komplexität der API: Von ferne betrachtet ist es entspannt: Gameloop, Systems, Components. Je näher man aber kommt, um so verschachtelter und komplexer und leider auch wirrer wird es. Wenn man selbst was umsetzen möchte, kopiert man entweder existierende Dinge oder steht (als Zweitsemestler) auf dem Schlauch. Eine schöne Illustration zu John Ousterhout's Anti-Pattern "breite Interfaces, flache Klassen" (und das noch hübsch verschachtelt). - Dokumentation: Dort wo vorhanden, wird häufig nur das über den Code bereits offensichtliche wiedergegeben. Es fehlen Erklärungen zum Kontext, zu den Designentscheidungen, zum Einsatz, ... - Die Aufgaben im DevDungeon sind schön und interessant. Die Studis werden gezwungen, den Code zu lesen und zum Lösen der Aufgabe müssen sie gar nicht mal so viel Code schreiben. Dennoch ist das Feedback nicht sooo gut: Die Studis müssen einen relativ großen Aufwand treiben, um am Ende einen Heiltrank oder so zu haben. Passt zum späteren Leben, aber zum Üben bestimmter Konzepte ist das Overhead. Eigentlich wäre der nächste Schritt, dass die Studis selbst ein Level bzw. Rätsel definieren, aber angesichts der API und der Dokumentation ist das im zweiten Semester eher aussichtslos. Die Erfahrung im Projekt zeigt, dass man mehrere Wochen bis Monate angeleitet arbeiten muss, bis man selbst Dinge hinbekommt. Da ist das Semester aber schon rum. Zudem waren die Erfahrungen im ersten Lauf ernüchternd, da die wenigsten genug Phantasie für konkrete Spielideen entwickeln und so immer nur das gleiche Monster eben anders angepinselt wurde. - Code-Qualität: Die Architektur und die API sind über weite Strecken implementierungsgetrieben und ohne erkennbare Recherche zum Stand der Technik entstanden. Es gibt immer wieder richtig gute Bausteine, aber insgesamt ist das Projekt taktisch entwickelt worden. Nach dem Ende der Projekte wird niemand freiwillig die Maintenance oder sogar Weiterentwicklung übernehmen. Dennoch eignet sich das Dungeon-Projekt an vielen Stellen als Studienobjekt (Commit-Messages, Dokumentation, API-Gestaltung, Tests, ...). Das sollte ausgebaut werden. closes #1046
1 parent 5eb255d commit c991429

File tree

4 files changed

+7
-297
lines changed

4 files changed

+7
-297
lines changed

homework/b04.md

Lines changed: 1 addition & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
---
22
author: Carsten Gips (HSBI)
33
no_beamer: true
4-
title: "Blatt 04: Stream-API & Damaged Bridge (Git Remote, Streams,
5-
Lambda-Ausdrücke)"
4+
title: "Blatt 04: Stream-API (Git Remote, Streams, Lambda-Ausdrücke)"
65
---
76

87
# Zusammenfassung
@@ -136,52 +135,6 @@ einen Starter für diese vierte Teilaufgabe.
136135

137136
Machen Sie aus der Klasse `streamapi.Student` eine Record-Klasse.
138137

139-
## DevDungeon: Zerbrechende Tiles und Speed Potions (Lambda-Ausdrücke)
140-
141-
Klonen Sie das Projekt
142-
[DevDungeon](https://github.com/Dungeon-CampusMinden/dev-dungeon) und laden Sie es
143-
in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt[^1] "devDungeon".
144-
Dies ist ein von einem Studierenden ([\@Flamtky](https://github.com/Flamtky))
145-
erstelltes Spiel mit mehreren Leveln, in denen Sie spielerisch verschiedene Aufgaben
146-
*in-game* und *ex-game* lösen müssen.
147-
148-
Starten Sie den DevDungeon mit `./gradlew devDungeon:runDevDungeon`. Spielen Sie
149-
sich für diese Aufgabe durch das **erste Level** ("Damaged Bridge")[^2].
150-
151-
Ziel ist es, die mysteriöse Brücke in der Mitte des ersten Levels lebendig zu
152-
überqueren. Beobachten Sie die Startsequenz: Was fällt ihnen an dem Monster auf,
153-
dass Sie ganz am Anfang angreifen will? Sie finden weitere Hinweise in den
154-
Briefkästen und über die Popups ... Beachten Sie auch die Hinweise am versteckten
155-
Item. Um dieses nutzbar zu machen, müssen Sie in den Java-Code des Spiels gehen (im
156-
`src/`-Unterordner im Sub-Projekt "devDungeon") und den Effekt für das Item
157-
reparieren (implementieren). Analysieren Sie den Code für das Item und seinen
158-
Effekt, und schauen Sie sich die anderen Effekte im selben Package an. Schreiben Sie
159-
nun Code für die mit "TODO" markierte Methode des Effekts. Starten Sie dann das
160-
Spiel neu und schauen Sie, ob das Item nun funktioniert.
161-
162-
**WICHTIG**: **Bevor** Sie mit der Implementierung beginnen, schauen Sie sich bitte
163-
die Einführung in die Programmierung des Dungeons und die verwendete
164-
*Entity-Component-System*-Architektur in der Lektion [Intro
165-
Dungeon](../lecture/misc/dungeon.md) an. Dort werden Ihnen Hintergründe zum Dungeon
166-
und der für diese Aufgabe relevanten Component erklärt.
167-
168-
**Hinweis**: Sie können das Demo-Level deaktivieren, indem Sie in der Klasse
169-
`starter.DevDungeon` das Flag `SKIP_TUTORIAL` auf den Wert `true` setzen. Damit
170-
gelangen Sie direkt in das in dieser Aufgabe relevante Level.
171-
172-
**Hinweis**: Aktuell ist das Projekt DevDungeon an einigen Stellen noch
173-
*Work-in-Progress*, beispielsweise fehlt häufig noch die Javadoc. Alle Gradle-Tasks,
174-
die von Checkstyle-Tasks abhängen (`checkstyleMain`, `check`, `build`, ...) werden
175-
deshalb fehlschlagen. Sie können den DevDungeon aber wie oben beschrieben mit
176-
`./gradlew devDungeon:runDevDungeon` (bzw. über den Task `devDungeon:runDevDungeon`
177-
aus der IDE heraus) starten.
178-
179-
**WICHTIG**: Achten Sie bitte darauf, dass im Projektpfad **keine Leerzeichen** und
180-
keine Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen.
181-
Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. Unter
182-
Windows ist der Einsatz von
183-
[WSL](https://learn.microsoft.com/en-us/windows/wsl/install) empfehlenswert.
184-
185138
# Bearbeitung und Abgabe
186139

187140
- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams
@@ -211,21 +164,3 @@ Windows ist der Einsatz von
211164

212165
- Deadline: 23. Mai, 08:00 Uhr
213166
- Vorstellung im Praktikum: 23. Mai
214-
215-
[^1]: Gradle-Subprojekte sind im Prinzip mehrere Java-Projekte in einem gemeinsamen
216-
Repository mit einer gemeinsamen Gradle-Basiskonfiguration. Jedes Sub-Projekt
217-
hat dann noch einmal eine eigene, die Basiskonfiguration verfeinernde
218-
Gradle-Konfiguration. Da jedes Sub-Projekt eigene Tasks mitbringen kann, muss
219-
denn der Name des Sub-Projekts dem Tasknamen vorangestellt werden:
220-
Beispielsweise muss statt `./gradlew runDevDungeon` nun
221-
`./gradlew devDungeon:runDevDungeon` aufgerufen werden. Siehe auch
222-
[Multi-Project Build
223-
Basics](https://docs.gradle.org/current/userguide/intro_multi_project_builds.html)
224-
oder [Structuring Projects with
225-
Gradle](https://docs.gradle.org/current/userguide/multi_project_builds.html).
226-
227-
[^2]: Das erste richtige Level, also das erste Level *nach* dem Demo-Level. Das
228-
Demo-Level zeigt Ihnen, wie Sie das Spiel bedienen können. Zusätzlich gibt es
229-
die kurze [Anleitung "How to
230-
play"](https://github.com/Dungeon-CampusMinden/Dungeon/blob/master/dungeon/doc/how_to_play.md)
231-
...

homework/b05.md

Lines changed: 1 addition & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
---
22
author: Carsten Gips (HSBI)
33
no_beamer: true
4-
title: "Blatt 05: Torch Riddle & Katzen-Café (Streams, JUnit, Optional\\<\\>,
5-
Visitor)"
4+
title: "Blatt 05: Katzen-Café (Streams, JUnit, Optional\\<\\>, Visitor)"
65
---
76

87
# Zusammenfassung
@@ -25,45 +24,6 @@ Die Links zu Ihren Pull-Requests mit den Lösungen geben Sie bitte immer in Ihre
2524

2625
# Aufgaben
2726

28-
## DevDungeon: Fackeln im Sturm (Umgang mit `Optional<>` und Streams)
29-
30-
Klonen Sie das Projekt
31-
[DevDungeon](https://github.com/Dungeon-CampusMinden/dev-dungeon) und laden Sie es
32-
in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies
33-
ist ein von einem Studierenden ([\@Flamtky](https://github.com/Flamtky)) erstelltes
34-
Spiel mit mehreren Leveln, in denen Sie spielerisch verschiedene Aufgaben *in-game*
35-
und *ex-game* lösen müssen.
36-
37-
Starten Sie den DevDungeon mit `./gradlew devDungeon:runDevDungeon`. Spielen Sie
38-
sich für diese Aufgabe durch das **zweite Level** ("Torch Riddle")[^1].
39-
40-
Sie befinden sich in einem Raum mit Fackeln, welche Sie per Interaktion an- und
41-
ausschalten können. Neben jeder Fackel ist ein Briefkasten, der der Fackel einen
42-
Zahlenwert zuordnet. Irgendwo führt eine Tür zu einem zunächst versteckten Raum mit
43-
einer Belohnung - aber diese Tür geht erst auf, wenn Sie (a) die richtigen Fackeln
44-
an- bzw. ausgeschaltet haben, und wenn Sie (b) die defekte Methode
45-
`TorchRiddleRiddleHandler#getSumOfLitTorches` (im Package
46-
`level.devlevel.riddleHandler`) korrekt implementiert haben. Beachten Sie die
47-
entsprechenden Hinweise im Javadoc der Methode.
48-
49-
Das Tor zum nächsten Level geht unabhängig davon erst auf, wenn Sie den
50-
Boss-Gegner[^2] in diesem Level besiegt haben ... Hierzu ist *keine* Programmierung
51-
notwendig, lediglich geschicktes Spielen und gegebenenfalls rechtzeitiges Trinken
52-
von (dann hoffentlich vorhandenen) Heil-Tränken.
53-
54-
**Hinweis**: Aktuell ist das Projekt DevDungeon an einigen Stellen noch
55-
*Work-in-Progress*, beispielsweise fehlt häufig noch die Javadoc. Alle Gradle-Tasks,
56-
die von Checkstyle-Tasks abhängen (`checkstyleMain`, `check`, `build`, ...) werden
57-
deshalb fehlschlagen. Sie können den DevDungeon aber wie oben beschrieben mit
58-
`./gradlew devDungeon:runDevDungeon` (bzw. über den Task `devDungeon:runDevDungeon`
59-
aus der IDE heraus) starten.
60-
61-
**WICHTIG**: Achten Sie bitte darauf, dass im Projektpfad **keine Leerzeichen** und
62-
keine Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen.
63-
Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. Unter
64-
Windows ist der Einsatz von
65-
[WSL](https://learn.microsoft.com/en-us/windows/wsl/install) empfehlenswert.
66-
6727
## Katzen-Café
6828

6929
Forken Sie das
@@ -153,8 +113,3 @@ Fügen Sie passende Aufrufe der beiden Visitoren in `Main#main` hinzu.
153113

154114
- Deadline: 30. Mai, 08:00 Uhr
155115
- Vorstellung im Praktikum: 30. Mai
156-
157-
[^1]: Das zweite richtige Level, also das zweite Level *nach* dem Demo-Level. Oder
158-
eben das dritte Level, wenn man das Demo-Level mitzählt :-)
159-
160-
[^2]: ... sieht aus wie eine wandelnde Kerze ...

homework/b07.md

Lines changed: 3 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
author: Carsten Gips (HSBI)
33
no_beamer: true
4-
title: "Blatt 07: Bike-Shop & Illusion Riddle (Refactoring, Javadoc)"
4+
title: "Blatt 07: Bike-Shop (Refactoring, Javadoc)"
55
---
66

77
# Zusammenfassung
@@ -34,108 +34,6 @@ an.
3434
Diskutieren Sie jeweils, was Ihnen an der Dokumentation dieser Klasse auffällt: Was
3535
gefällt Ihnen, was stört Sie? Schlagen Sie Verbesserungen vor.
3636

37-
## DevDungeon: Illusion Riddle
38-
39-
Klonen Sie das Projekt
40-
[DevDungeon](https://github.com/Dungeon-CampusMinden/dev-dungeon) und laden Sie es
41-
in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies
42-
ist ein von einem Studierenden ([\@Flamtky](https://github.com/Flamtky)) erstelltes
43-
Spiel mit mehreren Leveln, in denen Sie spielerisch verschiedene Aufgaben *in-game*
44-
und *ex-game* lösen müssen.
45-
46-
### DevDungeon: Lösen des Illusion Riddle
47-
48-
Starten Sie den DevDungeon mit `./gradlew devDungeon:runDevDungeon`. Spielen Sie
49-
sich für diese Aufgabe durch das **dritte Level** ("Illusion Riddle")[^1].
50-
51-
In diesem Level gibt es mehrere Räume, die durch Teleporter (statt Türen)
52-
miteinander verbunden sind. Beim Betreten dieser nur schwer erkennbaren dunkleren
53-
Bodenkacheln werden Sie in den nächsten Raum transportiert. Während dieser
54-
Mechanismus deterministisch ist, gibt es zusätzlich eine neue Monster-Art, die Sie
55-
mit fischähnlich aussehenden Geschossen angreift und bei einem Treffer in einen
56-
zufälligen Raum transportiert.
57-
58-
Im Level sind insgesamt drei Schalter verborgen, von denen Sie mindestens zwei
59-
finden und betätigen müssen, damit die weiteren Übergänge freigeschaltet werden. Die
60-
Reihenfolge spielt dabei keine Rolle.
61-
62-
Leider ist durch den starken *Fog of War* kaum etwas zu sehen. Auch die vielen
63-
Fackeln verbessern die Sicht nicht wirklich. Können Sie mit diesen Fackeln irgendwie
64-
interagieren?
65-
66-
Ziel ist es, den Weg zum letzten Raum des Levels zu finden und den dort wartenden
67-
Boss-Gegner zu besiegen.
68-
69-
*Tipp*: Es könnte hilfreich sein, sich eine Skizze der Räume anzufertigen. Diese
70-
sind in diesem Level bei jedem Start identisch.
71-
72-
*Tipp*: Es könnte in einem bestimmten Raum hilfreich sein, mehrfach im Kreis zu
73-
laufen ...
74-
75-
*Tipp*: Eine Code-Analyse könnte helfen. Vielleicht können Sie durch Anpassungen im
76-
Code die Sicht verbessern oder die Gesundheit Ihres Helden verbessern oder die
77-
Teleportationsgeschosse unschädlich machen? Streng genommen ist das natürlich
78-
*cheaten*, aber da Sie ja Code lesen und anpassen üben, können wir im Rahmen dieser
79-
Lehrveranstaltung darüber hinwegsehen. Erklären Sie im Praktikum, welche Änderungen
80-
Sie wo und warum vorgenommen haben und was das bewirkt.
81-
82-
**Hinweis**: Aktuell ist das Projekt DevDungeon an einigen Stellen noch
83-
*Work-in-Progress*, beispielsweise fehlt häufig noch die Javadoc. Alle Gradle-Tasks,
84-
die von Checkstyle-Tasks abhängen (`checkstyleMain`, `check`, `build`, ...) werden
85-
deshalb fehlschlagen. Sie können den DevDungeon aber wie oben beschrieben mit
86-
`./gradlew devDungeon:runDevDungeon` (bzw. über den Task `devDungeon:runDevDungeon`
87-
aus der IDE heraus) starten.
88-
89-
**WICHTIG**: Achten Sie bitte darauf, dass im Projektpfad **keine Leerzeichen** und
90-
keine Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen.
91-
Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. Unter
92-
Windows ist der Einsatz von
93-
[WSL](https://learn.microsoft.com/en-us/windows/wsl/install) empfehlenswert.
94-
95-
### DevDungeon: Refactoring der Klasse IllusionRiddleLevel
96-
97-
Analysieren Sie die Klasse `IllusionRiddleLevel` im Package `level.devlevel`,
98-
insbesondere die beiden Methoden `IllusionRiddleLevel#onTick` und
99-
`IllusionRiddleLevel#lightTorch`:
100-
101-
1. Welche *Bad Smells* können Sie hier identifizieren?
102-
103-
2. Beheben Sie die Smells durch die **schrittweise Anwendung** von den aus der
104-
Vorlesung bekannten Refactoring-Methoden. Ergänzend zu der Übersicht aus der
105-
Vorlesung finden sie unter [Refactoring
106-
Guru](https://refactoring.guru/refactoring/techniques) eine erweiterte
107-
Darstellung gängiger Refactoring-Techniken.
108-
109-
Machen Sie pro Refactoring-Schritt einen Commit, und halten Sie alle Commits in
110-
einem Pull-Request fest. An diesem können Sie im Praktikum Ihr Vorgehen
111-
vorstellen.
112-
113-
*Tipp*: Schauen Sie schlechter Namensgebung, nach redundantem Code, nach übermäßig
114-
komplexer Logik, nach Code/Logik in der falschen Klasse (am falschen Ort), nach
115-
übermäßig vielen Parametern, nach fehlendem Javadoc, ....
116-
117-
**Hinweis**: Normalerweise erstellen Sie eine Testsuite, bevor Sie mit dem
118-
Refactoring beginnen. Leider ist durch die Abhängigkeit zu libGDX und der Game-Loop
119-
das Testen im (Dev-) Dungeon nicht trivial, so dass Sie hier ausnahmsweise direkt
120-
mit dem Refactoring loslegen dürfen und auf das Erstellen einer Testsuite verzichten
121-
können.
122-
123-
### Protector-Skill für Ihren Hero
124-
125-
Erstellen Sie einen neuen Protector-Skill für den Hero und weisen Sie diesen einer
126-
Taste zu. Bei Nutzung des Skills soll ein neues Protector-Monster an einer
127-
zufälligen Position in einem bestimmten Radius um den Helden erzeugt werden. Das
128-
Protector-Monster sucht das räumlich nächste Monster, nähert sich diesem automatisch
129-
bis auf Angriffsdistanz und greift dieses dann so lange mit Feuerbällen an, bis
130-
eines der beiden Monster keine Lebenspunkte mehr hat. Der Skill soll einen Cool-Down
131-
haben, d.h. er soll erst nach einer gewissen Zeit erneut benutzbar sein.
132-
133-
Nutzen Sie diesen neuen Skill im **dritten Level** ("Illusion Riddle") und schauen
134-
Sie, ob Sie dadurch leichter zum Ausgang des Levels kommen.
135-
136-
**Hinweis**: Erinnern Sie sich an die [ECS-Architektur](../lecture/misc/dungeon.md).
137-
Schauen Sie sich u.a. die Factory `HeroFactory` und den `FireballSkill` an.
138-
13937
## Refactoring im Bike-Shop
14038

14139
Forken Sie das
@@ -167,7 +65,7 @@ strukturierten und schlecht benannten und schlecht dokumentierten Code.
16765
Vorgehen vorstellen.
16866

16967
Nach dem Refactoring sollte ein `./gradlew check` keine Probleme bzgl. Formatierung
170-
und Dokumentation[^2] mehr finden.
68+
und Dokumentation[^1] mehr finden.
17169

17270
*Tipp*: Schauen Sie schlechter Namensgebung, nach redundantem Code, nach übermäßig
17371
komplexer Logik, nach Code/Logik in der falschen Klasse (am falschen Ort), nach
@@ -203,7 +101,4 @@ komplexer Logik, nach Code/Logik in der falschen Klasse (am falschen Ort), nach
203101
- Deadline: 20. Juni, 08:00 Uhr
204102
- Vorstellung im Praktikum: 20. Juni
205103

206-
[^1]: Das dritte richtige Level, also das dritte Level *nach* dem Demo-Level. Oder
207-
eben das vierte Level, wenn man das Demo-Level mitzählt :-)
208-
209-
[^2]: d.h. Sie müssen gegebenenfalls auch Javadoc ergänzen ...
104+
[^1]: d.h. Sie müssen gegebenenfalls auch Javadoc ergänzen ...

homework/b08.md

Lines changed: 2 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,14 @@
11
---
22
author: Carsten Gips (HSBI)
33
no_beamer: true
4-
title: "Blatt 08: Bridge Guard Riddle & Syntax Highlighting (Reguläre Ausdrücke,
5-
Template-Method, Command)"
4+
title: "Blatt 08: Syntax Highlighting (Reguläre Ausdrücke, Template-Method, Command)"
65
---
76

87
# Zusammenfassung
98

109
Auf diesem Blatt üben Sie den Umgang mit regulären Ausdrücken in Java. Wir nutzen
1110
diese zusammen mit dem Template-Method-Pattern für die Implementierung eines
12-
einfachen Syntax-Highlightings, und im DevDungeon müssen Sie mit einem Brücken-Troll
13-
kämpfen und das Command-Pattern implementieren.
11+
einfachen Syntax-Highlightings.
1412

1513
::: important
1614
**Hinweis**: Bitte denken Sie daran, dass Sie spätestens seit Blatt 04 die
@@ -26,76 +24,6 @@ Die Links zu Ihren Pull-Requests mit den Lösungen geben Sie bitte immer in Ihre
2624

2725
# Aufgaben
2826

29-
## DevDungeon: Brücken-Troll
30-
31-
Klonen Sie das Projekt
32-
[DevDungeon](https://github.com/Dungeon-CampusMinden/dev-dungeon) und laden Sie es
33-
in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies
34-
ist ein von einem Studierenden ([\@Flamtky](https://github.com/Flamtky)) erstelltes
35-
Spiel mit mehreren Leveln, in denen Sie spielerisch verschiedene Aufgaben *in-game*
36-
und *ex-game* lösen müssen.
37-
38-
Starten Sie den DevDungeon mit `./gradlew devDungeon:runDevDungeon`. Spielen Sie
39-
sich für diese Aufgabe durch das **vierte Level** ("Bridge Guard Riddle")[^1].
40-
41-
In diesem Level gibt es im oberen Teil eine Art Brücke, die von einem Brücken-Troll
42-
bewacht wird.
43-
44-
![](images/bridgetroll-annot.png){width="80%"}
45-
46-
Diesen müssen Sie besiegen, um die Brücke passieren und die Belohnung (einen
47-
magischen Schild) zu bekommen. Den Schild können Sie im nächsten Level gut
48-
gebrauchen: Der Schild schützt Ihren Hero vor Schäden, auch wenn er nur einen
49-
Treffer verträgt und sich dann über eine gewisse Zeit regenerieren muss, bevor er
50-
wieder funktionstüchtig ist.
51-
52-
*Hinweis*: Sie können natürlich wie immer auch "außen herum" gehen und die Brücke
53-
vermeiden, um ins nächste Level zu kommen. Das ist aber ziemlich gefährlich, und Sie
54-
bekommen den magischen Schild nicht, den Sie für das letzte Level ziemlich dringend
55-
brauchen.
56-
57-
**Hinweis**: Aktuell ist das Projekt DevDungeon an einigen Stellen noch
58-
*Work-in-Progress*, beispielsweise fehlt häufig noch die Javadoc. Alle Gradle-Tasks,
59-
die von Checkstyle-Tasks abhängen (`checkstyleMain`, `check`, `build`, ...) werden
60-
deshalb fehlschlagen. Sie können den DevDungeon aber wie oben beschrieben mit
61-
`./gradlew devDungeon:runDevDungeon` (bzw. über den Task `devDungeon:runDevDungeon`
62-
aus der IDE heraus) starten.
63-
64-
**WICHTIG**: Achten Sie bitte darauf, dass im Projektpfad **keine Leerzeichen** und
65-
keine Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen.
66-
Bitte auch darauf achten, dass Sie als JDK ein **Java SE 21 (LTS)** verwenden. Unter
67-
Windows ist der Einsatz von
68-
[WSL](https://learn.microsoft.com/en-us/windows/wsl/install) empfehlenswert.
69-
70-
### RegExp mit dem Brücken-Troll
71-
72-
Suchen Sie den Brücken-Troll auf und sprechen Sie ihn an. Er wird Ihnen eine Reihe
73-
von Fragen zum Thema reguläre Ausdrücke stellen, die Sie korrekt beantworten müssen.
74-
75-
Machen Sie Screenshots von den Fragen und Ihren Antworten, die Sie im Praktikum
76-
vorstellen und diskutieren.
77-
78-
### Command-Pattern mit der Klasse *BridgeControlCommand*
79-
80-
Leider lässt sich der Brücken-Troll offenbar weder durch Diskussion noch durch Kampf
81-
besiegen. Aber vielleicht können Sie die Brücke "aufmachen", so dass er in die Tiefe
82-
stürzt? Die *Tiles* der Brücke bestehen aus sogenannten `PitTile`s: Wenn diese offen
83-
sind, fällt man hindurch; wenn sie geschlossen sind, kann man gefahrlos darauf
84-
treten (außer, es ist eine Verzögerung aktiviert :-) ... Allerdings müssten Sie
85-
danach die Brücke auch wieder schließen, um selbst darüber hinweg laufen zu können
86-
...
87-
88-
Schauen Sie sich die Info-Box am Eingang zur Brücke an. Der Hebel bedient mit Hilfe
89-
des Command-Patterns die Brücke. Für die *Commands* gibt es die Klasse
90-
`BridgeControlCommand` im Package `entities.levercommands`, wobei die Methode
91-
`BridgeControlCommand#execute` das *Command* ausführt und die Methode
92-
`BridgeControlCommand#undo` das *Command* wieder rückgängig macht.
93-
94-
Implementieren Sie die beiden Methoden und starten Sie das Spiel erneut.
95-
96-
**Hinweis**: Mit der Methode `Game.currentLevel().tileAt()` können Sie auf ein
97-
`Tile` an einer bestimmte Koordinate zugreifen.
98-
9927
## Syntaxhighlighting mit RegExp
10028

10129
Klonen Sie die [Vorgaben "Syntax
@@ -189,6 +117,3 @@ Kommentar brauchen Sie keine Keywords, Annotationen, Strings usw. erkennen.
189117

190118
- Deadline: 27. Juni, 08:00 Uhr
191119
- Vorstellung im Praktikum: 27. Juni
192-
193-
[^1]: Das vierte richtige Level, also das vierte Level *nach* dem Demo-Level. Oder
194-
eben das fünfte Level, wenn man das Demo-Level mitzählt :-)

0 commit comments

Comments
 (0)