Bachelorarbeit am Institut f¨ ur Informatik der Freien Universit¨at Berlin, Arbeitsgruppe Software Engineering Implementierung und Erweiterung eines rhythmusbasierten Levelgenerators fu¨r 2D-Plattformer Madlen Thaleiser Matrikelnummer: 4478415 [email protected] Betreuer: Prof. Dr. Marco Block-Berlitz Berlin, 9. M¨arz 2015 Madlen Thaleiser Zusammenfassung Spiele in der heutigen Zeit sollen abwechslungsreiche, herausfordernde und interessante Level besitzen. Die Erstellung solcher Level erfordert meist mehrere Entwickler. In dieser Arbeit wird der rhythmusbasierten Levelgenerator f¨ ur 2D-Plattformer von Smith et al. vorgestellt und um Multiwege erweitert. Bei der Erweiterung werden zun¨achst zwei Ans¨atze modelliert, wie Multiwege aussehen und in ein Level integriert werden k¨onnen. Anschließend werden die von Smith et al. verwendeten prozeduralen Methoden um diese Ans¨atze erg¨ anzt. Das Konzept von Smith et al. und die Erweiterung um Multiwege sind in einem 2D-Plattformerspiel Kitty’s Adventure“ umgesetzt und erprobt wor” den. b Eidesstattliche Erkl¨ arung Ich versichere hiermit an Eides Statt, dass diese Arbeit von niemand anderem als meiner Person verfasst worden ist. Alle verwendeten Hilfsmittel wie Berichte, B¨ ucher, Internetseiten oder ¨ahnliches sind im Literaturverzeichnis angegeben, Zitate aus fremden Arbeiten sind als solche kenntlich gemacht. Die Arbeit wurde bisher in gleicher oder a¨hnlicher Form keiner anderen Pr¨ ufungskommission vorgelegt und auch nicht ver¨offentlicht. Name: Datum: Inhaltsverzeichnis 1 Einleitung 1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2 Zielsetzung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3 Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . 1 1 1 1 2 Plattformer ¨ 2.1 Kurzer geschichtlicher Uberblick . . . . . . . . . . . . . . 2.2 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3 Bestandteile eines Plattformers . . . . . . . . . . . . . . . 2.3.1 Spielfigur . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 Plattformen . . . . . . . . . . . . . . . . . . . . . . 2.3.3 Hindernisse . . . . . . . . . . . . . . . . . . . . . . 2.3.4 Sammelobjekte . . . . . . . . . . . . . . . . . . . . 2.3.5 Hilfsobjekte . . . . . . . . . . . . . . . . . . . . . . 2.3.6 Speicherpunkte . . . . . . . . . . . . . . . . . . . . 2.4 Unterscheidung 2D- zu 3D-Plattformer . . . . . . . . . . . 2.4.1 Super Mario Bros“ als Beispiel f¨ ur 2D-Plattformer ” 2.4.2 Mario 64“ als Beispiel f¨ ur 3D-Plattformer . . . . . ” 2.4.3 Fazit aus dem Vergleich . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3 3 4 5 5 6 6 7 7 7 7 8 8 8 3 Prozedurale Generierung 3.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.1 Pseudozufallszahlengenerator . . . . . . . . . . . . . . 3.2.2 Generative Grammatiken . . . . . . . . . . . . . . . . 3.2.3 Bildfilter . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.4 R¨ aumliche Algorithmen . . . . . . . . . . . . . . . . . 3.2.5 Modellierung und Simulation von komplexen Systemen 3.2.6 K¨ unstliche Intelligenz . . . . . . . . . . . . . . . . . . 3.3 Anwendungsgebiete . . . . . . . . . . . . . . . . . . . . . . . . 3.3.1 Spielbits . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.2 Spielraum . . . . . . . . . . . . . . . . . . . . . . . . . 3.3.3 Spielsystem . . . . . . . . . . . . . . . . . . . . . . . . 3.3.4 Spielszenarien . . . . . . . . . . . . . . . . . . . . . . . 3.3.5 Spieldesign . . . . . . . . . . . . . . . . . . . . . . . . 3.3.6 Abgeleitete Inhalte . . . . . . . . . . . . . . . . . . . . 3.4 Online- und Offline-Generierung . . . . . . . . . . . . . . . . 3.5 Beispiele f¨ ur prozedurale Generierung in Spielen . . . . . . . 3.5.1 Civilization V . . . . . . . . . . . . . . . . . . . . . . . 3.5.2 Borderlands . . . . . . . . . . . . . . . . . . . . . . . . 3.5.3 Rogue . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 9 9 9 10 10 10 11 11 11 11 12 12 13 14 14 15 15 15 16 17 . . . . . . . . . . . . . 4 Ans¨ atze im Bereich der Levelgenerierung 18 4.1 Erfahrungsgesteuerte Levelgenerierung . . . . . . . . . . . . . 18 4.2 Levelgenerierung mit genetischen Algorithmen . . . . . . . . . 18 4.3 Generierung auf Basis von Teill¨osungen . . . . . . . . . . . . 20 5 Rhythmusbasierte Levelgenerierung 5.1 Rhythmus als Ansatz . . . . . . . . . . . . . . . . . . . . . . 5.2 Der Levelgenerator Launchpad“ von Smith et al. . . . . . . ” 5.2.1 Rhythmus und Rhythmusgruppe . . . . . . . . . . . 5.2.2 Struktur des Generators . . . . . . . . . . . . . . . . 5.2.3 Generierung von Rhythmusgruppen . . . . . . . . . ¨ 5.2.4 Uberpr¨ ufung durch Kriterien . . . . . . . . . . . . . 5.2.5 Nachbereitung . . . . . . . . . . . . . . . . . . . . . 5.2.6 Verwendete Methoden der prozeduralen Generierung 5.3 Implementierung des Levelgenerators . . . . . . . . . . . . . 5.3.1 Allgemeine Anmerkungen . . . . . . . . . . . . . . . 5.3.2 Programmaufbau . . . . . . . . . . . . . . . . . . . . 5.3.3 Rhythmus und Rhythmusgruppe . . . . . . . . . . . 5.3.4 Kriterien und Nachbereitung . . . . . . . . . . . . . 5.3.5 Methoden der prozeduralen Generierung . . . . . . . 5.3.6 Bewertung der Implementierung . . . . . . . . . . . . . . . . . . . . . . . . . . 22 22 22 22 23 23 25 25 26 26 26 26 28 30 31 32 6 Erweiterung um Multiwege 6.1 Begriffskl¨ arung . . . . . . . . . . . . . . . . . . . . 6.2 M¨ oglichkeiten der Erweiterung . . . . . . . . . . . 6.3 Modellierung der Multiwege . . . . . . . . . . . . . 6.3.1 Simpler Multiweg . . . . . . . . . . . . . . . 6.3.2 Komplexer Multiweg . . . . . . . . . . . . . 6.4 Implementierung der Multiwege . . . . . . . . . . . 6.4.1 Implementierung des simplen Multiweges . 6.4.2 Implementierung des komplexen Multiweges 6.5 Bewertung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34 34 35 35 35 36 36 36 37 38 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 Zusammenfassung und 7.1 Zusammenfassung . 7.2 Fazit . . . . . . . . . 7.3 Ausblick . . . . . . . Ausblick 39 . . . . . . . . . . . . . . . . . . . . . . . 39 . . . . . . . . . . . . . . . . . . . . . . . 39 . . . . . . . . . . . . . . . . . . . . . . . 40 8 Quellenverzeichnis 8.1 Literatur . . . . . . 8.2 Online-Ressourcen 8.3 Spiele . . . . . . . 8.4 Sonstige Quellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 42 43 44 45 A Inhalt der DVD 46 A.1 Bachelorarbeit . . . . . . . . . . . . . . . . . . . . . . . . . . 46 A.2 Projekt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46 1 Einleitung 1 Madlen Thaleiser Einleitung 1.1 Motivation An ein Videospiel werden heutzutage hohe Anforderungen gestellt. Neben einer interessanten Spielmechanik sowie einer spannenden Geschichte soll das Spiel auch interessante und herausfordernde Level bieten. Die Gestaltung solcher Level erfordert oftmals mehrere Mitarbeiter eines Entwicklerteams. Mit der prozeduralen Generierung von Spielinhalten, d. h. der Erzeugung von Inhalten mittels einer algorithmischen Methode, k¨onnen einzelne Aspekte der Levelgestaltung ausgelagert werden, so dass Energie und Ressourcen eingespart oder auch auf andere Bereiche umverteilt werden k¨onnen. Somit w¨ are es m¨ oglich u.a. Level und R¨atsel automatisch zu generieren, welche trotz der automatischen Generierung spielbar und l¨osbar sind. 1.2 Zielsetzung Mit dem Plattformerspiel Kitty’s Adventure“, als Ergebnis dieser Arbeit, ” soll gezeigt werden, auf welche Weise die rhythmusbasierte Levelgenerierung der Arbeit von Smith et al. [9, 4] implementiert und um Multiwege erweitert werden kann. Die Spielfigur Kitty durchl¨ auft die generierten Level und ist auf der Suche nach ihrem Zuhause. Jedoch vergisst Kitty jedes mal, wie das Level aussah. Dies spiegelt die prozedurale Levelgenerierung von unterschiedlichen Leveln mit Multiwegen wieder. Die verwendeten Methoden der prozeduralen Generierung aus Abschnitt 3.2 werden erweitert und damit wird demonstriert, wie ein bestehendes Modell eines Levelgenerators um neue Aspekte erg¨anzt werden kann. Durch diese Erweiterung soll die Grundlage geschaffen werden, neue Konzepte bzw. Ans¨ atze, durch die Modifizierung der Methoden, in ein bestehendes Modell einzuf¨ ugen. F¨ ur die Arbeit und deren Ergebnis, das Plattformerspiel Kitty’s Adven” ture“, ergeben sich somit zwei Zielvorgaben: 1. Die erzeugten Level sollen spielbar sein. 2. Die Generierung der Level soll in einer m¨oglichst geringen Zeit erfolgen. 1.3 Aufbau der Arbeit Im nachfolgendem Kapitel 2 wird das Genre der Plattformerspiele dargestellt, dabei wird zun¨ achst die Begrifflichkeit des Plattformers gekl¨art. Des Weiteren wird erl¨ autert, wieso die Implementierung und deren Erweiterung sich auf den zweidimensionalen Raum beschr¨anken. 1 1.3 Aufbau der Arbeit Madlen Thaleiser Die prozedurale Generierung, deren Methoden und Anwendungsgebiete werden im Kapitel 3 betrachtet. Dabei werden f¨ ur einzelne Anwendungen Beispiele genannt sowie Beispiele prozeduraler Generierung in bestehenden Spielen vorgestellt. Spezielle Ans¨atze f¨ ur die Generierung von Leveln werden im Kapitel 4 beleuchtet. In Kapitel 5 wird zun¨ achst der Levelgenerator von Smith et al. [9, 4] erkl¨art. Anschließend wird die Implementierung selbst dargestellt. Dabei wird auf die einzelnen Phasen der Generierung bzw. auf einzelne Bestandteile des Generators eingegangen und welche Unterschiede sich bei der Implementierung von Kitty’s Adventure“ im Vergleich zum Konzept von Smith et al. ” ergeben haben. Nachdem die Implementierung des Generators im Kapitel 5 erfolgte, wird er im Kapitel 6 um Multiwege erweitert. In diesem Kapitel wird zun¨achst der Begriff des Multiweges erkl¨ art und danach werden die damit verbundenen M¨ oglichkeiten beschrieben. Aus den M¨oglichkeiten werden die Multiwege modelliert, die danach im Plattformerspiel Kitty’s Adventure“ implemen” tiert und erprobt werden. Abschließend wird im Kapitel 7 ein Fazit gezogen sowie ein Ausblick gegeben. 2 2 Plattformer 2 Madlen Thaleiser Plattformer Ob nun der Engel Vi D¨ amonen in Wings of Vi“ [30] bek¨ampft, der als Katze ” kost¨ umierte Mario in Super Mario 3D World“ [31] den Feen zur Hilfe eilt ” oder Sonic sich durch Zeit und Raum in Sonic CD“ [32] bewegt - alle diese ” Spiele haben eins gemeinsam: es sind Plattformer. Seit 2011 sind solche Spiele wieder sehr gefragt, da sie zwar ein einfaches Spielprinzip haben, dennoch sehr herausfordernd sein k¨onnen. So ist es nicht verwunderlich, dass neben neuen 3D-Spielen der großen Marken auch viele Neuauflagen alter Klassiker zu finden sind oder an den klassischen Stil angelehnte Spiele im Bereich der Indiegames entwickelt werden. Im Folgenden wird gekl¨ art, wie sich die Plattformer entwickelt haben, wie sie definiert werden und welche Bestandteile solche Spiele im wesentlichen aufweisen. Des Weiteren werden anhand von Super Mario Bros“ [40] und ” Mario 64“ [37] Unterschiede von 2D- zu 3D-Plattformern erl¨autert. ” 2.1 ¨ Kurzer geschichtlicher Uberblick 1980 ver¨ offentlichte Universal Space Panic“ [44] und begr¨ undete damit das ” Spielgenre des Plattformers. Dabei konnte sich die Spielfigur nur nach links und nach rechts bewegen, sowie die Leitern hochklettern, welche die einzelnen Ebenen verbanden. Gegnern galt es entweder auszuweichen oder sie mittels Schaufeln in ein Loch zu locken und zu erschlagen. Ziel des Spiels war es, auf die oberste Ebene zu gelangen. Ein Jahr sp¨ ater, 1981, brachte Nintendo das Arcade-Spiel Donkey Kong“ ” [42] heraus. Das Ziel war ¨ ahnlich zu Space Panic“. Es galt die oberste Etage ” zu erreichen und Pauline vor dem Affen Donkey Kong zu retten. Die Spielfigur des Jumpman“, heute besser bekannt als Mario, konnte nun nicht mehr ” nur laufen und klettern, sondern auch springen. Wegen der Erweiterung der Bewegungsm¨ oglichkeiten ums Springen wird dieses Spiel oftmals als der eigentliche Urvater des Plattformers bezeichnet. Im Verlauf der folgenden Jahre wurden verschiedene Spiele ver¨offentlicht, die das neue Genre um interessante Aspekte erweiterten. Mit Pitfall!“ [41] aus dem Jahr 1982 kam das Sidescrolling hinzu. Die Spiel” figur wurde seitlich betrachtet und wurde von der linken Seite des Spielbereiches zur rechten gesteuert. Am Ende angekommen wurden nun nicht mehr die Grafiken der einzelnen Spielbereiche neu geladen, sondern es wurde der Spielbereichausschnitt in den n¨achsten Spielbereich gerollt“. ” Ein anderer Aspekt, der hinzukam, war die Ver¨anderung im Spielverhalten. So kam 1985 mit Super Mario Bros“ die Gr¨oßenver¨anderung hinzu, sobald ” ein Pilz oder eine Feuerblume aufsammelte wurde. Damit einher ging auch, dass die Spielfigur nun neue F¨ahigkeiten aufwies. Nach Konsum eines Pilzes 3 2.2 Definition Madlen Thaleiser wuchs Mario und konnte Bl¨ocke zerst¨oren. Nahm Mario die Feuerblumme auf, wuchs er ebenfalls und konnte zudem noch Feuerb¨alle schießen. Bei dem 1990 herausgebrachten Sonic the Hedgehog“ [38] wurde der Spielfi” gur das Verhalten hinzugef¨ ugt, eingesammelte Ringe fallen zu lassen, sobald sie von einem Feind getroffen wurde. Die klassische zweidimensionale Ebene wurde schließlich 1996 mit Mario 64“ ” [37] in den dreidimensionalen Raum geholt. Nun war es innerhalb eines großen Spielbereiches m¨ oglich, M¨ unzen und Sterne zu sammeln. Aufgrund u. a. dieser Meilensteine innerhalb des Plattformer-Genres erfreuen sich Plattformerspiele einer großen Beliebtheit. Dabei ist es egal, ob es sich um eine Neuauflage eines Klassikers, einen neuen Teil der Spielreihe oder gar ein ganz neues Spiel in Anlehnung an die klassischen Plattformerspiele handelt. 2.2 Definition In der Literatur lassen sich untschiedliche Definitionen zum Begriff des Plattformers finden. So hat Wolf folgendes zur Begrifflichkeit des Plattfomers festgehalten: Games in which the primary objective requires movement through ” a series of levels, by way of running, climbing, jumping, and other means of locomotion.“ [13, S. 270] ¨ Ahnlich charakterisiert auch Koster das Genre: Platform games: any of a broad class of games where you att” empt to traverse a landscape collecting objects or touching every space on the map.“ [15, S. 249] Beide Definitionen beschreiben den Begriff auf unterschiedliche Weise. So geht Wolf auf die unterschiedlichen Bewegungsm¨oglichkeiten ein, die zum Durchqueren eines Levels verwendet werden. Koster hingegen beschreibt die Zielsetzung des Spieles, welche sich nicht nur auf das Einsammeln von Gegenst¨ anden bezieht, sondern auch auf die Erkundung des Levels. In beiden Definitionen fehlt jeweils der andere betrachtete Aspekt. Bei beiden Definitionen fehlen jedoch noch weitere Gesichtspunkte, die einen Plattformer ausmachen. So stehen nur eine begrenzte Anzahl an Versuchen in Form von Leben zur Verf¨ ugung, um Level zu absolvieren. Diese Leben werden jedoch reduziert, wenn die Spielfigur versehentlich einen Gegner ber¨ uhrt oder durch eine L¨ ucke hindurchf¨ allt. Jedoch kann durch das Einsammeln von Sammelobjekten die Anzahl der Versuche erh¨ oht werden. 4 2.3 Bestandteile eines Plattformers Madlen Thaleiser Des Weiteren fehlt die Abgrenzung, wann das Spiel beendet ist. Das Spiel ist entweder beendet, wenn keine Versuche mehr vorhanden sind oder, wenn alle Level erfolgreich durchquert worden sind. Deshalb komme ich zu dieser Definition: Ein Plattformer ist ein Spiel, bei dem die Spielfigur mittels Laufen und Springen Level durchquert und dabei mit Spr¨ ungen Hindernissen wie zum Beispiel L¨ ucken oder Feinde u ¨berwindet. Hierf¨ ur stehen eine begrenzte Anzahl an Versuchen zur Verf¨ ugung, die durch das Sammeln von bestimmten Objekten erh¨ oht werden k¨ onnen. Durch das versehentliche Ber¨ uhren von Feinden oder das Fallen durch eine L¨ ucken verringert sich die die Anzahl der Versuche. Das Spiel ist beendet, wenn keine Versuche mehr zur Verf¨ ugung stehen oder alle Level erfolgreich durchquert wurden. Wird die obige Definition mit Spielen wie zum Beispiel Super Mario Bros“ ” verglichen, l¨ asst sich im Allgemeinen sagen, dass der obige Versuch einer Definition dem Begriff des Plattformers1 in seinen wesentlichen Merkmalen gut beschreibt. Jedoch ist es unerheblich, welche Definition zugrunde gelegt wird, die Gemeinsamkeiten aller sind, dass es dem Spieler m¨oglich sein soll, das Levelgebiet mittels der Bewegungsm¨oglichkeiten des Laufens und Springens zu durchqueren und dabei Hindernissen auszuweichen bzw. diese zu eliminieren. 2.3 Bestandteile eines Plattformers Um einen Plattformer zu gestalten, der die aufgef¨ uhrten Merkmale aufweist, m¨ ussen verschiedene Spielelemente ber¨ ucksichtigt werden. Bei der Analyse von verschiedenen Spielen kristallisiert sich eine Gruppe von Spielelementen heraus, die f¨ ur die Gestaltung eines Spieles und das Leveldesign wichtig sind. Die folgende Auflistung ist an Smith et al. [12] angelehnt: 2.3.1 Spielfigur Die Spielfigur ist die Repr¨ asentation des Spielers innerhalb des Spieles. Sie weist die wichtigen Bewegungsmerkmale des Laufens und Springens auf. Beim Laufen kommt es in verschiedenen Plattformern noch zu einer Beschleunigung der Figur bei l¨angerem Halten der Bewegungstaste oder beim 1 Plattformer werden auch auf Grund der Bewegungsm¨ oglichkeiten des Springens und des Laufens als Jump’n’Run bezeichnet. 5 2.3 Bestandteile eines Plattformers Madlen Thaleiser zus¨ atzlichen Dr¨ ucken einer vorher definierten zweiten Taste. Dies erm¨oglicht dem Spieler zum Beispiel u ¨ber eine Reihe von Plattformen mit kleinen L¨ ucken zu laufen ohne herunterzufallen. In anderen Spielen kann es beim Springen noch zu Variationen kommen. Dabei k¨ onnte die Sprungweite durch das l¨angere Dr¨ ucken erh¨oht werden. Eine andere M¨ oglichkeit w¨ are, durch mehrfaches Dr¨ ucken der Sprungtaste (ggf. in Kombination mit anderen Tasten) verschiedene Spr¨ unge, zum Beispiel einen Doppelsprung, zu kreieren. Daher spielen die Eigenschaften der Spielfigur eine erhebliche Rolle beim Design von Leveln. Neben den Grundeigenschaften des Laufens und Springens besitzt die Spielfigur zumeist noch verschiedene Stadien, die sie annehmen kann und in denen sie neue Eigenschaften erh¨ alt. Ob und in welchem Stadium sich die Figur befindet, h¨ angt davon ab, ob sie Power-ups2 gesammelt hat und welche das waren. So besitzt Mario in Super Mario Bros“ drei Stadien: kleiner Mario, großer ” Mario und Feuermario. 2.3.2 Plattformen Der Begriff Plattform definiert nicht nur das Genre, sondern ist ein wesentliches Spielelement und umfasst alle Oberfl¨achen, auf denen sich die Spielfigur sicher bewegen kann. Jede Plattform hat zudem physikalische Eigenschaften: einen Reibungskoeffizienten, eine Gr¨ oße und einen Steilheitsgrad. Diese Werte k¨onnen vom Leveldesigner beliebig gesetzt werden, so dass die Gestaltung eines Weges mit unterschiedlich gewichteten Plattformen bereits interessant f¨ ur den Spieler sein kann. 2.3.3 Hindernisse Als Hindernis werden alle Elemente innerhalb des Spieles bezeichnet, die den Bewegungsablauf st¨ oren bzw. beeintr¨achtigen und ggf. der Spielfigur schaden. Daher ist es nicht verwunderlich, dass s¨amtliche Gegnertypen unter diesen Begriff fallen. Es gibt Gegner, die get¨otet werden m¨ ussen(z. B. Gumbas3 ), solche, denen man ausweichen muss (z. B. Muncher4 ) und schließlich solche, bei denen der richtige Zeitpunkt zum Durchqueren abgewartet werden muss (z. B. Thwomp5 ). 2 Ein Power-up bezeichnet ein Objekt, das die Spielfigur durch einfache Ber¨ uhrung aufnehmen kann und das die Figur mit besonderen F¨ ahigkeiten ausstattet. 3 Gumbas sind kleine braune Wesen, die der Spielfigur bei Kontakt schaden und durch einen einfachen Sprung auf den Kopf get¨ otet werden k¨ onnen. 4 Muncher sind kleine schwarze Pflanzen, die der Spielfigur bei Kontakt schaden und nicht zerst¨ orbar sind. 5 Thwomps sind herabfallende Steine, die der Spielfigur bei Kontakt schaden. 6 2.4 Unterscheidung 2D- zu 3D-Plattformer Madlen Thaleiser Neben Gegnern z¨ ahlen auch L¨ ucken und sich bewegende Plattformen dazu. Um diese verschiedenen Hindernisse zu absolvieren, muss der Spieler auf diese reagieren, in dem er ihnen entweder ausweicht oder, sofern m¨oglich, sie aus dem Spiel nimmt (z. B. durch Sprung auf den Kopf des Gegners). 2.3.4 Sammelobjekte Fast alle Plattformer besitzen ein Belohnungssystem, welches meist aus dem Sammeln von Sammelobjekten besteht. Dabei k¨onnen dies M¨ unzen, Sterne, Ringe, Power-ups oder andere Elemente sein, die dem Spieler einen kleinen Vorteil zum Beispiel in Form von einem Extraleben bringen. Diese Objekte nehmen innerhalb des Spieles die Funktion als Belohnung ein oder weisen dem Spieler auf den Weg bzw. einen alternativen Weg hin. 2.3.5 Hilfsobjekte Hilfsobjekte helfen dem Spieler ein Level zu absolvieren. Dabei wird zwischen Bewegungshilfen und Levelhilfen unterschieden. Bewegungshilfen sind Objekte, die dem Spieler neue M¨oglichkeiten in der Bewegung durch das Level geben. Dazu geh¨oren Leitern, Seile, Sprungfedern und bewegliche Trampoline. Levelhilfen hingegen k¨ onnen Schalter oder a¨hnliche Objekte sein, die das Level modifizieren und zum Bew¨altigen optional gebraucht werden. Sie k¨onnen auch dazu verwendet werden Plattformern eine R¨atselkomponente zu geben. Dies k¨ onnte zum Beispiel das Dr¨ ucken von Schaltern in einer bestimmten Reihenfolge sein. 2.3.6 Speicherpunkte Speicherpunkte markieren Punkte innerhalb des Level, die den aktuellen Levelfortschritt speichern und als Wiederbelebungspunkte (engl.: Respawnpoints) dienen, falls der Spieler ein Leben verliert. Somit muss der Spieler beim Verlust eines Lebens nicht nochmal das gesamte Level bis zur Passage spielen, bei der er umgekommen ist, sondern kann direkt bei der Ungl¨ ucksstelle starten und nochmals versuchen sie zu bew¨ altigen. 2.4 Unterscheidung 2D- zu 3D-Plattformer Im folgendem werden zwei Spiele aus der Mario-Reihe betrachtet, um die jeweiligen Merkmale des zwei- bzw. dreidimensionalen Raumes herauszuarbeiten. Dabei wird Wert auf die Punkte Weg/Spielwelt, Kamera, Ziele und Sprungr¨ atsel6 gelegt. 6 Sprungr¨ atsel stellen das Absolvieren einer Sprungpassage in einer bestimmten Reihenfolge da. 7 2.4 Unterscheidung 2D- zu 3D-Plattformer Madlen Thaleiser 2.4.1 Super Mario Bros“ als Beispiel fu ¨ r 2D-Plattformer ” In einer zweidimensionalen Spielwelt ist es Marios Aufgabe, die Level mittels Laufen und Springen zu durchqueren. Der Weg dabei ist im wesentlichen vorgegeben und mit verschiedenen Hindernissen versehen. Diese Passagen gilt es mit gut gesetzten Spr¨ ungen zu absolvieren, um ans Ende des Levels zu gelangen. Hierbei werden die Aktionen mittels Sidescrolling in einer Seitenansicht verfolgt, weshalb das L¨osen von Sprungr¨atseln recht einfach ist. 2.4.2 Mario 64“ als Beispiel fu ¨ r 3D-Plattformer ” Mit Ver¨ offentlichung von Mario 64“ [37] wird die Spielwelt in den dreidi” mensionalen Raum geholt. Mario wird in einer offenen Spielwelt gesteuert und folgt nicht mehr nur einen linearen Weg, der zum Ende vom Level f¨ uhrt. Stattdessen sollen nun verschiedenste Ziele erf¨ ullt werden. Dadurch werden Level gr¨ oßer. Das Absch¨ atzen von Spr¨ ungen macht das L¨osen von Sprungr¨ atseln schwieriger, da nun auch eine freie Kamera vorhanden ist, die das Spielgeschehen zeigt und richtig positioniert werden muss. Spiel Super Mario Bros Mario 64 Weg/Spielwelt feste Spielwelt, lineare Wege offene Spielwelt, komplexe Wege Kamera Ziele fixe Seitenansicht Absolvierung des Levels freie Kamera Absolvierung des Levels, mehrere objektbezogene Ziele Spr¨ unge gut absch¨atzbar, einfache Passagen schlecht absch¨atzbar, komplexe Passagen Tabelle 1: Zusammenfassung Unterschied 2D- zu 3D-Plattformern 2.4.3 Fazit aus dem Vergleich Aufgrund der großen Unterschiede in den betrachteten Punkten (vgl. Tabelle 1) muss eine Beschr¨ ankung auf eine der beiden Dimensionen f¨ ur das Leveldesign erfolgen. Es gibt aber auch Spiele, wie Donald Duck Quack At” tack“ [36], die beide Dimensionen verwenden, in dem sie zweidimensionale und dreidimensionale Level abwechselnd aneinanderreihen. Jedoch wird sich diese Arbeit auf das Genre des 2D-Plattformers beschr¨anken. 8 3 Prozedurale Generierung 3 Madlen Thaleiser Prozedurale Generierung 3.1 Definition Prozedurale Generierung von Inhalten und besonders von Spielinhalten ist noch ein sehr junges Forschungsgebiet, das dennoch bereits sehr umfangreich ist. Es existiert schon eine Vielzahl an wissenschaftlichen Arbeiten, die sich mit einzelnen Aspekten auseinandersetzen. Dahlskog und Togelius beschreiben prozedurale Generierung von Spielinhalten wie folgt: Procedural content generation in digital games refers to the ” automated or semi-automated creation of game content using algorithms.“ [3, Section 1: Introduction] Eine andere Definition findet sich bei Hendrikx et al.: In contrast to manual content production, Procedural Content ” Generation for Games (PCG-G) is the application of computers to generate game content, distinguish interesting instances among the ones generated, and select entertaining instances on behalf of the players.“ [2, Section 1: Introduction] Da die prozedurale Generierung sich auf viele Gebiete (zum Beispiel die Erzeugung von Texturen oder das Erzeugen von Verhalten einer nicht spielbaren Spielfigur) erstreckt, kann eine einheitliche Definition nicht bestimmt werden. Jedoch herrscht Einigkeit u ¨ber einen wesentlichen Aspekt: Durch eindeutig definierte Algorithmen sollen Inhalte automatisch am Computer erstellt werden und den Einsatz manueller Arbeit, die sonst diese Inhalte produzieren w¨ urde, verringern bzw. ersetzen. In den folgenden Abschnitten werden zun¨achst die g¨angigen Methoden beschrieben und anschließend die Anwendungsgebiete der prozeduralen Generierung von Spieleinhalten erl¨autert. 3.2 Methoden Auch wenn verschiedene Anwendung im Bereich der prozeduralen Generierung sich aufgrund der Anforderungen voneinander unterscheiden, kommen jedoch mehrere Konzepte und Techniken wiederholt zum Einsatz. In den folgenden Abschnitten werden diese gem¨aß der Klassifizierung von Hendrikx et al. [2] beschrieben. 3.2.1 Pseudozufallszahlengenerator In der Natur scheint vieles zuf¨allig zu sein, wie zum Beispiel die Gestalt von Wolken oder Blumen. Solche Zuf¨alle sollen mit Pseudozufallszahlgeneratoren nachgebildet werden. 9 3.2 Methoden Madlen Thaleiser Durch deterministische Algorithmen werden Reihen von zuf¨alligen Zahlen erzeugt. Diese Zahlenreihen sind jedoch reproduzierbar, sofern die Eingabe gleich ist. 3.2.2 Generative Grammatiken Generative Grammatiken bezeichnen einen bestimmtes Regelsystem, das alle S¨ atze einer Sprache zusammen mit ihren Strukturen erzeugt. Dies geht auf die Sprachstudien Noam Chomskys in den 1960er Jahren zur¨ uck. Auf Grund dieses Regelsystems ist es m¨oglich, eine unbegrenzte Anzahl an grammatikalisch richtigen S¨ atzen zu bilden. In der prozeduralen Inhaltsgenerierung wurde dies u ¨bernommen. Anstelle von W¨orter stehen nun einzelne Elemente, die zum Beispiel B¨aume erzeugen. Ein bekannte Grammatik, die zu den generativen Grammatiken geh¨ort, stellt das Lindenmayer-System da[18, 17]. Bei diesem System werden Einzelteile eines Objektes sukzessiv durch Produktionsregeln ersetzt. 3.2.3 Bildfilter Mittels eines Bildfilters sollen wesentliche Merkmale von Bildern verst¨arkt bzw. herausgearbeitet werden. Dies wird vorwiegend in der prozeduralen Erzeugung von Texturen verwendet. Durch bin¨are Morphologie oder Konvolutionsfilter werden die gew¨ unschten Ergebnisse erzeugt. Bei der bin¨ aren Morphologie werden Bilder in zwei Pixelwerten weiß und schwarz dargestellt. Die dadurch entstandenen Schwarz-Weiß-Bilder werden als Mengen interpretiert, wodurch die Anwendung von Mengenoperationen wie zum Beispiel Vereinigung und Schnitt m¨oglich ist. So k¨onnen durch eine ¨ Abfolge von Mengenoperationen Offnungen im Bild verst¨arkt oder geschloßen werden. Die Konvolutionsfilter berechnen jedes Pixel eines Bildes mittels einer Kernelfunktion. Dabei k¨ onnen durch verschiedene Kernelfunktionen verschiedene Ergebnisse erzielt werden. Mit dem Sobel-Operator als Kernelfunktion zum Beispiel k¨ onnen Kanten erkannt werden. 3.2.4 R¨ aumliche Algorithmen R¨ aumliche Algorithmen manipulieren einen gegebenen Raum, um Inhalte zu generieren. Dabei werden mit Struktur als Eingabeparameter dementsprechende Ausgaben erzeugt. Besonders das Aufteilen des Raumes in ein Kachelraster mit anschließender Unterteilung in Schichten findet innerhalb vom 2D-Bereich Anwendung, um die Illusion von 3D-Karten zu erzeugen. Eine andere r¨ aumliche Methode ist die Rasterteilaufteilung, bei der Objekte in immer feiner werdene Raster aufgeteilt werden, wenn zum Beispiel hineingezoomt wird. Dadurch werden immer mehr Details erzeugt. So werden 10 3.3 Anwendungsgebiete Madlen Thaleiser in einem generierten Gel¨ ande nur Bereiche in der N¨ahe des Spieler detailliert dargestellt, wohingegen das restliche Gebiet grob gerendert bleibt. 3.2.5 Modellierung und Simulation von komplexen Systemen Mit dieser Methode sollen nat¨ urliche Ph¨anom¨ene erzeugt werden, da dies mit mathematisch Methoden in einigen F¨allen nicht m¨oglich ist. Eine Technik ist dabei das Modell des zellul¨aren Automaten. Hierbei wird ein Netz aus Zellen gebildet, die jeweils einen anderen Zustand annehmen k¨onnen. Zudem werden Regeln festgelegt, nach der sich die Zellen verhalten sollen. In welchem Zustand die Zelle sich befindet, wird dadurch beeinflusst, in welcher Nachbarschaft sich die Zelle befindet, welchen aktuellen Zustand die Zelle hat und welche Regeln zu befolgen sind. Die agentenbasierte Simulation ist eine weitere Methode zur Modellierung und Simulation von komplexen Systemen. Dabei wird eine komplexe Situation mittels Individuen, den Agenten, simuliert. Die Agenten sind dabei einfach gehalten in ihrem Verhalten, jedoch durch Interaktion miteinander entstehen komplexe Abl¨ aufe. Durch Hinzuf¨ ugen von einfachen Regeln ist eine Simulation von Spielgeschehen m¨oglich. 3.2.6 Ku ¨ nstliche Intelligenz K¨ unstliche Intelligenz ist ein großes Forschungsgebiet innerhalb der Informatik. Ziel ist es dabei nat¨ urliche Intelligenz nachzubilden. Mittels genetischer Algorithmen werden Optimierungsprobleme gel¨ost, indem die biologische Evolution nachgeahmt wird. Ein anderer Ansatz zum L¨osen von Optimierungsproblemen sind neuronale Netzwerke. Nach einer Lernphase k¨ onnen diese Netzwerke gerade verlangte Inhalte generieren und gegebenenfalls die Generierung von zuk¨ unftigen Inhalten beeinflussen. Das Constraint-Satisfaction-Problem stellt die Aufgabe, einen Zustand zu finden, in dem alle vorgebenen Bedingungen erf¨ ullt wurden. Diese Aufgabe wird durch automatische Planung gel¨ost. Es werden Inhalte nur dann erzeugt, wenn die Bedingungen zu einem geplanten Grad erf¨ ullt wurden. 3.3 Anwendungsgebiete Im Folgenden werden die verschiedenen Anwendungsgebiete beschrieben, in denen die prozedurale Generierung von Spieleinhalten bereits eingesetzt wird. Dabei wird die Unterteilung von Hendrikx et al. [2] u ¨bernommen und f¨ ur jedes Teilgebiet ein Beispiel angef¨ uhrt. 3.3.1 Spielbits Spielbits sind die kleinsten Elemente eines Spieles, die den Spieler nicht direkt beeinflussen. Dazu z¨ ahlen Texturen, Sounds, Vegetation, Geb¨aude, 11 3.3 Anwendungsgebiete Madlen Thaleiser einfaches Verhalten sowie nat¨ urliche Partikelsysteme (Feuer, Wasser, Steine und Wolken). Texturen k¨ onnen zum Beispiel mittels Pseudozufallszahlengeneratoren erzeugt werden. Diese werden in Rauschfunktionen wie Perlin-Noise7 verwendet, um Muster zum Beispiel f¨ ur Holz zu erzeugen. Eine anderes Beispiel f¨ ur die prozedurale Generierung von Spielebits ist die Erzeugung von Vegetation. Verwendete Methoden sind dabei die generativen Grammatiken, r¨ aumliche Algorithmen sowie die Modellierung und Simulation von komplexen Systemen. Ein bekanntes und oft verwendetes Beispiel ist die kommerzielle Software SpeedTree [47]. In Spielen wie zum Beispiel The Witcher 3: Wild Hunt“ [29] oder auch in Filmen wie Avatar“ [45] wird ” ” SpeedTree verwendet (siehe Abbildung 1). (a) Szene aus Witcher 3: Wild Hunt“ ” (b) Szene aus Avatar“ ” Abbildung 1: Anwendungsbeispiele f¨ ur SpeedTree (Quelle: SpeedTree.22slides.com [26, 25]) 3.3.2 Spielraum Als Spielraum wird der Raum bezeichnet, in dem das Spiel stattfindet. Zu dieser Kategorie geh¨ oren Karten f¨ ur drinnen und draußen sowie Wasserelemente einer Karte (zum Beispiel Fl¨ usse). Clyde [22] hat mittels Modellierung und Simulation von komplexen Systemen die Erzeugung von richtigen Wasserfluss sowie Wassererosion gezeigt. 3.3.3 Spielsystem Ein Spielsystem kann als Interaktion von Spielraum und Spielbits verstanden werden. So wird zum Beispiel die Beziehung zwischen Vegetation und Außenkarten definiert und generiert. Mit generativen Grammatiken, Pseudozufallsnummergeneratoren sowie Modellierung und Simulation von kom¨ plexen Systemen k¨ onnen Okosysteme, Straßennetzwerke, Stadtgebiete und Einheitsverhalten erzeugt werden. 7 Perlin-Noise wurde 1982 von Ken Perlin entwickelt und ist eine fraktale Rauschfunktion auf Basis von pseudozuf¨ alligen Gradientwerten [24] 12 3.3 Anwendungsgebiete Madlen Thaleiser Mateas und Stern [16] haben mit Facade“ eine Fallstudie f¨ ur Einheitsver” halten gestaltet. Innerhalb der Anwendung reagieren zwei Charaktere auf das Verhalten des Spielers und so wird innerhalb eines Aktes ein Drama erz¨ ahlt. 3.3.4 Spielszenarien Die Ordnung bzw. der Weg, wie ein Spiel und dessen Events ablaufen sollen, wird als Spielszenario bezeichnet. Darunter fallen R¨atsel, Storyboards8 , Storys und Level. Diese werden mit Pseudozufallsgeneratoren und generativen Grammatiken erzeugt. Eine Grundlage f¨ ur die Erzeugung von Geschichten stellt die Arbeit von Propp [19] dar. Er analysierte hunderte von russischen Volksm¨archen und stellte fest, dass diese eine feste Handlungsstruktur haben und sich in Erz¨ ahleinheiten einteilen lassen. The Fairy Tale Generator“ [23] der Brown ” University kann so nach Auswahl der Erz¨ahleinheiten eine Geschichte generieren. Ein Beispiel f¨ ur eine mittels des Generators erzeugte Geschichte in Abbildung 2 zusehen. Ans¨ atze f¨ ur die prozeduralen Levelgenerierung werden im Abschnitt 4 n¨aher behandelt. Abbildung 2: Fairy Tale Generator“ der Brown University ” (Quelle: eigene Darstellung) 8 Storyboard ist die Abfolge einer Geschichte (engl. Story) in Einzelbildern und wird meist im Bereich des Films zur Erl¨ auterung eines Drehbuches verwendet. 13 3.3 Anwendungsgebiete 3.3.5 Madlen Thaleiser Spieldesign Unter Spieldesign werden Inhalte verstanden, wie etwa Regeln und Ziele ¨ eines Spieles, die Dramaturgie, Asthetik sowie das graphische Thema eines Spieles. Diese Elemente k¨ onnen als Systemdesign oder als Weltdesign unter anderem mittels Pseudozufallsgeneratoren erzeugt werden. Hartsook et al. [6] diskutiert ein System, das unter Verwendung einer von Menschen oder Computer generierten Geschichte eine Spielwelt erzeugt, so dass ein 2D-Rollencomputerspiel entsteht. 3.3.6 Abgeleitete Inhalte Unter abgeleiteten Inhalten werden Inhalte verstanden, die w¨ahrend des Spielens erzeugt und eingebunden werden. Dazu z¨ahlen News, Broadcasts und Bestenlisten. Chan et al. [11] entwickelten ein System, das automatisch die Spielerinteraktion mit der Welt in Form eines Comics zusammenfasst. Dabei werden Screenshots und ein Spielerlog verwendet. Der Spieler kann aber auch die Generation beeinflussen und selbst mittels eines Interfaces seine Spielmomente in einem Comic festhalten (siehe Abbildung 3). Abbildung 3: Beispiel einer generierten Comicseite (Quelle: Chan et al. [11]) 14 3.4 Online- und Offline-Generierung 3.4 Madlen Thaleiser Online- und Offline-Generierung Eine wichtige Unterscheidung beim Einsatz der Generierungsmethoden ist, ob Inhalte w¨ ahrend des Spieles oder w¨ahrend der Entwicklung des Spieles eingesetzt werden sollen. • Bei der Online-Generierung werden Inhalte, wie zum Beispiel Level, zur Laufzeit erzeugt oder angepasst. Dadurch variieren die erzeugten Inhalte meist, weshalb die Motivation steigt, das Spiel erneut zu spielen. Nicht alle Methoden aus Abschnitt 3.2 eignen sich f¨ ur die OnlineGenerierung, da manche zu komplex sind, in einer angemessen Zeit Inhalte zur Laufzeit zu erzeugen. • Sofern der Inhalt nach der Erzeugung nochmals kontrolliert oder modifiziert werden soll, wird die Offline-Generierung daf¨ ur verwendet. Die erzeugten Inhalte werden vor dem Einsatz innerhalb eines Spieles gepr¨ uft, ob sie spieltauglich sind und eingesetzt werden k¨onnen. Somit k¨ onnen die Inhalte ggf. nochmals generiert oder angepasst werden. Alle Methoden aus Abschnitt 3.2 eignen sich f¨ ur die Offline-Generierung. 3.5 3.5.1 Beispiele fu ¨ r prozedurale Generierung in Spielen Civilization V Im Strategiespiel Civilization V“ [33] ist es das Ziel, seine Zivilisation durch ” Jahrhunderte zu f¨ uhren und eines der verschiedenen Siegziele zu erreichen. Dabei kann das Spielgeschehen auf vorgefertigten Karten stattfinden. Jedoch hat der Spieler auch die M¨oglichkeit, Karten anhand von Parametern generieren zu lassen. Die Parameter Temperatur und Regen beeinflussen dabei zum Beispiel das Erscheinungsbild der Karte. Wird die Temperatur mit heiß“ belegt, so er” scheinen mehr Dschungelgebiete auf der Karte. Sollte dazu noch der Regenwert mit nass“ belegt sein, wird die Dschungeldichte zus¨atzlich erh¨oht. So ” kann z. B. eine vorwiegend gr¨ une Karte erzeugt werden. Einen Einblick in den Generierungsprozess gew¨ahrt der Grafikprogrammierer Kloetzli Jr. in einem Entwicklerblog [20]. In diesem wird der Einsatz der prozeduralen Generierung bei der Gestaltung einer Karte erl¨ autert. Dabei werden auf einer Karte Berge zuf¨allig erstellt. Danach werden auf der Karte in Abh¨angigkeit zur Lage die Ressourcen verteilt und die Karte in Hexagonfelder eingeteilt. Zudem werden K¨ usten anhand vorgefertigter K¨ ustenelemente erzeugt, die anschließend durch Splinekurven9 ein nat¨ urliches Aussehen erhalten. 9 Splinekurven sind nummerische Funktionen, die st¨ uckweise durch Polynome definiert werden. 15 3.5 Beispiele f¨ ur prozedurale Generierung in Spielen (a) Optionen Madlen Thaleiser (b) Karte Abbildung 4: Kartengenerierung in Civilization V“ ” (Quelle: eigene Darstellung) 3.5.2 Borderlands Eine andere Anwendung von prozeduraler Generierung von Spielinhalten findet sich im Spiel Borderlands“ [34]. Innerhalb des Ego-Shooters mit Rollen” spielelementen werden die Waffen sowie andere Ausr¨ ustungsgest¨ande mittels Generatoren erstellt. Aus einer Menge m¨ oglicher Bestandteile werden Einzelteile zuf¨allig ausgew¨ ahlt, die zusammen eine Waffe oder einen anderen Gegenstand bilden. Durch die zuf¨ allige Auswahl unterscheiden sich die erzeugten Gegenst¨ande in ihrem Aussehen und in ihren Attributen, da die Bestandteile diese Attribute beeinflussen. Abbildung 5: zufallsgenerierte Waffe aus Borderlands“ ” (Quelle: eigene Darstellung) 16 3.5 Beispiele f¨ ur prozedurale Generierung in Spielen 3.5.3 Madlen Thaleiser Rogue Das Computerspiel Rogue“ [43] von 1980 ist eines der ersten Fantasy” Rollenspiele, in dem der Spieler als Abenteuer einen Kerker erkunden muss. Dieser Kerker wird prozedural generiert, indem R¨aume an zuf¨alligen Positionen mit unterschiedlicher Gr¨oße erstellt werden und mit ebenfalls zuf¨allig generierten Korridoren verbunden werden. Die Gegner und Sch¨ atze werden abschließend hinzugef¨ ugt. Abbildung 6: generierter Kerker in ASCII des Spieles Rogue“ ” (Quelle: killscreen.daily.com [27]) 17 4 Ans¨ atze im Bereich der Levelgenerierung 4 Madlen Thaleiser Ans¨ atze im Bereich der Levelgenerierung Die Generierung von Leveln, besonders f¨ ur 2D-Plattformer, ist ein beliebtes Thema in der prozeduralen Generierung von Spielinhalten. Bei der Generierung kommen verschiedene Techniken und Ans¨atze zum Einsatz, die unterschiedliche Anforderungen stellen. 4.1 Erfahrungsgesteuerte Levelgenerierung Die erfahrungsgesteuerte Levelgenerierung will Level auf Grundlage von Spielerdaten generieren. Dabei werden oftmals neuronale Netze verwendet. Polymorph“ von Jennings-Teats et al. [8] ist ein 2D-Plattformer, welcher ein ” Level generiert und es dem Spielverhalten des Spielers w¨ahrend des Spielens anpasst. Hinter diesem dynamischen Anpassen steht ein mehrschichtiges Perzeptron10 . Dieses lernt zun¨ achst offline, welche Levelelemente wie schwer sind. Dazu werden im Vorfeld Daten gesammelt, indem rund 200 Spieler kleine Levelabschnitte spielen und die vorkommenden Levelelemente in ihrer Schwierigkeit einstufen. Anhand dieser Daten stuft das neuronale Netz alle generierten Levelelemente ein. W¨ ahrend des Spielens stuft Polymorph“ das Spielverhalten ein und f¨ ur den ” n¨ achsten Levelabschnitt werden anhand der Einstufung entsprechende Spielelemente gew¨ ahlt. Ein anderer Ansatz im Bezug auf erfahrungsgesteuerte Levelgenerierung ist, nicht das Level dem Spielverhalten anzupassen, sondern ein Level zu erzeugen, dass interessant und herausfordernd, jedoch wenig frustrierend ist. Pedersen et al. [10] wollen dies ebenfalls mit einem neuronalen Netz erreichen, jedoch verwenden sie nur ein einzelnes Perzeptron. Pedersen et al. haben zun¨ achst ebenfalls Daten gesammelt, die aber nun Informationen u ¨ber die verwendeten L¨ ucken, vorkommenden Spielelemente und die Spielerlebnisse der Spieler beinhalten. Anhand dieser Daten werden drei Hauptmerkmale (Spaß, Frustration und Herausforderung) in Abh¨angigkeit zueinander berechnet, wobei eine bestimmte Verteilung angestrebt wird. Bei dieser Verteilung sollen die Merkmale Spaß und Herausforderung hohe Werte annehmen und das Merkmal Frustration soll einen geringen Wert aufweisen. Mit diesen Informationen wird bisher das Perzeptron trainiert. Als n¨achsten Schritt wollen Pedersen et al. einen Generator auf Basis des Perzeptrons entwickeln, der Level mit bestm¨oglichen Werten generiert. 4.2 Levelgenerierung mit genetischen Algorithmen Genetische Algorithmen k¨ onnen auch f¨ ur die Generierung von Leveln eingesetzt werden. Ferreira et al. [1] nutzen dazu vier Populationen f¨ ur vier 10 Ein Perzeptron ist einfaches Netz aus k¨ unstlichen Neuronen. 18 4.2 Levelgenerierung mit genetischen Algorithmen Madlen Thaleiser Spielelemente (Boden, Bl¨ ocke, Feinde und M¨ unzen). Als Eingabe f¨ ur die einzelnen Populationen wird jeweils ein Vektor mit einer Kodierung der wichtigen Eigenschaften der jeweiligen Population verwendet. Bei der Bodenpopulation wird beispielsweise ein Integervektor benutzt, der u. a. die H¨ ohe der Bodenelemente speichert. Zudem hat jede dieser Population eine eigene Fitnessfunktion, die die Chancen und Brauchbarkeit f¨ ur die Evolution bewertet. W¨ ahrend der Evolutionsphase werden in den einzelnen Populationen mittels Selektionen, Rekombination und Mutation neue Individuen erzeugt, die anschließend von der Fitnessfunktion bewertet werden. Dieser Prozess wiederholt sich u ¨ber mehrere Generationen. Nachdem die Evolution abgeschlossen ist, werden die jeweils besten Elemente der vier Populationen f¨ ur die Levelgenerierung verwendet. Mourato et al. [5] verwendeten ebenfalls einen genetischen Algorithmus. Bei ihrer Arbeit ließen sie sich von dem Plattformer Prince of Persia“ [39] in” spirieren. Zun¨ achst unterteilten sie die Spielszene in ein Raster, wobei sie verschiedene Rastergr¨ oßen untersuchten. Nachdem die Spielszene in ein Raster aufgeteilt wurde, wurde den einzelnen Zellen einer von drei m¨oglichen Zust¨anden (Boden, Wand oder leer) zugeordnet. Anschließend wurde die Fitnessfunktion mittels verschiedener Heuristiken berechnet. So wurden die Zellen zum Beispiel auf ihre Bedeutung im Bezug zur Lage und Zustand eingestuft. Die folgende Evolution bezieht sich auf die Ergebnisse der Fitnessfunktion und versucht mittels Mutation sowie Crossover neue Variationen zu schaffen, damit sich der Wert der Fitnessfunktion verbessert. Ist die Evolution beendet und ein guter Wert f¨ ur die Fitnessfunktion gefunden, durchl¨ auft das generierte Level einen Nachbereitungsprozess. In diesem werden Fallen, Feinde und ¨ astethische Objekte hinzugef¨ ugt. Abbildung 7: Generietes Level mit Raster (Quelle: Mourato et al. [5]) 19 4.3 4.3 Generierung auf Basis von Teill¨osungen Madlen Thaleiser Generierung auf Basis von Teill¨ osungen Mit einer Bibliothek aus Teill¨osungen zur Generierung von Leveln befassen sich Mawhorter und Mates [7]. Die Idee f¨ ur diesen Ansatz ist, dass Level generiert werden sollen, ohne die Mechaniken des Spieles zu kennen. Zun¨ achst wird eine Bibliothek aus typischen Levelst¨ ucken mit potentiellen Ankerpositionen angelegt. Diese Ankerpositionen sind Punkte, die der Spieler beim Durchlaufen des Levels besetzen k¨onnte. Nachdem eine Bibliothek angelegt ist, wird nun ein Startst¨ uck gew¨ahlt. Anhand der dazugeh¨ origen Ankerpositionen wird ein Rahmen bestimmt, anhand dessen die St¨ ucke der Bibliothek gefiltert werden. Aus dem Ergebnis der Filterung wird mittels einer Auswahlfunktion das n¨achste Levelst¨ uck bestimmt. Dieses wird nun ins Level gem¨aß der Ankerpositionen des vorhergehenden St¨ uckes integriert und ein neuer Rahmen anhand der Ankerpositionen des ausgew¨ ahlten St¨ uckes wird bestimmt, um den Ablauf zu wiederholen. Dies geschieht so lange, bis das Level die gew¨ unschte L¨ange oder Anzahl an St¨ ucken erreicht hat. Das fertig generierte Level durchl¨auft im Anschluss die Nachbearbeitung, in der Feinde, M¨ unzen u. a. positioniert werden, die das Level komplettieren. Der Prozess wird in Abbildung 8 dargestellt. Abbildung 8: Teill¨ osungen: Im oberen linken Abschnitt ist existierender Inhalt mit einem Anker dargestellt. Der obere rechte Abschnitt zeigt ein passendes Levelst¨ uck, basierend auf der vorhergehenden Filterung. Innerhalb des unteren linken Bildes wird das passende Levelst¨ uck hinzugef¨ ugt und der Anker als verwendet markiert. Das untere rechte Bild zeigt das ganze Levelst¨ uck nach der Nachbearbeitung. (Quelle: Mawhorter und Mates [7]) In Spelunky“ [35] wird prozedurale Levelgenerierung basierend auf Teill¨o” sungen [21] angewendet. Als erstes wird das Level in ein Raster aus 16 R¨aumen aufgeteilt und anschließend wird ein Weg vom Levelanfang im obersten Bereich zum Levelausgang im untersten Bereich erzeugt. 20 4.3 Generierung auf Basis von Teill¨osungen Madlen Thaleiser Nun wird jeder Raum aus einer Menge von Raumentw¨ urfen ausgew¨ahlt. Welche Menge f¨ ur die Auswahl verwendet wird, ist abh¨anig davon, welche Lage der Raum auf den Weg vom Eingang zum Ausgang hat. Um etwas Abwechslung in die R¨ aume zu bringen, werden nun einzelne zuf¨allig generierte Bl¨ ocke hinzugef¨ ugt. Abschließend werden Fallen, Sch¨atze, diverse Kreaturen u. a. hinzugef¨ ugt. 21 5 Rhythmusbasierte Levelgenerierung 5 Madlen Thaleiser Rhythmusbasierte Levelgenerierung 5.1 Rhythmus als Ansatz Compton und Mateas [14] ließen sich von den rhythmischen Strukturen afrikanischer Musik inspirieren. Sie sahen den Rhythmus und das damit verbundene Timing als einen zentralen Aspekt beim Design von Plattformerspielen. Ein Rhythmus wird dabei als Abfolge von Bewegungsman¨over, z. B. laufen und springen, verstanden. Die bisherigen Levelgeneratoren, wie in Rogue“ [43], erzeugten Level durch ” das zuf¨ allige Platzieren von Komponenten. Wurden die verwendeten Ans¨atze aus diesen Generatoren auf die Generierung von Plattformern u ¨bertragen, entstanden oft nichtspielbare Level. Durch den Rhythmusansatz als Gestaltungsaspekt k¨ onnen einzelne Levelabschnitte, welche in der Arbeit von Compton und Mateas als Muster beschrieben werden, so gestalten werden, dass nach der Generierung ein spielbares Level entsteht. Im Modell von Compton und Mateas wird zun¨achst eine Zellenstruktur erzeugt, welche den Verlauf des Levels bestimmt. Eine einzelne Zelle besteht dabei aus mehreren Mustern, die verschiedene Komponentenreihenfolgen aufweisen kann. Diese Reihenfolge wird anhand eines Rhythmus bestimmt und erzeugt. 5.2 5.2.1 Der Levelgenerator Launchpad“ von Smith et al. ” Rhythmus und Rhythmusgruppe Smith et al. [9, 4]11 haben den Rhythmusansatz von Compton und Mateas als Gestaltungsmittel f¨ ur Plattformerspiele u ¨bernommen. Der Rhythmus wird als Grundlage f¨ ur die Erzeugung von Leveln genommen und ist nicht nur ein Gestaltungsmittel f¨ ur eine bestehende Levelstruktur wie bei Compton und Mateas. Sie haben den Rhythmusansatz verwendet, um einen Levelgenerator namens Launchpad“ f¨ ur 2D-Plattformer zu entwickeln. Statt einer ” Zellenstruktur, die das Level beschreibt, wird der Rhythmus direkt zum Beschreiben des Levels verwendet. Der Rhythmus wird dabei, wie in Abschnitt 5.1 beschrieben, als Reihe von Aktionen verstanden, die notwendig sind, um ein Level zu absolvieren. Bei Smith et al. beschr¨ anken sich die Aktionen auf die Bewegungsman¨over Laufen und Springen. Durch die Beschreibung des Levels mittels eines Rhythmus ist das Level als Aneinanderreihung von Rhythmusgruppen zu verstehen. Dabei beschreibt der Begriff Rhythmusgruppe einen Satz von Levelkomponenten, welcher einen herausfordernden Bereich zusammenfasst und auf Grundlage des Rhythmus gestaltet ist. 11 Die folgenden Ausf¨ uhrungen in den Kapitel 5 und 6 beziehen sich auf Smith et al. [9, 4] 22 5.2 Der Levelgenerator Launchpad“ von Smith et al. ” 5.2.2 Madlen Thaleiser Struktur des Generators Der Generator besteht aus mehreren Abschnitten, welche in Abbildung 9 dargestellt sind. Zun¨ achst werden in zwei Stufen die Rhythmusgruppen generiert. In der ersten Stufe wird der Rhythmus erstellt, der eine Reihe von Bewegungsaktionen des Spielers darstellt. Anschließend wird der Rhythmus in der zweiten Stufe mittels der Grammatik in mehrere Rhythmusgruppen umgewandelt. Nach der Generierung von Rhythmusgruppen werden diese aneinandergereiht und bilden Kandidatenlevel. Diese Kandidatenlevel werden nun auf bestimmte Kriterien getestet. Es wird das Kandidatenlevel als Basislevel ausgew¨ ahlt, das am besten den Kriterien gerecht wird. Im letzten Schritt werden dem Level noch Sammelgegenst¨ande wie zum Beispiel M¨ unzen hinzugef¨ ugt. Abbildung 9: Aufbau des Generators Launchpad“ ” (Quelle: Smith et al. [4]) 5.2.3 Generierung von Rhythmusgruppen Innerhalb des ersten Teiles des Generators wird ein Rhythmus erzeugt. Dieser wird durch drei Eigenschaften bestimmt: 23 5.2 Der Levelgenerator Launchpad“ von Smith et al. ” Madlen Thaleiser • L¨ ange (engl.: length) des Rhythmus: kann 5, 10, 15 oder 20 Sekunden betragen. • Typ (engl.: type) des Rhythmus: bestimmt, in welcher Abfolge Spr¨ unge vorkommen sollen: – swing (zwei Spr¨ unge folgen direkt nacheinander) – regular (Spr¨ unge treten in regelm¨aßigen Abst¨anden auf) – random (zuf¨ allige Aneinanderreihung von Spr¨ ungen) • Dichte (engl.: density) des Rhythmus: bestimmt, in welcher H¨aufigkeit Spr¨ unge innerhalb des Rhythmus vorkommen und kann low (geringe Anzahl an Spr¨ ungen), medium (moderate Anzahl an Spr¨ ungen) oder high (hohe Anzahl an Spr¨ ungen) annehmen. Nachdem die Eigenschaften festgelegt wurden, wird der Rhythmus erzeugt. Die einzelnen Takte des Rhythmus stellen Bewegungsman¨over dar, wobei zwei zur Auswahl stehen: laufen und springen. Jeder einzelne Takt und seine dazugeh¨ orige Aktion werden mittels der Grammatik (vgl. Abbildung 10) in eine Komponente u ¨bersetzt. Der gesamte Rhythmus als Reihe von Komponenten stellt nun die Rhythmusgruppe dar. Es werden nun im Folgendem Rhythmusgruppen aneinandergereiht, um ein Kandidatenlevel zu bilden. Abbildung 10: Grammatik f¨ ur Komponentenerstellung (Quelle: Smith et al. [4]) 24 5.2 Der Levelgenerator Launchpad“ von Smith et al. ” 5.2.4 Madlen Thaleiser ¨ Uberpr u ¨ fung durch Kriterien Die entstandenen Kandidatenlevel m¨ ussen nun gegen zwei Kriterien getestet werden. Dabei ist es dem Spielentwickler u ¨berlassen, welche Wertigkeit die Kriterien haben. 1. Liniendistanzkriterium: kontrolliert das Kandidatenlevel dahingehend, wie weit die einzelnen Komponenten von einer vorgegebenen Linie entfernt sind. Damit sollen Level erzeugt werden, die keine extremen Variation der Komponenten auf der y-Achse aufweisen. Die Linie, welche Grundlage ist, wird vom Spielentwickler gew¨ahlt und Beginn sowie Ziel des Levels sollten auf dieser Linie liegen. Es wird dabei nach dem Level gesucht, welches den geringsten Abstand zwischen allen Endpunkten der Plattformen und der Linie besitzt. 2. Kombinierungskriterium: u uft, wie h¨aufig Komponenten in¨berpr¨ nerhalb des Levels vorkommen. Dabei kann der Spielentwickler festlegen, welche H¨ aufigkeit die einzelnen Komponenten haben sollen. Um zu ermitteln, inwiefern die auftretenden Komponenten dem gerecht werden, wird die Chi-Quadrat-Anpassungsg¨ ute verwendet. Hierbei wird die Differenz zwischen der beobachteten (O) und der erwarteten (E) H¨ aufigkeit gebildet und anschließend quadriert. Das Quadrat wird durch die erwartete H¨ aufigkeit geteilt. Alle Ergebnisse werden schließlich aufsummiert: x2 = X (O − E)2 E (1) Es wird das Level ausgew¨ahlt, das den kleinsten Testwert hat. Das Kandidatenlevel, welches die besten Ergebnisse in beiden Kriterien aufweist, wird als Basislevel ausgew¨ahlt. 5.2.5 Nachbereitung Innerhalb des Nachbereitungsprozesses wird das ausgew¨ahlte Basislevel mit Sammelobjekten, z. B. M¨ unzen, versehen. Diese werden anhand von zwei Regeln platziert: 1. Eine Gruppe soll entlang einer langen Plattform angeordnet werden, wenn keine andere Aktion als Laufen mit dieser verbunden ist. 2. Sammelobjekte sollen als Belohnung f¨ ur einen risikoreichen Sprung u ucke positioniert werden. Anhand der H¨ohe soll der Spieler ¨ber eine L¨ die Spr¨ ungeh¨ ohe bestimmen k¨onnen. Hat das Basislevel die Nachbereitung durchlaufen, ist es fertig generiert und kann gespielt werden. 25 5.3 Implementierung des Levelgenerators 5.2.6 Madlen Thaleiser Verwendete Methoden der prozeduralen Generierung Smith et al. verwendeten zwei Methoden aus Abschnitt 3.2: 1. die generative Grammatik (vgl. Abschnitt 3.2.2) 2. das Constraint-Satisfaction-Problem (vgl. Abschnitt 3.2.6) Die Grammatik, welche in Abbildung 10 zu sehen ist, erzeugt f¨ ur einen gew¨ ahlten Rhythmus eine Rhythmusgruppe. Dabei ist jeder Takt vergleichbar mit einer Satzkomponente, die hierbei als eine der beiden Aktionen, laufen und springen, interpretiert wird. Die erzeugte Rhythmusgruppe stellt im u ur die Gram¨bertragendem Sinne einen richtigen grammatikalischen Satz f¨ matik von Smith et al. dar. Die beiden Kriterien sind f¨ ur das L¨osen des Constraint-Satisfaction-Problems zust¨ andig. Dadurch wird ein Kandidatenlevel als Basislevel erst erzeugt, wenn das Kandidatenlevel diesen Kriterien am besten gerecht wird. 5.3 Implementierung des Levelgenerators Es wird im Folgendem die Implementierung des Levelgenerators in Form des Plattformerspieles Kitty’s Adventure“ betrachtet. Dabei wird auf die ” im Abschnitt 5.2 beschriebenen einzelnen Phasen der Levelgenerierung eingegangen. 5.3.1 Allgemeine Anmerkungen Die Umsetzung des Generators von Smith et al. wurde mittels der Unity 3D Engine [46] in der Programmiersprache C# realisiert. Aufgrund der einfachen Bedingung des Unity 3D Editors, der umfangreichen Funktionalit¨ at und des bestehenden Vorwissen eignete sich die Spielengine f¨ ur die Realisierung und die sp¨atere Erweiterung des Generators. Unity 3D ist zwar vorwiegend eine 3D-Engine, jedoch ist es m¨oglich mit der orthografischen Kamera auch 2D-Spiele zu entwickeln. Das integrierte 2D-Toolset kommt in dieser Arbeit nur in einzelnen F¨allen zur Anwendung (zum Beispiel bei der Gestaltung der Spielfigur Kitty). 5.3.2 Programmaufbau Abbildung 11 zeigt die grundlegenden Klassen, die im Folgendem kurz erl¨autert werden: • GameManger: ist das zentrale Verwaltungselement des Spieles. Die Anzahl der Leben sowie die Anzahl der gesammelten M¨ unzen werden von ihm verwaltet. 26 5.3 Implementierung des Levelgenerators Madlen Thaleiser • GeneratorMenu: erlaubt es dem Spieler, Werte f¨ ur die Parameter (type, length und density) des Rhythmus festzulegen. Im Anschluss werden die gew¨ ahlten Werte an die Klasse GeneratorManager weitergeleitet. • GeneratorManager: ist f¨ ur die Erstellung des Levels zust¨andig. Dabei werden die Parameterwerte aus dem GeneratorMenu verwendet, um mit Hilfe der Klassen Critics und Rhythm eine Aneinanderreihung von Rhythmusgruppen zu erzeugen. • Rhythm: erh¨ alt bei der Instanziierung durch den GeneratorManager die Werte f¨ ur die Rhythmuseigenschaften und generiert daraus einen Rhythmus. Dieser wird an den GeneratorManager durch den Aufruf einer Objektmethode der Rhythm-Klasse zur¨ uck gegeben, damit im weiteren Verlauf Rhythmusgruppen gebildet werden k¨onnen. • Critics: bekommt als Parameter w¨ahrend der Instanziierung vom GeneratorManager den generierten Rhythmus und erzeugt ein Integerarray, welches das komplette Level in kodierter Form darstellt. Bei der Erzeugung wird das potentielle Levelarray auf das Liniendistanz- und das Kombinierungskriterium gepr¨ uft, welche im Abschnitt 5.2.4 beschrieben wurden. Durch den Aufruf einer Objektmethode der CriticsKlasse erh¨ alt der GeneratorMangager das erzeugte Levelarray. • Enemy, Stomper, etc.: sind Verhaltensklassen einzelner Bestandteile des GeneratorManagers und werden aufgerufen, wenn entsprechende Levelkomponenten generiert werden. • PlayerController: definiert das Verhalten der Spielerfigur Kitty und die physikalischen Eigenschaften wie Sprungh¨ohe oder Laufgeschwindigkeit. Zudem werden s¨amtliche Interaktionsm¨oglichkeiten mit der Spielwelt behandelt. • PlayerCamera: bestimmt das Verhalten der Kamera. Diese verfolgt die Spielfigur und zeigt den aktuellen orthografischen Spielauschnitt aus der Spielwelt. 27 5.3 Implementierung des Levelgenerators Madlen Thaleiser Abbildung 11: Die zentralen Klassen des Levelgenerators (Quelle: eigene Darstellung) 5.3.3 Rhythmus und Rhythmusgruppe Bei der Realisierung des Rhythmus und damit verbunden der Rhythmusgruppe wurde sich bei der Eigenschaft Typ auf die beiden Typen swing und regular beschr¨ ankt. Dies soll bei der sp¨ateren Implementierung von Multiwegen das Erkennen des Rhythmustyps vereinfachen und somit die Ausf¨ uhrung der richtigen Bewegungsman¨ over ohne Versuch und Irrtum erm¨oglichen. Die Eigenschaften des Rhythmus werden im Generatormen¨ u (siehe Abbildung 12) festgelegt und anschließend mithilfe der PlayerPrefs 12 gespeichert, so dass der GeneratorMangager darauf zugreifen kann. 12 PlayerPrefs ist eine von Unity bereitgestellte Funktion, die es erm¨ oglicht, Daten zwischen einzelnen Szenen und einzelnen Spielsitzungen zu speichern. 28 5.3 Implementierung des Levelgenerators Madlen Thaleiser Abbildung 12: Generatormen¨ u in Kitty’s Adventure“ ” (Quelle: eigene Darstellung) Anhand der ausgelesenen Werte wird im GeneratorManager eine Instanz der Klasse Rhythm, rhythm“, erstellt. Innerhalb dieser Instanz wird der ” Rhythmus gem¨ aß des Typen entweder mit der Funktion GenerateSwing() oder mit der GenerateRegular() erzeugt. Es wird nun im GeneratorManagers eine Instanz levelWithCritics der Klasse Critics erzeugt, wobei dem Konstruktor der Klasse Critics die vorher erzeugte Rhythm-Instanz als Parameter u ¨bergeben wird und so eine Instanzvariable initialisiert. Durch den Aufruf levelWithCritics.CreateLevel() wird eine Aneinanderreihung von Rhythmusgruppen mittels der RhythmInstanzvariable erzeugt. Dabei werden die einzelnen Komponenten nummerisch kodiert (vgl. Tabel¨ le 2 und 3). Uber den Aufruf der Objektmethode GetLevelList() wird die fertig erzeugte Integerliste zur¨ uckgeben. Nun wird innerhalb des GeneratorManagers in der Methode CreateLevel() die Liste durchlaufen. Jeder Eintrag wird an die Methode AssignTile() u ¨bergeben, welche die Eintr¨ age dekodiert und ihnen die richtige Auswahlmethode zuordnet. Dabei stehen die Methoden ChooseMove(), ChooseWaiting(), ChooseJump() und ChooseJumpCombi() zur Verf¨ ugung, welche den Integerwerten der entsprechenden Create-Methode zuordnen. 29 5.3 Implementierung des Levelgenerators Name flatplatform steep slope up steep slope down gradual slope up gradual slope down waiting Madlen Thaleiser Nummerncode 0 1 2 3 4 5 Tabelle 2: Kodierung der Kategorie Moving“ ” Name flat gap gap no gap jump up jump down short jump down medium jump down long spring fall enemy kill enemy avoid Nummerncode 200 mit L¨ ucke 100 bis 105 ohne L¨ ucke 110 bis 115 202 203 Tabelle 3: Kodierung der Kategorie Jumping“ ” 5.3.4 Kriterien und Nachbereitung Die Kriterien aus Abschnitt 5.2.4 werden in einer abgewandelten Form innerhalb der Klasse Critics verwendet. Das Kombinierungskriterium wird mittels Gleichverteilung der Komponenten als spezialisierte Form der Anpassungsg¨ ute (vgl. Abschnitt 5.2.4, Formel 1) realisiert. Hierf¨ ur werden innerhalb des Konstruktors von Critics die Listen moveTile und jumpTile initialisiert, welche u. a. die nummerische Kodierung der Komponenten enthalten. Sobald die Methode CreateLevel() aufgerufen wird, wird der Rhythmus wiederholt durchlaufen und den einzelnen Takten eine Komponente zugeordnet. Die Anzahl der Rhythmuswiederholungen und die damit verbundene Gesamtl¨ ange des Levels wird mittels der Hilfsmethode GetIteration()bestimmt. In dieser wird der L¨ angenparameter des Rhythmus einer konstanten Anzahl an Wiederholungen zugeordnet. Bei der Komponentenzuordnung wird aus der entsprechenden Liste (entweder moveTile oder jumpTile) eine Komponente ausgew¨ahlt und der Level30 5.3 Implementierung des Levelgenerators Madlen Thaleiser liste hinzugef¨ ugt. Das ausgew¨ahlte Element wird anschließend aus der Liste entfernt. Dieser Vorgang wiederholt sich solange, bis aus einer leeren Listen gew¨ ahlt werden soll. Sobald dieser Fall eintritt, wird die Liste neu initialisiert. Die Komponentenzuordnung ist abgeschlossen, wenn alle Elemente aus der Levelliste einer Komponente, entweder aus der Liste moveTile oder aus der Liste jumpTile, zugeordnet sind. Mit dieser Vorgehensweise wird sichergestellt, dass alle zur Verf¨ ugung stehenden Komponenten weitestgehend gleich oft innerhalb des Levels vorkommen. Das Liniendistanzkriterium ist realisiert, indem die Distanzen der einzelnen Komponenten zur Nulllinie verwendet werden. Die Nullliniendistanz beschreibt die Distanz zwischen der yKoordinate des letzten Teilelementes einer Komponente und der x-Achse (Nulllinie). Innerhalb des Konstruktors von Critics werden die beiden Listen moveTile und jumpTile nicht nur mit den nummerischen Kodierungen der einzelnen Komponenten erzeugt, sondern auch mit der Nullliniendistanz dieser. Bei der Komponentenzuordnung wird die Nullliniendistanz der gerade ausgew¨ ahlten Komponente auf die Variable currentDistance addiert und mit zwei Bedingungen verglichen. Die currentDistance soll zum Einem kleiner als die Rhythmusl¨ ange und zum Anderem gr¨oßer bzw. gleich einem Minimum sein, welches sich aus der Differenz der Rhythmusl¨ange und einer festgelegten Konstante berechnet. Die genannten zwei Bedingungen sind festgelegt worden, damit eine gr¨ oßere Variation in den H¨ohen der Komponenten vorkommt. Bei der Pr¨ ufung auf die Bedingungen wird versucht, eine m¨oglichst kleine Gesamtdistanz zu ermitteln. Da dies nicht zwangsl¨aufig bei der ersten Zusammenstellung von Komponenten erfolgt, wird der Zusammenstellungsprozess tausendmal durchlaufen. Nach allen Durchl¨aufen ist so entweder ein Level mit geringer Distanz und gleichverteilten Komponenten oder zumindest ein Level mit gleichverteilten Komponenten gefunden worden. Die Nachbereitung findet im GeneratorManager statt. Dort werden innerhalb der Create-Methoden nicht nur die einzelnen Levelkomponenten generiert, sondern entsprechend dieser auch Belohnungen. Beispielsweise wird in der Methode CreateSpring() u ¨ber dem station¨aren Trampolin eine Reihe von M¨ unzen erzeugt, die als Wegweiser fungieren. Dagegen stellen M¨ unzen in der Methode CreateFall() auch eine Belohnung f¨ ur den risikoreichen Sprung ins Ungewisse da. 5.3.5 Methoden der prozeduralen Generierung Die Methoden aus Abschnitt 3.2, welche bei Smith et al. und bei der Implementierung Anwendung finden, waren die generative Grammatik und das 31 5.3 Implementierung des Levelgenerators Madlen Thaleiser Constraint-Satisfaction-Problem. In der Klasse GeneratorManager wurden die einzelnen Bestandteile der Grammatik (siehe Abbildung 10) von Smith et al. in Form von CreateMethoden umgesetzt. Bei der Zuordnung der einzelnen Takte zu den richtigen Komponenten wurde die Methode AssignTile() als Dekodierungsmethode vor den eigentlichen Auswahlmethoden eingesetzt. Die Auswahlmethoden ChooseMove(), ChooseWaiting(), ChooseJump() und ChooseJumpCombi() haben dementsprechend die richtige Create-Methode aufgerufen. Der Aspekt des Constraint-Satisfaction-Problem aus Abschnitt 3.2.6 wurde durch die Umsetzung der beiden Kriterien innerhalb der Critics-Klasse realisiert. Dort wird versucht ein Level anhand des Kombinierungs- und Liniendistanzkriteriums auszuw¨ahlen, welches eine Gleichverteilung innerhalb der Komponentenvorkommen sowie eine m¨oglichst geringe Nullliniendistanz (siehe Abschnitt 5.3.4) hat. Jedoch wird das Kombinierungskriterium schwerer gewichtet als das Liniendistanzkriterium, weshalb auch Level generiert werden k¨ onnen, die nur eine Gleichverteilung der Komponentenvorkommen aufweisen. 5.3.6 Bewertung der Implementierung Die Implementierung des rhythmusbasierten Levelgenerators von Smith et al. in Form des Plattformers Kitty’s Adventure“ folgt nicht komplett den ” Vorgaben, wie sie in Abbildung 9 dargestellt sind. Als erste Abweichung ist die Beschr¨ankung auf zwei Rhythmustypen zu nennen. Diese gr¨ undet sich, wie in Abschnitt 5.3.3 beschrieben, auf die sp¨atere Erweiterung um Multiwege. Da beim Rhythmustyp random keine Regelm¨aßigkeit in der Abfolge der Bewegungsman¨over vorliegt, ist es f¨ ur den Spieler einfacher, die beiden anderen Rhythmustypen swing oder regular zu erkennen und diese beim Durchqueren eines zweiten Weges erneut anzuwenden. Eine weitere Abweichung betrifft den Realizer. Dieser sollte anhand der physikalischen M¨ oglichkeiten der Spielfigur beim Sprung Spr¨ unge definieren, die kurz, normal oder weit sein k¨onnen. Dies wurde bei der Umsetzung vorerst nicht ber¨ ucksichtigt, sondern der Spielfigur Kitty wurde eine angemessene Sprungkraft zugeordnet, die f¨ ur die Bew¨altigung der einzelnen Sprungelemente ausreichend ist. Die einzelnen Komponenten der Grammatik von Smith et al. wurden bis auf die beweglichen Plattformen innerhalb von Kitty’s Adventure“ umge” setzt. Bei der Umsetzung der beweglichen Plattformen existiert ein Problem, welches bisher nicht gel¨ ost werden konnte. Die Spielfigur kann zwar auf die Plattformen springen und mit ihnen fahren, jedoch f¨allt die Spielfigur nach dem Verlassen einer beweglichen Plattformen durch station¨are Plattformen durch. Daher wurde die Umsetzung dieser Komponenten vorerst nicht realisiert. 32 5.3 Implementierung des Levelgenerators Madlen Thaleiser Weiterhin wurden in Kitty’s Adventure“ weitere Modifizierungen im Be” zug zum Aufbau von Smith et al. vorgenommen. Innerhalb des Aufbaues von Smith et al. waren die Generierung der Rhythmusgruppe und die anschließende Pr¨ ufung durch die Kriterien zwei separate Schritte. Bei Kitty’s ” Adventure“ hingegen werden die Rhythmusgruppen w¨ahrend der Generierung auf die Kriterien gepr¨ uft, so dass es nun nur noch ein Schritt ist. Des Weiteren wurden die beiden Kriterien angepasst. Das Liniendistanzkriterium orientiert sich nur noch an der Nullliniendistanz und das Kombinierungskriterium verwendet eine Gleichverteilung als spezialisierte Form der Anpassungsg¨ ute aus Abschnitt 5.2.4. Auch der Prozess der Nachbereitung wurde in Kitty’s Adventure“ ange” ¨ passt. Ahnlich wie bei der Umsetzung der Kriterien wird die Nachbereitung w¨ahrend des Prozesses der Komponentenzuordnung durchgef¨ uhrt. All diese Abweichungen zum Konzept von Smith et al. waren innerhalb des Rahmens, welche sie den Spielentwicklern zur Verf¨ ugung gestellt haben. In Abbildung 13 sind einzelne Spielszenen aus Kitty’s Adventure“ darge” stellt, die Ausschnitte aus erzeugten Leveln auf Basis des implementierten Levelgenerators von Smith et al. zeigen. (a) Zwei Sprungkomponenten (b) Zwei Gegner (c) Stachelgegner (d) Levelende Abbildung 13: Spielszenen aus Kitty’s Adventure“ ” (Quelle: eigene Darstellung) 33 6 Erweiterung um Multiwege 6 Madlen Thaleiser Erweiterung um Multiwege 6.1 Begriffskl¨ arung In der Arbeit von Dahlskog und Togelius [3] wurden einzelne Designmuster von Super Mario Bros“ analysiert, um sp¨ater anhand des Spielerk¨onnens ” geeignete Muster f¨ ur die Levelgenerierung auszuw¨ahlen. Dabei haben sie auch Muster beschrieben, die Multiwege enthielten. Es werden drei Arten von Multiwegen unterschieden (vgl. Abbildung 14): • Zweifacher Weg - Es existiert eine h¨angende Plattform, die die M¨ oglickeit eines anderen Weges aufzeigt. • Dreifacher Weg - Zwei in unterschiedliche H¨ohe h¨angende Plattformen erlauben es, zwischen drei verschiedenen Wegen zu w¨ahlen. • Risiko und Belohnung - Dies ist ein Multiweg mit einem Weg, der eine risikoreiche Situation, z. B. ein Feind, aufweist. Nach Bew¨altigung des Weges wartet eine Belohnung f¨ ur das Risiko. (a) Zweifacher Weg (b) Dreifacher Weg (c) Risiko und Belohnung Abbildung 14: Multiwege gem¨aß Dahlskog und Togelius (Quelle: www.mariouniverse.com [28]) Somit kann im Allgemeinen der Begriff Multiweg wie folgt definiert werden: Multiwege sind alternative Wege innerhalb des Levels, welche das Absolvieren eines Levelst¨ uckes auf jeweils eine andere Art und Weise erm¨ oglichen. Aufbauend auf dieser Definition werden im Folgenden die M¨oglichkeiten vorgestellt, die eine Erweiterung des Levelgenerators Launchpad“ von Smith ” et al. um Multiwege darstellen. 34 6.2 M¨ oglichkeiten der Erweiterung 6.2 Madlen Thaleiser M¨ oglichkeiten der Erweiterung Der Levelgenerator Launchpad“ aus Abschnitt 5.2 l¨asst einige M¨oglichkei” ten zu, einen Multiweg zu integrieren und diesen in Kitty’s Adventure“ zu ” realisieren. Als erster Ansatz w¨ are das Einf¨ ugen von einzelnen Bl¨ocken bzw. Blockgruppen zu nennen. Hierbei muss gekl¨art werden, an welchen Stellen die Bl¨ocke auftreten, ob die Bl¨ ocke immer auftreten und ob es sich um verschieden hohe Bl¨ ocke handeln soll. Die Kombinationen aus den Antworten erlauben eine Vielzahl an M¨ oglichkeiten zur Erstellung von Multiwegen. Ein zweiter Ansatz ist, einen Multiweg als parallel verlaufendes Levelst¨ uck zu verstehen. Dabei kann der Zugang zum Multiweg zum Beispiel u ¨ber eine L¨ ucke f¨ uhren, die die Spielfigur herabspringt. Eine andere Option w¨are es, ein spezielles Sprungbrett oder ein anderes Element zu integrieren, das die Spielfigur hinauf zum Levelst¨ uck bewegt. Des Weiteren w¨ are noch zu kl¨aren, wie dieses Levelst¨ uck auszusehen hat. Das Aussehen k¨ onnte folgende verschiedene Formen annehmen: • Wiederholung der Komponenten des Hauptweges • Aneinanderreihung von Rhythmusgruppen basierend auf einen eigenem Rhythmus • eine ¨ ahnliche Kombination von Komponenten, welche die gleichen Nullliniendistanzen wie die Komponenten des Hauptweges haben Auch hier bietet die Beantwortung der Fragen eine Reihe von Kombinationsm¨ oglichkeiten. 6.3 Modellierung der Multiwege Um Multiwege ins Spiel zu implementieren, bedarf es einer Grundlage. Aus dem ersten Ansatz f¨ ur Multiwege werden die simplen und aus dem zweiten Ansatz die komplexen Multiwege definiert. 6.3.1 Simpler Multiweg Der simple Multiweg soll eine Anordnung von einzelnen oder mehreren Bl¨ocken auf gleicher H¨ ohe sein. Dabei soll das Auftreten zun¨achst zuf¨allig sein und nur bei l¨ angeren Strecken vorkommen. Dazu wird die Grammatik von Smith et al. (siehe Abbildung 10) um das Nichtterminalsymbol SndPath“ erweitert, das sich in die Terminale no block“, ” ” one block“, two blocks“, three blocks“, four blocks“ und five blocks“ auf” ” ” ” ” schl¨ usselt. Die erweiterte Grammatik wird in Abbildung 15 dargestellt. 35 6.4 Implementierung der Multiwege Madlen Thaleiser Abbildung 15: Erweiterte Grammatik (Quelle: eigene Darstellung) 6.3.2 Komplexer Multiweg Als komplexen Multiweg wird ein Weg bezeichnet, der ein St¨ uck lang parallel zum Hauptweg verl¨ auft. Der Weg verl¨auft unterhalb des Hauptweges und als Zugang k¨ onnen z. B. Sprungkomponenten verwendet werden. Um sp¨ ater die Umsetzung von komplexen Multiwegen zu erm¨oglichen, wird das Wegkriterium definiert: Das Wegkriterium erlaubt die Erzeugung eines Multiweges nur dann, wenn zwischen dem Zugang und dem Ausgang zum Multiweg sich mehrere Komponenten auf den Hauptweg befinden. Ist ein Multiweg auf Grundlage dieses Kriteriums gefunden, wird die Komponetenreihenfolge dieses Weges mittels der Komponenten des Hauptweges erzeugt. Dabei soll jede einzelne Komponente des Multiweges aus einer Menge mit gleicher Nullliniendistanz (vgl. Abschnitt 5.3.4) gew¨ahlt werden. Diese Menge wird durch die Nullliniendistanz der entsprechenden Komponente des Hauptweges erzeugt. 6.4 6.4.1 Implementierung der Multiwege Implementierung des simplen Multiweges Der Levelgenerator des Plattformerspiels Kitty’s Adventure“ wird um den ” simplen Multiweg erweitert, indem die Switch-Anweisungen der Choose36 6.4 Implementierung der Multiwege Madlen Thaleiser Methoden im GeneratorManager bei entsprechenden Fallunterscheidungen um eine Abfrage erweitert werden. Dabei wird das vorhergehende Komponentenst¨ uck betrachtet. Ist es eine flache Plattform gewesen, wird zuf¨allig eine Anzahl an Bl¨ ocken erzeugt und diese der Methode CreateSimplePath() u ¨bergeben. Diese Methode erzeugt die entsprechende Anzahl an Bl¨ocken. Des Weiteren werden bei einer Kombination aus steilem Abhang und steilem Aufgang f¨ unf Bl¨ ocke generiert, die dem Spieler die Option geben, das Tal“ ” zu u berspringen. ¨ In Abbildung 16 sind drei Beispiele f¨ ur die Generierung von simplen Multiwegen in Kitty’s Adventure“ gezeigt. ” (a) (b) (c) Abbildung 16: simple Multiwege (Quelle: eigene Darstellung) 6.4.2 Implementierung des komplexen Multiweges Bei der Implementierung des komplexen Multiweges in Kitty’s Adventure“ ” wurde die Critics-Klasse um die Methode FindSecWays() erweitert. In dieser Methode wird das Wegkriterium verwendet, wobei zun¨achst zwei Sprungtakte gepr¨ uft werden, ob sie mindestens f¨ unf, aber maximal zehn Komponenten auseinanderliegen. Ist dies der Fall, werden beide als Tupel in die Liste possWays hinzugef¨ ugt. Sind alle m¨ oglichen Spr¨ unge durchlaufen worden, wird die Liste possWays auf die Anzahl der Elemente gepr¨ uft. Bei der sp¨ateren Generierung eines Levels sollen vorerst an maximal drei Stellen komplexe Multiwege vorhanden sein. Sollte die Liste mehr als drei Elemente aufweisen, werden die ersten drei Elemente an einer ungeraden Position ausgew¨ahlt. Die Auswahl der Elemente an ungerader Position erfolgt, da es vorkommen kann, dass zwei aufeinander folgende Elemente in der Liste einen einzelnen Sprungtakt zum Einem als Endposition und zum Anderem als Startposition eines Multiweges verwenden k¨onnen. Dies erschwert die folgende Generie¨ rung der Multiwege, da Uberschneidungen der Start- bzw. Endkomponente den Zugang bzw. den Ausgang zum Weg behindern. ¨ Uber die Methode GetSecWayList() kann innerhalb des GeneratorManagers auf die Liste mit den Start- und Endkomponenten der komplexen Multiwege 37 6.5 Bewertung Madlen Thaleiser zugegriffen werden. Dies wiederum geschieht in der Methode CreateComplexPath(). In dieser Methode wird anhand der Elemente aus der secWayList ein Teilst¨ uck des Hauptweges erzeugt. Das Teilst¨ uck wird nun durchlaufen und f¨ ur jede Komponente des St¨ uckes wird eine Menge an Komponenten erzeugt, die die gleiche Nullliniendistanz besitzen. Aus dieser Menge wird nun eine Komponente gew¨ ahlt, die dem komplexen Multiweg angeh¨ort. In der Abbildung 17 sind Teile von komplexen Multiwegen in Kitty’s Adventure“ ” dargestellt. (a) Zugang (b) Multiweg (c) Ausgang Abbildung 17: Bestandteile eines generierten komplexen Weges (Quelle: eigene Darstellung) 6.5 Bewertung Die Implementierung beider Konzepte f¨ ur Multiwege innerhalb von Kitty’s ” Adventure“ funktioniert und wurde mehrfach erprobt. Die Kombination beider Ans¨ atze kann jedoch dazu f¨ uhren, dass beim parallel verlaufenden Weg Bl¨ ocke erstellt werden, die die Spielerfigur Kitty beim Springen behindern k¨ onnen. Eine anderer negativer Effekt ist, dass es zum Ende des komplexen Multiweges passieren kann, dass der Ausgang des Weges zu niedrig positioniert ist. Dadurch kann die Spielfigur nur zur¨ uck auf den Hauptweg gelangen, indem sie stirbt und am Anfang des Levels wiederbelebt wird. Des Weiteren erzeugt die Ausgangskomponente Bl¨ocke innerhalb von M¨ unzen, was zur Folge hat, dass die M¨ unzen nicht eingesammelt werden k¨onnen. Jedoch ist die Erweiterung des Generators um Multiwege gelungen. Sie setzt bei den beiden Methoden der prozeduralen Generierung (generative Grammatik und Constraint-Satisfaction-Problem, vgl. Abschnitt 3.2) an und erg¨anzt diese um den Aspekt des Multiweges. 38 7 Zusammenfassung und Ausblick 7 7.1 Madlen Thaleiser Zusammenfassung und Ausblick Zusammenfassung Im Rahmen dieser Arbeit wurde die Implementierung des rhythmusbasierten Levelgenerators f¨ ur 2D-Plattformer Launchpad“ von Smith et al. [9, 12] ” vorgestellt, welcher auf der Grundlage des Rhythmusansatzes von Compton und Mateas [14] basierte. Des Weiteren wurde der Generator um Multiwege erweitert. Dabei wurden die Multiwege in die einzelnen prozeduralen Methoden der generativen Grammatik und des Constraint-Satisfaction-Problems integriert. Die bestehende Grammatik wurde um das Nichtterminalsymbol SndPath erweitert, so dass Blockgruppen auf gleicher H¨ohe generiert werden, sofern l¨angere Levelpassagen ohne weitere Bewegungsman¨over als Laufen auftreten. Dies wird als simpler Multiweg bezeichnet. Die Erweiterung der Bedingungen des Constraint-Satisfaction-Problems um ein zus¨ atzliches Kriterium, dem Wegkriterium aus Abschnitt 6.3.2, erlaubt die Generierung von komplexen Multiwegen. Diese Wege verlaufen jeweils parallel zum Hauptweg und haben Komponenten, die eine gleiche Nullliniendistanz (vgl. Abschnitt 5.3.4) aufweisen wie die entsprechenden Komponenten des Hauptweges. Dadurch weist der Multiweg Variation in seiner Komponentenzusammenstellung zu den Komponenten des Hauptweges auf. Die Implementierung und die Erweiterung des Generators wurde praktisch im Plattformerspiel Kitty’s Adventure“ umgesetzt und erprobt. ” 7.2 Fazit Die Implementierung des rhythmusbasierten Levelgenerators f¨ ur 2D-Plattformer Launchpad“ von Smith et al. und die Erweiterung um Multiwege ” werden in dem Ergebnis dieser Arbeit in Form des Plattformerspieles Kit” ty’s Adventure“ dargestellt. Die Ziele aus Abschnitt 1.2 sind somit erf¨ ullt. So werden spielbare Level in einer angemessen Zeit generiert. Jedoch kann es bei der Generierung von komplexen Multiwegen, wie sie in Abschnitt 6.3 modelliert werden, dazu kommen, dass die Spielfigur Kitty am Ende des Multiweges nicht wieder zum Hauptweg gelangen kann. Dadurch ist in manchen F¨ allen der komplexe Multiweg nicht spielbar, d. h. der Weg integriert sich nicht optimal in das generierte Level. Bisher ist keine L¨ osung f¨ ur diesen Umstand gefunden worden. Eine Verringerung der m¨ oglichen Komponenten, die durch das Wegkriterium f¨ ur die Generierung eines Multiweges ausgesucht werden, hat zwar das Auftreten vermindert, jedoch nicht verhindert. Ein weiterer Aspekt, der noch nicht in Kitty’s Adventure“ umgesetzt wird, ” betrifft die Sprungeigenschaften der Spielfigur Kitty. In Abschnitt 2.3.1 wird beschrieben, dass die Spielfigur zum Beispiel durch l¨angeres Dr¨ ucken der Sprungtaste weiter springen kann. Diese Eigenschaft wird auch innerhalb des 39 7.3 Ausblick Madlen Thaleiser Konzeptes von Smith et al. verwendet. Bei der Spielfigur Kitty jedoch wird nur eine angemessene Sprungh¨ohe festgelegt, aber die M¨oglichkeit, weiter springen zu k¨ onnen, fehlt. Die Erweiterung um Multiwege im Allgemeinen jedoch ist gelungen. Durch die Erweiterung der beiden verwendeten Methoden der prozeduralen Generierung, die generative Grammatik und das Coinstraint-Satisfaction-Problem (vgl. Abschnitt 3.2), ist gezeigt worden, dass das bestehende Modell von Smith et al. [9, 12] um neue Aspekte erg¨anzt werden kann. Aus den genannten Punkten lassen sich M¨oglichkeiten f¨ ur die Weiterentwicklung von Kitty’s Adventure“ ableiten. Zudem kann auch das Konzept ” des Levelgenerators von Smith et al. und die Erweiterung um Multiwegen auf Basis dieser Erkenntnisse weiterentwickelt werden. 7.3 Ausblick Die prozedurale Generierung wird k¨ unftig bei der Erstellung von Inhalten, z. B. in Spielen, weiter an Bedeutung gewinnen. Der Einsatz der Software SpeedTree“ [47] in Spiel- und Filmproduktionen ” ist eine Erleichterung f¨ ur die Produktion dieser Werke. In Zukunft wird die Online-Generierung (siehe Abschnitt 3.4 von Inhalten neue M¨oglichkeiten und Chancen f¨ ur die Entwicklung von Spielen bieten. Auch der Ansatz des rhythmusbasierten Levelgenerators, der die Grundlage f¨ ur diese Arbeit und f¨ ur die Erweiterung um Multiwege ist, bietet weitere Optionen f¨ ur die k¨ unftige Levelgenerierung. So k¨ onnten Multiwege innerhalb des Levels sowohl oberhalb als auch unterhalb eines Hauptweges verlaufen. Eine Realisierung f¨ ur einen Multiweg, der unterhalb des Hauptweges verl¨auft, ist in dieser Arbeit gegeben und kann als Ansatz f¨ ur die Umsetzung eines oberhalb verlaufenden Multiweges dienen. Dabei muss die Distanz zwischen dem Hauptweg und dem Multiweg so gestaltet werden, dass die beiden Wege sich nicht gegenseitig behindern. Daher ist eine Distanz zu w¨ ahlen, die die beiden Wege weit genug von einander trennt. Hierbei kann es vorkommen, dass der Zugang zu einem oberhalb verlaufenden Multiweg nicht durch einen einfachen Sprung m¨oglich ist. Um den Zugang zu gew¨ ahren, m¨ ussten neue Spielelemente wie zum Beispiel eine Ranke integriert werden. Weitere Erweiterungsm¨ oglichkeiten von Multiwegen bietet der vorgestellte Ansatz des simplen Multiweges. Statt einer Reihe von Bl¨ocken mit gleicher H¨ohe zu generieren, k¨ onnten auch verschieden hohe Bl¨ocke generiert werden. Dazu m¨ usste die Grammatik noch um weitere Symbole erweitert werden. Des Weiteren sollte eine Evaluation erfolgen, die den umgesetzten Ansatz und dessen Erweiterung bewertet. M¨ogliche Kriterien f¨ ur die Bewertung w¨aren, wie herausfordernd die Level empfunden wurden, ob starke Frustration herrscht, an welchen Stellen diese Frustration auftrat und wie das Spielerlebnis insgesamt war. Dies m¨ usste in Abh¨angigkeit zum Level erfolgen. 40 7.3 Ausblick Madlen Thaleiser Daher sollte der Generator noch um eine Speicher- und Ladefunktion erweitert werden. Damit k¨ onnen generierte Level gespeichert werden und bei der Evaluation kann auf genaue Komponentenkombinationen des gespeicherten Levels eingegangen werden Zudem sollte bei der Evaluation auch eine Kontrollgruppe aus manuell erstellten Level betrachtet werden, damit ein Bezugspunkt f¨ ur die Qualit¨at der automatisch generierten Level gegeben ist. Dabei w¨are beispielsweise noch zu kl¨ aren, ob die manuell erstellten Level Rhythmen als Grundlage f¨ ur die Aneinanderreihung der Levelkomponenten haben sollen oder ob die Aneinanderreihung beliebig sein kann. 41 8 Quellenverzeichnis 8 8.1 Madlen Thaleiser Quellenverzeichnis Literatur [1] Lucas Ferreira, Leonardo Pereira, and Claudio Toledo. A multipopulation genetic algorithm for procedural generation of levels for platform games. In Proceedings of the 2014 Conference Companion on Genetic and Evolutionary Computation Companion, GECCO Comp ’14, pages 45–46, New York, NY, USA, 2014. ACM. [2] Mark Hendrikx, Sebastiaan Meijer, Joeri Van Der Velden, and Alexandru Iosup. Procedural content generation for games: A survey. ACM Trans. Multimedia Comput. Commun. Appl., 9(1):1:1–1:22, February 2013. [3] Steve Dahlskog and Julian Togelius. Patterns and procedural content generation: Revisiting mario in world 1 level 1. In Proceedings of the First Workshop on Design Patterns in Games, DPG ’12, pages 1:1–1:8, New York, NY, USA, 2012. ACM. [4] Gillian Smith, Jim Whitehead, Michael Mateas, and Mike Treanor. Launchpad: A Rhythm-Based level generator for 2D platformers. IEEE Transactions on Computational Intelligence and AI in Games, 3(1):1– 16, March 2011. [5] Fausto Mourato, Manuel Pr´ospero dos Santos, and Fernando Birra. Automatic level generation for platform videogames using genetic algorithms. In Proceedings of the 8th International Conference on Advances in Computer Entertainment Technology, ACE ’11, pages 8:1–8:8, New York, NY, USA, 2011. ACM. [6] Ken Hartsook, Alexander Zook, Sauvik Das, and Mark O. Riedl. Toward supporting stories with procedurally generated game worlds. In Sung-Bae Cho, Simon M. Lucas, and Philip Hingston, editors, CIG, pages 297–304. IEEE, 2011. [7] Peter A. Mawhorter and Michael Mateas. Procedural level generation using occupancy-regulated extension. In Georgios N. Yannakakis and Julian Togelius, editors, CIG, pages 351–358. IEEE, 2010. [8] Martin Jennings-Teats, Gillian Smith, and Noah Wardrip-Fruin. Polymorph: A model for dynamic level generation. In G. Michael Youngblood and Vadim Bulitko, editors, AIIDE. The AAAI Press, 2010. [9] Gillian Smith, Mike Treanor, Jim Whitehead, and Michael Mateas. Rhythm-based level generation for 2d platformers. In Proceedings of the 4th International Conference on Foundations of Digital Games, FDG ’09, pages 175–182, New York, NY, USA, 2009. ACM. 42 8.2 Online-Ressourcen Madlen Thaleiser [10] Chris Pedersen, Julian Togelius, and Georgios N. Yannakakis. Modeling player experience in super mario bros. In Pier Luca Lanzi, editor, CIG, pages 132–139. IEEE, 2009. [11] Chan, Chia-Jung and Thawonmas, Ruck and Chen, Kuan-Ta. Automatic Storytelling in Comics: A Case Study on World of Warcraft. In CHI ’09 Extended Abstracts on Human Factors in Computing Systems, CHI EA ’09, pages 3589–3594, New York, NY, USA, 2009. ACM. [12] Gillian Smith, Mee Cha, and Jim Whitehead. A framework for analysis of 2d platformer levels. In Proceedings of the 2008 ACM SIGGRAPH Symposium on Video Games, Sandbox ’08, pages 75–80, New York, NY, USA, 2008. ACM. [13] editor. Mark J. P. Wolf. The video game explosion: A history from pong to playstation and beyond, 2007. [14] Kate Compton and Michael Mateas. Procedural level design for platform games. In John E. Laird and Jonathan Schaeffer, editors, AIIDE, pages 109–111. The AAAI Press, 2006. [15] Ralph Koster. A Theory of Fun for Game Design, 2005. [16] Michael Mateas and Andrew Stern. Procedural authorship: A casestudy of the interactive drama facade. In Digital Arts and Culture (DAC), 2005. [17] Przemyslaw Prusinkiewicz and Aristid Lindenmayer. The algorithmic beauty of plants, 1996. [18] P. Prusinkiewicz and James Hanan. Lindenmayer systems, fractals and plants, 1989. [19] Vladimir Iakovlevich Propp. Morphology of the folktale, 1968. 8.2 Online-Ressourcen [20] John Kloetzli, Jr. Procedural Terrain Generation in Sid Meiers Civilitazion V. http://www.firaxis.com/?/blog/single/ procedural-terrain-generation-in-sid-meiers-civilization-v, 2013. [21] Derek Yu. The Full Spelunky on Spelunky. http://makegames.tumblr.com/post/4061040007/ the-full-spelunky-on-spelunky, 2011. 43 8.3 Spiele Madlen Thaleiser [22] David Clyde. Adding Realistic Rivers to Random Terrain. http://archive.gamedev.net/archive/reference/articles/ article2065.html, 2004. [23] Brown University. proppian fairy tale generator. https://web.archive.org/web/20110716054518/http://www. brown.edu/Courses/FR0133/Fairytale_Generator/gen.html, 2001. [24] Ken Perlin. Making Noise, 1999. http://www.noisemachine.com/ talk1/index.html. [25] www.speedtree.22slides.com. http://speedtree.22slides.com/games/72157649979891788. [26] www.speedtree.22slides.com. http://speedtree.22slides.com/cinema-animation#3377_image_ 223299. [27] killscreendaily.com. http://killscreendaily.com/articles/ brief-history-roguelike/. [28] http://www.mariouniverse.com/maps/nes/smb, Welt 1-1 aus Super Mario Bros“. ” http://www.mariouniverse.com/images/maps/nes/smb/1-1.png. 8.3 Spiele [29] CD Projekt RED. The Witcher 3: Wild Hunt, 2015. [30] Grynsoft. Wings of Vi, 2014. [31] Nintendo EAD. Super Mario 3D World, 2013. [32] Blit Software. Sonic CD, 2012. [33] Firaxis Games. Civilization V, 2010. [34] Gearbox Software. Borderlands, 2009. [35] Derek Yu, Andy Hul, Bitworks. Spelunky, 2008. [36] Ubisoft Montreal und Ubisoft Milan. Donald Duck - Quack Attack, 2000. [37] Nintendo EAD. Mario 64, 1996. [38] Sega. Sonic the Hedgehog (Genesis), 1991. [39] Brøderbund. Prince of Persia, 1990. 44 8.4 Sonstige Quellen Madlen Thaleiser [40] Nintendo EAD. Super Mario Bros, 1985. [41] Activision. Pitfall!, 1982. [42] Nintendo EAD. Donkey Kong, 1981. [43] University of California, Berkeley. Rogue, 1980. [44] Universal. Space Panic, 1980. 8.4 Sonstige Quellen [45] James Cameron. Avatar, 2009. [46] Unity Technologies. Unity 3D Engine, 2005. Version 4.6.3 (Feb. 19, 2015). [47] Interactive Data Visualization, Inc,. Speedtree, 2002. Version 6.3. for Games (Mar 20, 2013) and Version 7.0 for other Applications (Nov 13, 2013). 45 A Inhalt der DVD A A.1 Madlen Thaleiser Inhalt der DVD Bachelorarbeit Pfad: / BachelorarbeitThaleiser2015.pdf ............... A.2 Bachelorarbeit Projekt Pfad: /Projekt/ /Standalone und Web ................................. ausf¨ uhrbare Dateien f¨ ur Windows und Mac OS X /Kitty’s Adventure ...................................... Unity-Projektordner mit allen verwendeten Assets und den Quellcode-Dateien 46
© Copyright 2024 ExpyDoc