====== Textadventure ====== Textadventures sind Computerspiele der „ersten Generation“, also Spiele, bei denen der Spieler nur über Texteingaben mit dem Computer kommunizieren kann. Seine Figur steuert er über Befehle wie "go", "east", "west", "pick up", "turn", etc. Die ersten Textadventures waren Don Woods’ [[wpde>Collossal Cave Adventure]] (1976) und das von MIT-Studenten programmierte Zork (1977). Wir wollen ein solches Textadventure als objektorientiertes Programm erstellen. ===== Raumplan ===== Spiele dazu zunächst das Textadventure Schule und erstelle einen Raumplan. ===== UML Objektdiagramm ===== [[Objekt-orientierte Programmierung#objektdiagramme|UML-Objektdiagramme]] stellen Objekte und ihren Zustand zu einem bestimmten Zeitpunkt zur Ausführung des Programmes dar. Wir können an einem //Beispiel mit Zügen// erkennen, welche Objekte, Attribute und Methoden sich erkennen lassen. - Informiere dich über den Aufbau und Zweck eines solchen Diagramms. - Erstelle eines mit den Objekten unseres Textadventures. ===== Klassen ===== Verschiedene Objekte, wie etwa der Flur oder das Lehrerzimmer, haben Eigenschaften gemeinsam. Die Gemeinsamkeiten werden in Klassen zusammengefasst. Die lassen sich grafisch in einem [[Objekt-orientierte Programmierung#klassendiagramme|Klassendiagramm]] darstellen. Zusätzlich werden [[edu:Methoden]] aufgeführt, die auf Objekten (Instanzen) der Klassen aufgerufen werden können. //Kapitel 8: Objektorientierte Programmierung// in dem Buch //Raspberry Pi programmieren mit Python// beschreibt, wie die Objekt-Orientierte Programmierung in [[Python]] realisiert wurde. ==== Aufgaben ==== - Wie sind Klassen in einem Klassendiagramm aufgebaut? - Welchem Zweck dienen Klassen? - Erstelle ein Klassendiagramm für die Klassen Raum und Spieler und veröffentliche das Ergebnis. - Was ist der Unterschied zwischen einem Objekt und einer Klasse? - Wie ist der Unterschied im Objektdiagramm und Klassendiagramm erkennbar? - Implementiere die Klasse Raum und veröffentliche das Ergebnis. ==== Verwendung der Klassen ==== - Benutze nun die erstellten Klassen "Raum" und "Spieler" und erstelle die Objekte aus dem Spiel. Schreibe auch die Methode für das Event des Buttons. - Veröffentliche dein Ergebnis. - Ergänze das Spiel um drei weitere Räume. Dir fallen bestimmt auch andere Ergänzungen ein, um das Spiel interessanter zu gestalten. ==== Übungen zu Klassen ==== - Markiere im Quelltext der Klasse Raum alle Bezeichner von Klassen((In C# sind Datentypen immer objektbasiert. So sind z.B. ''int'' oder ''string'' Aliase für die entsprechenden Klassen aus ''System''. Mehr Infos in [[wpde>Sprachelemente_von_C-Sharp#Datentypen_und_Speicherbedarf]])) rot, von Methoden grün, von Objekten gelb und von Attributen blau. Müssen manche Bezeichner in mehreren Farben markiert werden? - Bearbeite die Übungen auf dem //Arbeitsblatt//. ===== Sequenzdiagramme ===== [[objekt-orientierte_programmierung#sequenzdiagramme|Sequenzdiagramme]] können einen konkreten Ablauf in einem Programm darstellen. Zu Beginn unseres Programmes wird die Welt erstellt. Dabei sind verschiedene Klassen beteiligt. Diese Erschaffung der Spielwelt sollen nun genauer untersucht werden. - Informiere dich über Sequenzdiagramme. - Was stellen Sequenzdiagramme dar? - Welchen Zweck haben Sequenzdiagramme? - Erstelle ein Sequenzdiagramm für die Erschaffung der Spielwelt und veröffentliche es. ==== Übung Diagrammelemente ==== Benenne die mit Pfeilen und roten Ziffern bezeichneten Elemente des folgenden Sequenzdiagramms. {{:schule:prog:sequqnzdiagramm-elemente.png?direct&200|}} ==== Übung Personen und Gruppe ==== Person peter = new Person("peter","1"); Person petra = new Person("petra","2"); Gruppe gruppe =new Gruppe(); gruppe.addPerson(peter); gruppe.addPerson(petra); gruppe.removePerson(peter); - Die Klasse Gruppe verwaltet die Personen intern in einer Liste (Klasse ''List''). - Beim Instanziieren einer Gruppe, wird die Liste erzeugt. - Das Hinzufügen und Entfernen von Personen zu einer Gruppe wird an die Liste delegiert. - Erstelle für den obigen Quelltext ein Sequenzdiagramm. ===== Aktivitätsdiagramme ===== Mit [[objekt-orientierte_programmierung?&#aktivitaetsdiagramme|UML-Aktivitätsdiagrammen]] kann der Ablauf einer Methode grafisch beschrieben werden. - Informiere dich über Aktivitätsdiagramme. - Wie sind diese Diagramme aufgebaut? - Worin unterscheiden sie sich von Sequenzdiagrammen? - Was sind die Gemeinsamkeiten mit Sequenzdiagrammen? - Erstelle ein Aktivitätsdiagramm für den OK-Button und veröffentliche deine Ergebnisse. - Bearbeite die //Aufgabe Fluggast// ===== Spielwelt aus Datei laden ===== Die Spielwelt ist derzeit fest in den Quelltext programmiert und lässt sich nicht während der Laufzeit des Programms ändern. Wir wollen das Spiel nun erweitern. Die Spielwelt soll über einen Menüpunkt zur Laufzeit [[Dateioperationen|geladen]] werden. - Erstelle eine Menüleiste mit Hilfe eines ''MenuStrip''. - Füge den Menüpunkt //Datei -> Spielwelt laden// hinzu. - Überlege, wie eine Textdatei aufgebaut sein könnte, aus der eine Spielwelt geladen werden kann. Veröffentliche dein Ergebnis. - Erstelle die Textdatei für die derzeitigen Räume gemäß des gewählten Formates. - Programmiere die Methoden zum [[Dateioperationen|Laden]] der Welt aus der Datei und veröffentliche deine Ergebnisse. **Tipp:** Wenn dir kein Format für die Textdatei einfällt, kannst du das Format in der Fußnote verwenden.(( Die Textdatei beschreibt die Spielwelt des Textadventures. Zunächst werden alle Räume mit einem Namen und einer Beschreibung aufgelistet -- getrennt durch ein Semikolon. Es folgen die Verbindungen zwischen den Räumen. Zuerst wir der Raum genannt, der verbunden werden soll. Dahinter folgen die angrenzenden Räume in nördlicher, östlicher, südlicher und westlicher Richtung -- jeweils getrennt durch ein Semikolon. Flur;Du stehst in einem leeren Flur. Lehrerzimmer;Du betrittst das Lehrerzimmer. Dieses ist unheimlich und groß. In der Ecke steht eine Kaffeemaschine. Abstellkammer;Du öffnest eine Abstellkammer. Die Kammer ist leer und dunkel. Computerraum;Du gehst in den Computerraum. Alle Rechner laufen, der Raum ist leer. Flur;Lehrerzimmer;Abstellkammer;Computerraum; Lehrerzimmer;;;Flur; Abstellkammer;;;;Flur Computerraum;Flur;;; )) ===== Links ===== * [[http://web.mit.edu/mprat/Public/web/Terminus/Web/main.html|Terminus]] ist eine spannende Mischung aus Kommandozeile und Textadventure. Auch das [[http://www.avausadventure.com/|Avaus Adventure]] passt in diese Kategorie. * Ein [[wpde>Roguelike]] ist eine textbasierte Art von Computerspiele, die viele unterschiedliche Aspekte der Spielprogrammierung adressieren. Der Vortrag [[https://media.ccc.de/v/31c3_-_6579_-_en_-_saal_g_-_201412291245_-_lightning_talks_day_3_-_theresa#video&t=1025|roguelike and building one]]((Ein Lightning Talk des 31C3.)) beschreibt, wie man ein solches Spiel erstellen kann. Das wohl komplexeste Spiel in dieser Richtung ist [[https://en.wikipedia.org/wiki/Dwarf_Fortress|Dwarf Fortress]]. * Was in modernen Textadventures möglich ist, zeigt z. B. das Spiel [[http://ifwizz.de/allein-mit-kai-%282010-de%29.html|Allein mit Kai]] aus dem Jahr 2010. ---- [[privat:Textadventure-loesungen|Lösungen]]