AD Teaching Wiki:

Projektspezifikation

Abgabefrist für das Projekt ist Dienstag, der 9. August um 12:00 Uhr. Die Abgabefrist kann auf begründeten Antrag verlängert werden. Schreiben Sie dazu bitte eine Mail an Ihren Tutor bzw. Ihre Tutorin. Wir empfehlen aber sehr, das Projekt sobald wie möglich fertig zu stellen. Die Erfahrung vergangener Jahre zeigt, dass man im Programmieren schnell aus der Übung kommt und es sehr viel mehr Arbeit ist, nach einer längeren Pause wieder anzufangen.

Es gibt drei Projekte zur Auswahl:

Projekt 1: Nerdle, das Spiel

Projekt 2: Nerdle, automatischer Löser

Projekt 3: Ein Projekt eigener Wahl (nur für Fortgeschrittene)

Im Folgenden werden wir zunächst die Spiellogik von Nerdle erklären und danach die drei Projekte detaillierter beschreiben.

Die folgenden Beschreibungen sind noch nicht perfekt und können bis zur nächsten Woche noch leicht angepasst werden.
Die wesentlichen Elemente stimmen aber.

Das Spiellogik von Nerdle

Details

Projekt 1: Nerdle, das Spiel

Aufgabe: Implementieren Sie das oben beschriebene Spiel Nerdle mit Konsolengrafik.

Anforderungen (Minimum)

Folgende Anforderungen müssen Sie mindestens erfüllen, um volle Punktzahl zu erreichen.

Anforderungen (Optional)

Wenn Sie möchten, können Sie ihr Spiel um beliebige Funktionalitäten erweitern (müssen es aber nicht, um volle Punktzahl zu bekommen). Hier sind einige Ideen:

Projekt 2: Nerdle, automatischer Löser (Solver)

Aufgabe: Implementieren Sie ein Programm, das Nerdle so spielt, dass die Gleichung in möglichst wenigen Runden (Zeilen) gefunden wird.

Als Hilfestellung stellen wir Ihnen eine statische Bibliothek libnerdle.a, sowie die Header-Datei NerdleBenchmark.h. Sie finden die Dateien auf dem SVN unter public/code/projekt. Hier eine kurze Erklärung dazu:

1. Die Header-Datei enthält die Deklaration der Klasse NerdleGameState: ein Objekt dieser Klasse stellt den aktuellen Zustand des Spiels dar (bereits erfolgte Eingaben und die farblichen Unterlegungen dazu).

2. Die Header-Datei enthält außerdem die Deklaration der abstrakten Basisklasse NerdleSolver: Für Ihren Solver sollten Sie eine Unterklasse erzeugen, die insbesondere die Methode nextGuess überschreibt ("override"). Die Methode nextGuess ist die zentrale Methode Ihres Solvers: sie nimmt als Argument den aktuellen Zustand des Spiels und berechnet daraus die nächste Eingabe und gibt sie zurück.

4. Die Bibliothek libnerdle.a liefert die Implementierung einer Grafik, die den Anforderungen des Projekts 1 entspricht, und eines Benchmarks, mit dem Sie Ihren Solver auf einer von uns vorgegebenen Menge von zu erratenden Gleichungen laufen lassen können. Das Vorgehen Ihres Solvers wird dabei grafisch dargestellt (Sie können es automatisch durchlaufen lassen, anhalten und Schritt für Schritt durchgehen) und es werden Statistiken zur Qualität angezeigt, mit denen Sie nachvollziehen können, ob Ihr Solver schon den Anforderungen genügt. Sie können diese Bibliothek wie eine .o Datei einfach dazulinken oder mit -L. -lnerdle -lncurses (die Reihenfolge ist hierbei wichtig, siehe Vorlesung 2. Falls Sie Probleme hierbei haben, lesen und ggf. antworten Sie auf diesen oder diesen Forumspost). Sie müssen außerdem eine Datei NerdleBenchmarkMain.cpp schreiben, die ein Main-Funktion enthält, sodass ./NerdleBenchmarkMain <n> <mögliche Weitere Argumente...> ein Objekt ihrer Solver-Klasse erstellt und initialisiert, und dann runNerdleBenchmark(n, &yourSolverObject) (aus der Datei NerdleBenchmark.h) aufruft. Ein Template für diese Datei finden Sie ebenfalls im SVN.

5. Falls ihre NerdleBenchmarkMain neben der Länge der Expressions noch weitere Argmumente benötigt (z.B. eine Datei mit allen möglichen Expressions der Länge) sollte das aus der Usage message und Ihren Erfahrungen hervorgehen, sodass Ihr*e Tutor*in weiß, wie man den Solver aufruft.

Anforderungen (Minimum)

Folgende Anforderungen müssen Sie erfüllen, um volle Punktzahl zu erreichen.

Projekt 3: Ein Projekt Ihrer Wahl

Alternativ zu den beiden oben beschriebenen Projekten können Sie auch ein Projekt Ihrer Wahl bearbeiten.

Anforderungen (Minimum)

AD Teaching Wiki: ProgrammierenCplusplusSS2022/Projekt (last edited 2022-07-30 18:11:37 by Johannes Kalmbach)