Skip to content
Merged
34 changes: 15 additions & 19 deletions CREDITS.md
Original file line number Diff line number Diff line change
@@ -1,42 +1,38 @@
---
no_beamer: true
no_pdf: true
---


# Credits

This is a list of external projects used to build the lecture slides and the lecture
notes for the teaching material. These are licensed under their own licences and are
not part of the CC BY-SA 4.0 licence of this project.


## Building the Lecture Slides

* [Pandoc](https://github.com/jgm/pandoc)
* [Pandoc-Lecture](https://github.com/cagix/pandoc-lecture)
* [Pandoc-Lecture-Zen](https://github.com/cagix/pandoc-lecture-zen)
* [TeX Live](http://tug.org/texlive/)
* [Beamer](https://github.com/josephwright/beamer)
* [Metropolis](https://github.com/matze/mtheme)

- [Pandoc](https://github.com/jgm/pandoc)
- [Pandoc-Lecture](https://github.com/cagix/pandoc-lecture)
- [Pandoc-Lecture-Zen](https://github.com/cagix/pandoc-lecture-zen)
- [TeX Live](http://tug.org/texlive/)
- [Beamer](https://github.com/josephwright/beamer)
- [Metropolis](https://github.com/matze/mtheme)

## Building the Lecture GitHub Preview

* [Pandoc](https://github.com/jgm/pandoc)
* [Pandoc-Lecture](https://github.com/cagix/pandoc-lecture)

- [Pandoc](https://github.com/jgm/pandoc)
- [Pandoc-Lecture](https://github.com/cagix/pandoc-lecture)

## Further Tools used

* [GNU Make](https://www.gnu.org/software/make/)
* [Pandoc Dockerfiles](https://github.com/pandoc/dockerfiles)
* [Docker](https://www.docker.com/)
* [GitHub](https://github.com/)

- [GNU Make](https://www.gnu.org/software/make/)
- [Pandoc Dockerfiles](https://github.com/pandoc/dockerfiles)
- [Docker](https://www.docker.com/)
- [GitHub](https://github.com/)

## Contributors

[This project](https://github.com/Programmiermethoden-CampusMinden/Prog2-Lecture)
has been created and is being maintained by the author
[Carsten Gips](https://github.com/cagix) and various
has been created and is being maintained by the author [Carsten
Gips](https://github.com/cagix) and various
[contributors](https://github.com/Programmiermethoden-CampusMinden/Prog2-Lecture/graphs/contributors).
338 changes: 168 additions & 170 deletions admin/exams.md

Large diffs are not rendered by default.

5 changes: 3 additions & 2 deletions admin/readme.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
---
title: "Organisatorisches"
no_pdf: true
no_beamer: true
no_pdf: true
title: Organisatorisches
---

160 changes: 85 additions & 75 deletions homework/b01.md
Original file line number Diff line number Diff line change
@@ -1,60 +1,63 @@
---
author: Carsten Gips (HSBI)
title: "Blatt 01: Hangman (Wiederholung Swing)"
no_beamer: true
title: "Blatt 01: Hangman (Wiederholung Swing)"
---

<!-- pandoc -s -f markdown -t markdown+smart-grid_tables-multiline_tables-simple_tables --columns=94 --reference-links=true b01.md -o xxx.md -->

# Zusammenfassung

Dieses Blatt ist bewusst einfach gestaltet und dient der Wiederholung Ihrer Kenntnisse aus der
LV "Programmieren 1".
Dieses Blatt ist bewusst einfach gestaltet und dient der Wiederholung Ihrer
Kenntnisse aus der LV "Programmieren 1".

Implementieren Sie in Java das Spiel [Hangman].
Implementieren Sie in Java das Spiel
[Hangman](https://en.wikipedia.org/wiki/Hangman_(game)).

# Aufgaben

## Installation JDK und IDE, Deaktivierung AI-Support

Sie benötigen für die Bearbeitung der Übungsaufgaben ein *Java Development Kit* (JDK). Wir
verwenden in der Lehrveranstaltung "Programmieren 2" aus verschiedenen Gründen die *Long-Term
Support (LTS)*-Variante, d.h. aktuell das "Java SE Development Kit 21 (LTS)" (JDK 21).
Sie benötigen für die Bearbeitung der Übungsaufgaben ein *Java Development Kit*
(JDK). Wir verwenden in der Lehrveranstaltung "Programmieren 2" aus verschiedenen
Gründen die *Long-Term Support (LTS)*-Variante, d.h. aktuell das "Java SE
Development Kit 21 (LTS)" (JDK 21).

Sofern noch nicht geschehen, installieren Sie bitte auf Ihrem Rechner **Java SE 21 (LTS)** in
einer *64-bit Version*. Wenn Sie mehrere JDKs installiert haben sollten, stellen Sie bitte
sicher, dass Sie für "Programmieren 2" tatsächlich das Java SE 21 (LTS) verwenden. Der
Anbieter des JDKs sollte keine Rolle spielen.
Sofern noch nicht geschehen, installieren Sie bitte auf Ihrem Rechner **Java SE 21
(LTS)** in einer *64-bit Version*. Wenn Sie mehrere JDKs installiert haben sollten,
stellen Sie bitte sicher, dass Sie für "Programmieren 2" tatsächlich das Java SE 21
(LTS) verwenden. Der Anbieter des JDKs sollte keine Rolle spielen.

Installieren Sie auf Ihrem Rechner eine IDE für Java Ihrer Wahl. Machen Sie sich mit der
Arbeitsweise Ihrer IDE vertraut. Wenn Sie im Verlauf des Praktikums feststellen, dass die
gewählte IDE nicht für Sie gemacht ist, können Sie jederzeit auf eine andere IDE wechseln.
Installieren Sie auf Ihrem Rechner eine IDE für Java Ihrer Wahl. Machen Sie sich mit
der Arbeitsweise Ihrer IDE vertraut. Wenn Sie im Verlauf des Praktikums feststellen,
dass die gewählte IDE nicht für Sie gemacht ist, können Sie jederzeit auf eine
andere IDE wechseln.

Da Sie das Programmierhandwerk erlernen und üben und vertiefen sollen, dürfen Sie im Rahmen
dieser Lehrveranstaltung noch keine KI-gestützten Assistenten benutzen. Bitte schalten Sie
sämtliche KI-Unterstützung wie beispielsweise Copilot, JetBrains AI Assistant, Cursor,
CodeGPT, Codeium, Tabnine, Windsurf, ... (Liste nicht vollständig) für die Bearbeitung der
Übungsaufgaben in dieser Lehrveranstaltung ab.
Da Sie das Programmierhandwerk erlernen und üben und vertiefen sollen, dürfen Sie im
Rahmen dieser Lehrveranstaltung noch keine KI-gestützten Assistenten benutzen. Bitte
schalten Sie sämtliche KI-Unterstützung wie beispielsweise Copilot, JetBrains AI
Assistant, Cursor, CodeGPT, Codeium, Tabnine, Windsurf, ... (Liste nicht
vollständig) für die Bearbeitung der Übungsaufgaben in dieser Lehrveranstaltung ab.

## Anlegen eines Java-Projektes

Legen Sie für die Bearbeitung der Aufgabe ein neues Java-Projekt in Ihrer IDE an. Achten Sie
bitte darauf, dass im Projektpfad **keine Leerzeichen** und **keine Sonderzeichen** (Umlaute
o.ä.) vorkommen! Dies kann zu teilweise seltsamen Fehler führen.
Legen Sie für die Bearbeitung der Aufgabe ein neues Java-Projekt in Ihrer IDE an.
Achten Sie bitte darauf, dass im Projektpfad **keine Leerzeichen** und **keine
Sonderzeichen** (Umlaute o.ä.) vorkommen! Dies kann zu teilweise seltsamen Fehler
führen.

Wir werden in dieser Lehrveranstaltung das Build-Tool **Gradle** verwenden, dieses aber erst
später im Verlauf der Lehrveranstaltung besprechen. Für dieses erste Übungsblatt können Sie
Ihr Projekt noch so konfigurieren, dass es ohne Build-Tool arbeitet und direkt in der IDE
kompiliert und gestartet wird.
Wir werden in dieser Lehrveranstaltung das Build-Tool **Gradle** verwenden, dieses
aber erst später im Verlauf der Lehrveranstaltung besprechen. Für dieses erste
Übungsblatt können Sie Ihr Projekt noch so konfigurieren, dass es ohne Build-Tool
arbeitet und direkt in der IDE kompiliert und gestartet wird.

Testen Sie bitte die genutzte Java-Version:

1. Konsole: Geben Sie den Befehl `java -version` auf der Konsole ein. Die Ausgabe sollte
`java version "21.0.6" 2025-01-21 LTS` (oder ähnlich) ergeben. Wichtig sind die "21" und
"LTS".
1. Konsole: Geben Sie den Befehl `java -version` auf der Konsole ein. Die Ausgabe
sollte `java version "21.0.6" 2025-01-21 LTS` (oder ähnlich) ergeben. Wichtig
sind die "21" und "LTS".
2. IDE: Erstellen Sie ein Programm, welches die Anweisung
`System.out.println(System.getProperty("java.version"));` ausführt. Beim Start über die
IDE sollte dabei die Ausgabe `21.0.6` (oder ähnlich) herauskommen. Wichtig ist die "21".
`System.out.println(System.getProperty("java.version"));` ausführt. Beim Start
über die IDE sollte dabei die Ausgabe `21.0.6` (oder ähnlich) herauskommen.
Wichtig ist die "21".

Korrigieren Sie Ihr Setup, wenn Sie andere Ausgaben erhalten.

Expand All @@ -71,26 +74,30 @@ public class Main {
}
```

Worin besteht der Unterschied zwischen dem Übersetzen und dem Starten des obigen Programms?
Wie unterscheiden Sie das in Ihrer IDE? Wie können Sie das Programm manuell auf der Konsole
übersetzen und starten? Demonstrieren Sie das live im Praktikum.
Worin besteht der Unterschied zwischen dem Übersetzen und dem Starten des obigen
Programms? Wie unterscheiden Sie das in Ihrer IDE? Wie können Sie das Programm
manuell auf der Konsole übersetzen und starten? Demonstrieren Sie das live im
Praktikum.

Worin besteht der Unterschied zwischen Compiler-Warnungen/-Fehlern und Laufzeit-Fehlern?
Erklären Sie das im Praktikum an selbst gewählten Beispielen am obigen Programm.
Worin besteht der Unterschied zwischen Compiler-Warnungen/-Fehlern und
Laufzeit-Fehlern? Erklären Sie das im Praktikum an selbst gewählten Beispielen am
obigen Programm.

Starten Sie das obige Programm im Debug-Modus Ihrer IDE. Halten Sie die Ausführung am
`System.out.println` an, verändern Sie den Wert der Variablen `version` und führen Sie dann
die nächste Anweisung (das `System.out.println`) aus. Wie beenden Sie das Programm?
Demonstrieren Sie das live im Praktikum.
Starten Sie das obige Programm im Debug-Modus Ihrer IDE. Halten Sie die Ausführung
am `System.out.println` an, verändern Sie den Wert der Variablen `version` und
führen Sie dann die nächste Anweisung (das `System.out.println`) aus. Wie beenden
Sie das Programm? Demonstrieren Sie das live im Praktikum.

## Swing und Java2D

Das Spiel soll vollständig über eine in Swing und Java2D realisierte GUI bedient werden:
Das Spiel soll vollständig über eine in Swing und Java2D realisierte GUI bedient
werden:

1. Visualisieren Sie den Zustand des Galgenmännchens per Java2D.
2. Visualisieren Sie den Zustand des zu ratenden Wortes geeignet.
3. Es muss ein Eingabefeld geben, um den nächsten Buchstaben eingeben zu können.
4. Die bisher eingegebenen Buchstaben sollen in der Reihenfolge der Eingabe angezeigt werden.
4. Die bisher eingegebenen Buchstaben sollen in der Reihenfolge der Eingabe
angezeigt werden.
5. Das Spiel soll per Knopfdruck abgebrochen und neu gestartet werden können.

## Einlesen von Textdateien
Expand All @@ -101,50 +108,53 @@ Es soll die Möglichkeit geben, eine Textdatei mit zu ratenden Wörtern einzules
2. Startverzeichnis ist der Ordner, in dem das Spiel gestartet wurde.
3. Es sollen nur Textdateien mit der Endung `.txt` ausgewählt werden können.
4. Es soll nur eine Datei ausgewählt werden können (also keine Mehrfachselektion).
5. Die ausgewählte Textdatei soll eingelesen werden (Format: pro Zeile ein Wort). Alle
eingelesenen Wörter sollen in eine Menge überführt und für das Spiel nutzbar gemacht
werden.
6. Es soll für jedes neue Spiel ein zufälliges Wort aus der Menge der eingelesenen Wörter zum
Raten ausgewählt werden.
5. Die ausgewählte Textdatei soll eingelesen werden (Format: pro Zeile ein Wort).
Alle eingelesenen Wörter sollen in eine Menge überführt und für das Spiel
nutzbar gemacht werden.
6. Es soll für jedes neue Spiel ein zufälliges Wort aus der Menge der eingelesenen
Wörter zum Raten ausgewählt werden.

## Dokumentation

Erstellen Sie ein UML-Klassendiagramm für Ihre Lösung.

## Ausprobieren von fortgeschrittenen Widgets

1. Heben Sie in der Anzeige der eingegebenen Buchstaben die korrekt geratenen Buchstaben in
grüner Farbe hervor.
1. Heben Sie in der Anzeige der eingegebenen Buchstaben die korrekt geratenen
Buchstaben in grüner Farbe hervor.
2. Passen Sie die Visualisierung des Galgenmännchens farblich an die Tageszeit an,
beispielsweise könnte es in den Nachtstunden eine Art Dark-Mode geben und tagsüber einen
Light-Mode. Alternativ könnten Sie auch die Farbe der Zeichnung mit der Uhrzeit variieren.
3. Lassen Sie den Nutzer per Slider die Schwierigkeit variieren: Steuerung der Länge des zu
ratenden Wortes und/oder Steuerung der Anzahl der erlaubten Fehlversuche.
beispielsweise könnte es in den Nachtstunden eine Art Dark-Mode geben und
tagsüber einen Light-Mode. Alternativ könnten Sie auch die Farbe der Zeichnung
mit der Uhrzeit variieren.
3. Lassen Sie den Nutzer per Slider die Schwierigkeit variieren: Steuerung der
Länge des zu ratenden Wortes und/oder Steuerung der Anzahl der erlaubten
Fehlversuche.

# Bearbeitung und Abgabe

- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams
- Abgabe:
- Post Mortem [im ILIAS] eintragen:

Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges und
nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte ein:
- Bearbeitung: Einzelbearbeitung oder bis zu 3er Teams
- Abgabe:
- Post Mortem [im
ILIAS](https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld)
eintragen:

1. Zusammenfassung: Was wurde gemacht?
2. Implementierungsdetails: Kurze Beschreibung besonders interessanter Aspekte der
Umsetzung.
3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses Problem
gelöst?
4. Was haben Sie gelernt oder (besser) verstanden?
5. Team: Mit wem haben Sie zusammengearbeitet?
Verfassen Sie im ILIAS pro Blatt und pro Team-Mitglied ein aussagekräftiges
und nachvollziehbares "*Post Mortem*". Gehen Sie dabei auf folgende Punkte
ein:

Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst und abgegeben
werden. Der Umfang des Textes soll zwischen 200 und 400 Wörtern liegen.
1. Zusammenfassung: Was wurde gemacht?
2. Implementierungsdetails: Kurze Beschreibung besonders interessanter
Aspekte der Umsetzung.
3. Was war der schwierigste Teil bei der Bearbeitung? Wie haben Sie dieses
Problem gelöst?
4. Was haben Sie gelernt oder (besser) verstanden?
5. Team: Mit wem haben Sie zusammengearbeitet?

Laden Sie hier bitte **nicht** Ihre Lösungen hoch!
Das Post Mortem muss von **jeder Person** im Team **individuell** verfasst
und abgegeben werden. Der Umfang des Textes soll zwischen 200 und 400
Wörtern liegen.

- Deadline: 25. April, 08:00 Uhr
- Vorstellung im Praktikum: 25. April
Laden Sie hier bitte **nicht** Ihre Lösungen hoch!

[Hangman]: https://en.wikipedia.org/wiki/Hangman_(game)
[im ILIAS]: https://www.hsbi.de/elearning/goto.php?target=exc_1514856&client_id=FH-Bielefeld
- Deadline: 25. April, 08:00 Uhr
- Vorstellung im Praktikum: 25. April
Loading