5910
Comment:
|
3478
|
Deletions are marked like this. | Additions are marked like this. |
Line 7: | Line 7: |
'''Projekt 1: !PooSweeper (das Spiel)''' | '''Projekt 1: Sokoban (das Spiel)''' |
Line 9: | Line 9: |
'''Projekt 2: !PooSweeper (der Löser)''' | '''Projekt 2: Sokoban (der Löser)''' |
Line 13: | Line 13: |
''Alternative Namen für das Spiel von Projekt 1 und 2:'' !AlienSweeper (Aliens ausweichen, sonst wird man entführt), !LoveSweeper (Single bleiben, damit man in Ruhe arbeiten kann), !BorgSweeper (Borgs ausweichen, sonst wird man assimiliert), !MacSweeper (Fast Food ausweichen, sonst Übergewicht und Herzinfarkt), ... | |
Line 15: | Line 14: |
Im Folgendenden eine detailliertere Beschreibung der drei Projekte | Im Folgenden eine detailliertere Beschreibung der drei Projekte |
Line 17: | Line 16: |
== Projekt 1: PooSweeper (das Spiel) == | == Projekt 1: Sokoban (das Spiel) == |
Line 19: | Line 18: |
'''Kurzbeschreibung:''' Das Spiel !PooSweeper soll mit Konsolengrafik realisiert werden. | '''Kurzbeschreibung:''' Das Spiel Sokoban soll mit Konsolengrafik realisiert werden. |
Line 21: | Line 20: |
'''Hintergrund:''' Eine voll-funktionale Online-Version des Spiels findet sich zum Beispiel hier: http://minesweeperonline.com . (Mit Minen, aber das wollen wir hier nicht.) | '''Hintergrund:''' Eine voll-funktionale Online-Version des Spiels findet sich zum Beispiel hier: http://sokobanonline.com . |
Line 25: | Line 24: |
* Ein Zustand des Spiels soll mit einer Klasse ''!PooSweeperState'' realisiert werden, die eine Unterklasse der auf dem Wiki verlinkten abstrakten Klasse ''!PooSweeperStateBase'' ist. | * Einlesen einer Instanz aus einer Datei in dem hier [TODO] beschriebenen Format. |
Line 27: | Line 26: |
* Konsolengrafik (möglichst ansprechend und übersichtlich) | * Konsolengrafik (möglichst ansprechend und übersichtlich, die Anzahl Zeichen pro Zelle in x und y Richtung sollte konfigurierbar sein) |
Line 29: | Line 28: |
* Bedienung über die Maus (linke Maustaste = Zelle aufdecken, rechte Maustaste = als Poo markieren) * Dimension des Spielfeldes (Anzahl Reihen und Spalten) und Anzahl der Poos frei wählbar. Entweder über Kommandozeilenargumente, oder im Programm selber. * Auf http://minesweeperonline.com ist das erste Aufdecken immer garantiert kein Poo. In anderen Versionen kann auch mit dem ersten Aufdecken das Spiel schon zu Ende sein. Sie können sich aussuchen, welche Variante Sie implementieren. * Wie beim Originalspiel soll, falls eine Zelle aufgedeckt wird, die keine Poos in der Nachbarschaft hat, alle Zellen in der Nachbarschaft automatisch mit aufgedeckt werden. Und so weiter wenn da auch wieder eine Zelle dabei ist, die keine Poos in der Nachbarschaft hat. Siehe http://minesweeperonline.com und Vorführung in der Vorlesung. |
* Bedienung über die Tastatur mit den Pfeiltasten |
Line 41: | Line 32: |
* Bei gleichzeitigem Klick mit linker und rechter Maustaste: übrige Felder in der Nachbarschaft aufdecken, falls schon die volle Anzahl von Poos markiert. Sonst Felder nur kurz andeuten solange beide Maustasten gedrückt. Siehe http://minesweeperonline.com und Vorführung in der Vorlesung. | * Mehrere Instanzen (TODO: das sollte wohl zu den minimalen Anforderungen) |
Line 43: | Line 34: |
* Auf Knopfdruck läuft eine Schafherde über die Wiese und kackt sie voll (= zusätzliche Poos in Zellen, die noch nicht aufgedeckt sind -> dann müssen sich auch die betroffenene Zahlenangaben ändern) | * Highscore Liste |
Line 45: | Line 36: |
* Besondere grafische Effekte | == Projekt 2: Sokoban (automatischer Löser) == |
Line 47: | Line 38: |
* High Score | '''Kurzbeschreibung:''' Ein Programm, dass versucht eine gegebene Instanz zu lösen. Die unten [TODO] angegebenen Instanzen sollten dabei alle korrekt gelöst werden. |
Line 49: | Line 40: |
== Projekt 2: PooSweeper (automatischer Löser) == '''Kurzbeschreibung:''' Ein Programm, dass ein beliebiges gegebenes !PooSweeper Spiel von Anfang bis Ende automatisch durchspielt. Die Strategie sollte dabei so gut sein, dass sie unter bestimmten Bedinungen (siehe Anforderungen unten) mindestens die Hälfte aller Spiele erfolgreich löst. '''Hintergund:''' Einfach ein paar Mal Minesweeper spielen und sich allgemeine Lösungsstrategien überlegen. Es gibt dazu auch viel Material auf dem Netz, von sehr einfach bis sehr tief. |
'''Hintergund:''' TODO. |
Line 57: | Line 44: |
* Ein Zustand des Spiels soll mit einer Klasse ''!PooSweeperState'' realisiert werden, die eine Unterklasse der auf dem Wiki verlinkten abstrakten Klasse ''!PooSweeperStateBase'' ist. | * Eine Methode, die einfache [TODO: erklären] Deadlocks erkennt. |
Line 59: | Line 46: |
* Die Schritte des Lösers und der jeweilige Zustand des Spiels sollen visualisiert werden. Sie können dazu auf die auf dem Wiki bereitgestelle ''libpoo'' Bibliothek zurückgreifen (malt den aktuellen Zustand auf die Konsole). | * Ein Brute-Force Löser, der alle Möglichkeiten durchspielt, bis man einen Deadlock, eine vorherige Konfiguration oder die Lösung erreicht. |
Line 61: | Line 48: |
* Es sollen mindestens fünf prinzipiell verschiedene Strategien für den nächsten Zug implementiert sein. Beispiele für solche Strategien wurden in Vorlesung 11 vorgestellt. * Für den Beginner Level (9 x 9, 10 Poos) sollen im Durchschnitt mindestens 80% aller Spiele gewonnen werden. Für den Intermediate Level (16 x 16, 40 Poos) mindestens 50%. Und für den Expert Level (16 x 30, 99 Poos) mindestens 10%. Dabei werden nur Spiele gezählt, bei denen nicht schon der erste Zug fehlschlägt. Benutzen Sie dazu die über die libpoo bereitgestelle Funktion !PooSweeperBenchmark::evaluate, siehe Code im SVN unter public/code/projekt . |
* Die Schritte des Lösers und der jeweilige Zustand des Spiels sollen visualisiert werden. Sie können dazu auf die auf dem Wiki bereitgestelle ''libsokoban'' Bibliothek zurückgreifen. Diese stellet eine Funktion [TODO: genau spezifizieren] zur Verfügung, die für eine gegebene Instanz und eine gegeben Zugfolge, den Zustand der Instanz nach diesen Zügen malt. |
Line 71: | Line 56: |
* Ansprechendere Grafik als in der gegebenen ''libpoo''. | * Ansprechendere Grafik als in der gegebenen ''libsokoban''. |
Line 83: | Line 68: |
* Sind diese Voraussetzungen erfüllt, bitte bis Donnerstag, den 24. Juli 2014, eine kurze Mail an Ihre*n Tutor*in (mit Cc an Axel Lehmann und an Hannah Bast) mit einer kurzen Beschreibung Ihres Projektes (ein Absatz) und einer kurzen Begründung, dass es an Umfang und Komplexität mit Projekt 1 oder 2 oben vergleichbar ist (ein Absatz). | * Sind diese Voraussetzungen erfüllt, bitte bis Donnerstag, den 7. Juli 2016, eine kurze Mail an Ihre*n Tutor*in (mit Cc an Axel Lehmann und an Hannah Bast) mit einer kurzen Beschreibung Ihres Projektes (ein Absatz) und einer kurzen Begründung, dass es an Umfang und Komplexität mit Projekt 1 oder 2 oben vergleichbar ist (ein Absatz). |
Projekt zur Vorlesung '''Programmieren in C++''' im Sommersemester 2014
Es gibt drei Projekte zur Auswahl:
Projekt 1: Sokoban (das Spiel)
Projekt 2: Sokoban (der Löser)
Projekt 3: Ein Projekt eigener Wahl (nur für Fortgeschrittene)
Im Folgenden eine detailliertere Beschreibung der drei Projekte
Projekt 1: Sokoban (das Spiel)
Kurzbeschreibung: Das Spiel Sokoban soll mit Konsolengrafik realisiert werden.
Hintergrund: Eine voll-funktionale Online-Version des Spiels findet sich zum Beispiel hier: http://sokobanonline.com .
Anforderungen (Minimum): Folgende Anforderungen müssen für volle Punktzahl mindestens erfüllt sein
- Einlesen einer Instanz aus einer Datei in dem hier [TODO] beschriebenen Format.
- Konsolengrafik (möglichst ansprechend und übersichtlich, die Anzahl Zeichen pro Zelle in x und y Richtung sollte konfigurierbar sein)
- Bedienung über die Tastatur mit den Pfeiltasten
Anforderungen (optional): Hier ein paar Ideen für optionale Erweiterungen:
- Mehrere Instanzen (TODO: das sollte wohl zu den minimalen Anforderungen)
- Highscore Liste
Projekt 2: Sokoban (automatischer Löser)
Kurzbeschreibung: Ein Programm, dass versucht eine gegebene Instanz zu lösen. Die unten [TODO] angegebenen Instanzen sollten dabei alle korrekt gelöst werden.
Hintergund: TODO.
Anforderungen (Minimum): Folgende Anforderungen müssen für volle Punktzahl mindestens erfüllt sein
- Eine Methode, die einfache [TODO: erklären] Deadlocks erkennt.
- Ein Brute-Force Löser, der alle Möglichkeiten durchspielt, bis man einen Deadlock, eine vorherige Konfiguration oder die Lösung erreicht.
Die Schritte des Lösers und der jeweilige Zustand des Spiels sollen visualisiert werden. Sie können dazu auf die auf dem Wiki bereitgestelle libsokoban Bibliothek zurückgreifen. Diese stellet eine Funktion [TODO: genau spezifizieren] zur Verfügung, die für eine gegebene Instanz und eine gegeben Zugfolge, den Zustand der Instanz nach diesen Zügen malt.
- Alle Funktionalität, die mit Ein- bzw. Ausgabe zu tun hat, sollte sauber getrennt von den anderen Teilen in eigenen Methoden stehen und diese Methoden brauchen nicht getestet zu werden. Für alle anderen Methoden soll es selbstverständlich wie gehabt einen Unit Test geben.
Anforderungen (optional): Hier ein paar Ideen für optionale Erweiterungen:
- Alle möglichen fortgeschritteneren Strategien.
Ansprechendere Grafik als in der gegebenen libsokoban.
Projekt 3: ein Projekt eigener Wahl
Kurzbeschreibung: Ein Projekt eigener Wahl, das den beiden vorherigen von Umfang und Komplexität vergleichbar ist.
Hintergrund: Ihnen überlassen.
Anforderungen (Minimum):
- Ein Projekt eigener Wahl ist nur für diejeniger Kursteilnehmer*innen gedacht, die in den bisherigen Übungsblättern fast volle Punktzahl erreicht haben und die das bisher vermittelte Wissen relativ problemlos voll durchdrungen haben.
- Sind diese Voraussetzungen erfüllt, bitte bis Donnerstag, den 7. Juli 2016, eine kurze Mail an Ihre*n Tutor*in (mit Cc an Axel Lehmann und an Hannah Bast) mit einer kurzen Beschreibung Ihres Projektes (ein Absatz) und einer kurzen Begründung, dass es an Umfang und Komplexität mit Projekt 1 oder 2 oben vergleichbar ist (ein Absatz).