#acl Claudius Korzen:read,write -All:read = Projekt "Programmieren in C++" im Sommersemester 2020 = <> Es gibt drei Projekte zur Auswahl: '''Projekt 1: 2048 (das Spiel)''' '''Projekt 2: 2048 (automatischer Löser)''' '''Projekt 3: Ein Projekt eigener Wahl (nur für Fortgeschrittene)''' Im Folgenden werden wir alle drei Projekte detaillierter beschreiben. == Projekt 1: 2048 (das Spiel) == '''Kurzbeschreibung:''' Implementieren Sie das Spiel ''[[https://play2048.co/|2048]]'' mit Konsolengrafik ('''TODO''': mit ncurses?). '''Regeln:''' Das Grundprinzip von 2048 folgt folgenden (einfachen) Regeln: * Das Spiel wird auf einem Spielbrett mit 4x4 Feldern gespielt. * Auf jedem Feld kann sich eine ''Kachel'' befinden, die mit einer Zweierpotenz (''2'', ''4'', ''16'', ''32'', ...) beschriftet ist. * Zu Beginn des Spiels befinden sich zwei Kacheln auf zwei zufällig gewählten Feldern des Spielbretts. Diese Kacheln sind jeweils mit 90% Wahrscheinlichkeit mit dem Wert ''2'' und mit 10% Wahrscheinlichkeit mit dem Wert ''4'' beschriftet. mit den Pfeiltasten nach links, nach rechts, nach oben und nach unten geschoben werden können. '''Anforderungen (Minimum):''' Folgende Anforderungen müssen Sie mindestens erfüllen, um volle Punktzahl zu erreichen: * Korrekte Implementierung (nach den oben genannten Regeln) * Farbliche Markierung der Kacheln * Punktzahl anzeigen * Anzahl Züge anzeigen * Programm beenden * Meldung anzeigen, wenn Spiel gewonnen bzw. verloren wurde. * Bedienung über die Pfeiltasten * Konsolengrafik: Darauf achten, dass die Werte in den Kacheln genug Platz haben, und dass größere Werte nicht das Design zerstören. * TODO (optional?): Undo Funktion, wobei die Anzahl Züge die man höchstens hintereinander rückgängig machen kann ein Argument in der Kommandozeile sein sollte (Default: 1). * TODO: Beliebige Spielfeldgrößen. * Sinnvolles soll selbstverständlich auf alles geachtet werden, was Sie in der Vorlesung gelernt haben: gutes Klassendesign, Trennung in .h und .cpp Dateien, const correctness, valgrind soll ohne Fehler durchlaufen, allgemein die 10 Gebote des Ü1. e Trennung von Logik und Grafik '''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: * Shuffle Mode * Animiertes Bewegungen der Kacheln * "Evil"-Kacheln: Kacheln, die keinen Wert haben aber trotzdem Platz auf dem Spielfeld brauchen. Können aufgelöst werden, wenn sie auf eine weitere Evil-Kachel treffen. == Projekt 2: 2048 (Automatischer Löser) == '''Kurzbeschreibung:''' Implementieren Sie ein Programm, das versucht 2048 automatisch zu lösen. '''Hintergund:''' '''Anforderungen (Minimum):''' '''Anforderungen (Optional):''' == Projekt 3: Ein Projekt Ihrer Wahl == '''Kurzbeschreibung:''' Alternativ zu den beiden oben beschriebenen Projekten können Sie auch ein Projekt Ihrer Wahl, das in Umfang und Komplexität vergleichbar zu den beiden Projekten ist, wählen. '''Hintergrund:''' Ist Ihnen überlassen. '''Anforderungen (Minimum):''' * Ein Projekt eigener Wahl ist nur für diejenigen Kursteilnehmer*innen gedacht, die in den bisherigen Übungsblättern fast volle Punktzahl erreicht haben und die das bisher vermittelte Wissen relativ problemlos durchdrungen haben. * Das Projekt muss in Umfang und Komplexität vergleichbar zu den beiden oben beschriebenen Projekten sein. * Sie müssen in der Lage sein, das Projekt selbstständig durchzuführen und bei eventuellen Problemen eigenständig Lösungsstrategien zu erarbeiten. Sie können bei Problemen natürlich gerne im Forum nachfragen; Sie müssen aber damit rechnen, dass wir Ihnen nicht bei jedem einzelnen Problem weiterhelfen können. * Sind diese Voraussetzungen erfüllt, schreiben Sie bitte bis spätestens Sonntag, den 26. Juli 2020, eine kurze Mail an Ihren Tutor (mit Cc an Claudius Korzen und Hannah Bast) mit einer kurzen Beschreibung Ihres Projektes (ein Absatz) und einer kurzen Begründung, warum es in Umfang und Komplexität mit Projekt 1 oder 2 vergleichbar ist (ebenfalls ein Absatz). Wir werden die bis Sonntag eingegangenen Mails dann am Montag, den 27. Juli 2020 besprechen und Ihnen dann anschließend Bescheid geben, ob wir einverstanden sind. * Sollten wir einverstanden sein, sind Sie nicht verpflichtet, dieses Projekt auch tatsächlich zu bearbeiten. Sie können jederzeit wieder zu Projekt 1 oder Projekt 2 wechseln (z.B. wenn Sie merken, dass Ihr Projekt doch zu umfangreich/schwierig/langweilig ist).