Blatt 04: Calculator und DevDungeon (Lambda-Ausdrücke)

(1 Punkt)

Ihr Code soll einheitlich formatiert und dokumentiert sein. Sie können beides prüfen: ./gradlew spotlessCheck für die Formatierung und ./gradlew checkstyleMain für die Dokumentation1 mit Javadoc.2 Während Sie die Dokumentation bei Fehlern manuell anpassen müssen (siehe Lektion “Javadoc”), können Sie mit ./gradlew spotlessApply den Code automatisch formatieren lassen - tun Sie das am besten vor jedem Commit.

A04.1: Javadoc-Kommentare (10%)

Gute Javadoc-Kommentare schreiben erfordert Übung. Schauen Sie sich die in Commit Dungeon-CampusMinden/Dungeon/commit/46530b6 neu hinzugefügte Datei code/core/src/controller/ControllerLayer.java an.

Diskutieren Sie jeweils, was Ihnen an der Dokumentation dieser Klasse auffällt: Was gefällt Ihnen, was stört Sie? Schlagen Sie Verbesserungen vor.

A04.2: Anonyme Klassen und Lambda-Ausdrücke (40%)

Klonen Sie die Vorgaben "Calculator" und laden Sie das Projekt als Gradle-Projekt in Ihre IDE.

Im Package calculator finden Sie einige Interfaces und Klassen, mit denen man einen einfachen Taschenrechner modellieren kann: Dieser kann einfache mathematische Operationen auf zwei Integern ausführen.

In der Klasse calculator.Calculator finden Sie vier mit TODO markierte Stellen in der Methode setupOperationSelector:

  1. Erstellen Sie eine neue Java-Klasse Sub, die das Interface Operation implementiert und eine Subtraktion bereitstellt. Erweitern Sie den Calculator und binden Sie eine Instanz dieser Klasse ein. Nutzen Sie hier keine anonymen Klassen oder Lambda-Ausdrücke.
  2. Erstellen Sie eine weitere Operation "Mul" (Multiplikation von zwei Integern). Nutzen Sie dazu eine passende anonyme Klasse.
  3. Erstellen Sie eine weitere Operation "Div" (Integerdivision). Erstellen Sie einen passenden Lambda-Ausdruck.
  4. Für die JComboBox operationSelector wird ein ActionListener mit Hilfe einer anonymen Klasse definiert. Konvertieren Sie dies in einen entsprechenden Lambda-Ausdruck.

A04.3: DevDungeon: Zerbrechende Tiles und Speed Potions (50%)

Klonen Sie das Projekt DevDungeon und laden Sie es in Ihrer IDE als Gradle-Projekt. Betrachten Sie das Sub-Projekt "devDungeon". Dies ist ein von einem Studierenden (@Flamtky) erstelltes Spiel mit mehreren Leveln, in denen Sie spielerisch verschiedene Aufgaben in-game und ex-game lösen müssen.

Starten Sie den DevDungeon mit ./gradlew devDungeon:runDevDungeon. Spielen Sie sich für diese Aufgabe durch das erste Level ("Damaged Bridge")3.

Ziel ist es, die mysteriöse Brücke in der Mitte des ersten Levels lebendig zu überqueren. Beobachten Sie die Startsequenz: Was fällt ihnen an dem Monster auf, dass Sie ganz am Anfang angreifen will? Sie finden weitere Hinweise in den Briefkästen und über die Popups ... Beachten Sie auch die Hinweise am versteckten Item. Um dieses nutzbar zu machen, müssen Sie in den Java-Code des Spiels gehen (im src/-Unterordner im Sub-Projekt "devDungeon") und den Effekt für das Item reparieren (implementieren). Analysieren Sie den Code für das Item und seinen Effekt, und schauen Sie sich die anderen Effekte im selben Package an. Schreiben Sie nun Code für die mit "TODO" markierte Methode des Effekts. Starten Sie dann das Spiel neu und schauen Sie, ob das Item nun funktioniert.

WICHTIG: Bevor Sie mit der Implementierung beginnen, schauen Sie sich bitte die Einführung in die Programmierung des Dungeons und die verwendete Entity-Component-System-Architektur in der Lektion Intro Dungeon an. Dort werden Ihnen Hintergründe zum Dungeon und der für diese Aufgabe relevanten Component erklärt.

Hinweis: Sie können das Demo-Level deaktivieren, indem Sie in der Klasse starter.DevDungeon das Flag SKIP_TUTORIAL auf den Wert true setzen. Damit gelangen Sie direkt in das in dieser Aufgabe relevante Level.

Hinweis: Aktuell ist das Projekt DevDungeon an einigen Stellen noch Work-in-Progress, beispielsweise fehlt häufig noch die Javadoc. Alle Gradle-Tasks, die von Checkstyle-Tasks abhängen (checkstyleMain, check, build, ...) werden deshalb fehlschlagen. Sie können den DevDungeon aber wie oben beschrieben mit ./gradlew devDungeon:runDevDungeon (bzw. über den Task devDungeon:runDevDungeon aus der IDE heraus) starten.

WICHTIG: Achten Sie bitte darauf, dass im Projektpfad keine Leerzeichen und keine Sonderzeichen (Umlaute o.ä.) vorkommen! Dies kann zu seltsamen Fehler führen. Bitte auch darauf achten, dass Sie als JDK ein Java SE 21 (LTS) verwenden.


  1. zumindest für den syntaktischen Aspekt ... ↩︎

  2. Sie können auch beides zusammen per ./gradlew check prüfen lassen. ↩︎

  3. Das erste richtige Level, also das erste Level nach dem Demo-Level. Zur Erinnerung: Das Demo-Level hatte Ihnen in Blatt 02 gezeigt, wie Sie das Spiel bedienen können. Zusätzlich gibt es die kurze Anleitung "How to play" ... ↩︎