Der Produktionsprozess in der Spieleentwicklung und mögliche
Transcription
Der Produktionsprozess in der Spieleentwicklung und mögliche
Der Produktionsprozess in der Spieleentwicklung und eine mögliche Optimierung durch den Einsat z von Design Pattern Markus Raab - Diplomarbeit eingereicht am Fachhochschul - Studiengang Medientechnik und -design in Hagenberg im Juni 2002 © Copyright Markus Raab 2002 Alle Rechte vorbehalten 1. Begutachter: Dr. Michael Haller Eidesstattliche Erklärung Ich erkläre hiermit an Eides statt, dass ich die vorliegende Arbeit selbständig und ohne fremde Hilfe verfasst, andere als die angegebenen Quellen und Hilfsmittel nicht benutzt und die aus anderen Quellen entnommenen Stellen als solche gekennzeichnet habe. Hagenberg, Juni 2002 Markus Raab iii Vorwort Dieses Vorwortes möchte ich nützen, um mich besonders bei meinem Betreuer an der Fachhochschule Hagenberg, DI Dr. Michael Haller für die ausgezeichnete Betreuung und hilfreiche Unterstützung bei meiner Diplomarbeit zu bedanken. Ein weiterer Dank gilt meinen Eltern, die mich während meiner bisherigen Schul- und Studienzeit stets unterstützt und mir diese Ausbildung ermöglicht haben. Weiters möchte ich mich auch bei meiner Freundin Astrid, meinem Bruder Andreas und allen Freunden für die ständig aufmunternden Worte und der psychologischen Unterstützung bedanken. iv Kurzfassung Der Produktionsprozess in der Spieleentwicklung hat sich seit den Anfängen der Computerspieleindustrie stark gewandelt. Die Teamzusammensetzungen und die Entwicklungsmethoden benden sich im stetigen Wandel, um mit der rasanten Entwicklung der Technik Schritt halten zu können. Durch die hohen Anforderungen, welche durch kurze Entwicklungszeiten und den trotzdem geforderten, perfekten Ergebnissen, an den Entwicklungsteams lasten, muss ständig nach neuen Technologien gesucht werden, um die Produktionsprozess zu optimieren. Vor allem die Suche nach allgemein gültigen und anwendbaren Methoden, welche unabhängig von den verschiedenen Spielgenres und Plattformen auf denen entwickelt wird, eine Steigerung der Efzienz und der Strukturiertheit der Entwicklungen gewährleisten, ist ein wichtiger Faktor, um eine Optimierung zu erreichen. Eine dieser Technologien ist der Einsatz von Design Pattern, welche schon längere Zeit und mit Erfolg, in der herkömmlichen Softwareindustrie eingesetzt und teilweise auf die Spieleentwicklung adaptiert werden. Doch die Findung, Dokumentation und Sammlung von neuen, spielespezischen Design Patterns, muss noch viel intensiver vorangetrieben werden, um aus einem umfangreichen Katalog verschiedenster Pattern auszuwählen und diese auch sinnvoll einsetzen zu können. Ob und wie der Einsatz von verschiedenen Design Pattern den Produktionsprozess beeinussen oder optimieren könnte, soll im Zuge dieser Arbeit erörtert werden. v Abstract Since the beginning of the Computer Game Industry, the production process in game design has changed enormously. The team structure and design methods have to change constantly to keep up with the rapid evolution of technique. Because of the high demands, which are a result of the short development period and the perfect demanded results of the products, the industry has to search all the time for new technologies to optimise the production process and to develop satisfying products. One of the most important things is the search for generally valid and applicable methods, which are regardless from the specic game genre and the operating system on which the game will be developed, to increase the efciency and structure of the developments. One of these technologies is the usage of Design Patterns. Most of these Patterns are used in the traditional software industry for a long time and are adapted successfully by the game designers. But the detection and documentation of new, game specic Design Patterns are still at the beginnings. The ways how these Design Patterns can affect and optimise the production process in game design are treated in this thesis. vi Inhaltsverzeichnis Eidesstattliche Erklärung..........................................................................ii Vorwort.....................................................................................................iv Kurzfassung..............................................................................................v Abstract....................................................................................................vi Inhaltsverzeichnis.....................................................................................vii Abbildungsverzeichnis...............................................................................ix 1 Einleitung 1 1.1 Motivation 1 1.2 Zielsetzung 2 2 Das Entwicklungsteam 4 2.1 Entwicklung der Spielebranche und Auswirkung auf das Entwicklungsteam 4 2.2 Denition der unterschiedlichen Entwickler und Abteilungen 6 2.2.1 Management Abteilung 7 2.2.2 Programmierabteilung 9 2.2.3 Graphikabteilung 10 2.2.4 Musikabteilung 10 2.2.5 Support- und Qualitätssicherungsabteilung 11 2.3 Kommunikation im Entwicklungsteam 12 2.3.1 Wodurch entstehen Kommunikationsprobleme 12 2.3.2 Von einer Gruppe zum Team 14 3 Der Produktionsprozess in der Spieleentwicklung 16 3.1 Ablauf des Produktionsprozesses 16 3.1.1 Die Idee vs. Konvertierung und Lizenz 16 3.1.2 Die Designphase 18 3.1.3 Die Pre-Produktion 19 vii I nhaltsv e rz e ichnis 3.1.4 Die Produktion 20 3.1.5 Die Post-Produktion 20 3.2 Qualitätssicherungsmaßnahmen 21 3.2.1 Meilensteine und Checkpoints 22 3.2.2 Wie läuft Qualitätssicherung ab 22 3.3 Unterschiede im Produktionsprozess durch unterschiedliche Plattformen 26 3.3.1 Unterschiede zwischen PC und PC 26 3.3.2 Unterschiede zwischen PC und Konsole 26 3.3.3 Unterschiede zwischen Konsole und Konsole 27 4 Softwarekonzepte 29 4.1 Wiederverwendung in der Spieleentwicklung 29 4.1.1 Denition von Patterns 30 4.1.2 Das Pattern Template 31 4.1.3 Kategorien von Patterns 31 4.1.4 Darstellung von Pattern 32 4.2 Design Pattern im Einsatz 33 4.2.1 Das Template Patterns 33 4.2.2 Das Iterator Patterns 36 4.2.3 Das MVC-Konzept und Observer Pattern 39 4.2.4 Das Factory Patterns 43 4.2.5 Das Platzhalter Patterns 47 5 Vergleich mit dem Prototypen 51 5.1 Beschreibung des Prototypen 51 5.2 Optimierung des Prototypen durch den Einsatz von Design Pattern 53 5.2.1 Einsatz des Template Patterns 53 5.2.2 Einsatz des Iterator Patterns 55 5.2.3 Einsatz des MVC-Konzepts und des Observer Patterns 57 5.2.4 Einsatz des Factory Patterns 59 5.2.5 Einsatz des Platzhalter Patterns 61 6 Weiterentwicklung der Computerspiele 62 7 Resümee 66 Literaturverzeichnis 68 Anhang 1: Spielebeschreibung des Prototypen 77 Anhang 2: Inhaltsverzeichnis der CD-ROM 79 viii Abildungsverzeichnis 2.1.: Amstrad CPC 464, gebaut 1984 2.2.: Deer Hunter von Wizard Works 2.3.: Abteilungen einer Spielerma 2.4.: Kreislauf zur Fehlerbehebung im Code 2.5.: Kommunikation zwischen den Entwicklungsteams 3.1.: Die verschiedenen Phasen der Spieleentwicklung 3.2.: Einzelne Stufen bei der Erstellung eines Design Dokuments 3.3.: Mögliche Produktionsverläufe 3.4.: Verschiedene Phasen der Qualitätskontrolle 3.5.: Vergleich PC und Konsole 4.1.: Einteilung der Pattern in drei Kategorien 4.2.: Beispiel für Wiederverwendung gleicher Module 4.3.: Das Spiel Xenon2. Entwickelt von der Firma Bitmap Brothers, 1992 4.4.: Das Spiel Bananoid von William Rieder,1989 4.5.: Klassenstruktur eines Template Patterns 4.6.: Pseudocode des Template Patterns 4.7. :Durchlaufen einer Liste mit Elementen gleichen Typs 4.8.: Klassenstruktur eines Iterator Patterns 4.9.: Pseudocode eines Iterator Patterns in Java 4.10.: Einfaches Schiffe versenken 4.11.: Einfach Ablaufstruktur des MVC-Konzeptes 4.12.: Kommunikationsablauf im MVC-System 4.13.: Observer Pattern im praktischen Einsatz 4.14.: Das Strategiespiel Dune2 4.15.: Command & Conquer zeigt ebenfalls zwei unterschiedliche Ansichten 4.16.: Need for Speed 5 mit verschiedenen Ansichten ix Abbildu ngsv e rz e ichnis 4.17.: Screenshot von Aquanoid 4.18.: Pseudocode zeigt praktische Anwendung des Factory Patterns 4.19.: Verschiedene int-Werte stehen für die speziellen Token 4.20.: Aufteilung der Spielbereiche bei Dune2 4.21.: Darstellung möglicher Bereichsaufteilung 4.22.: Vergleich zwei verschiedener Cockpits und selber Strecke bei Stunts 4.23.: Aufteilung der Spielansicht bei Stunts 4.24.: Ablaufdiagramm bei der Wahl der Strecke und des Autos 5.1.: Menü und Hilfeanzeige des Prototypen 5.2.: Das dritte Level des Flashspiels 5.3.: Klassenstruktur des Template Patterns im Bezug auf den Prototypen 5.4.: Screenshot des ersten Levels des Prototypen 5.5.: Verknüpfung zwischen Index und Buchstaben 5.6.: Pseudocode für eine Iterator-Anwendung 5.7.: Beispiel für HUDs beim Prototypen 5.8.: MVC Darstellung bezogen auf den Prototypen 5.9.: Level 4 des Flashspiels 5.10.: Aufteilung des Prototypen in gleichbleibende Teilbereiche 6.1.: Spacewar 6.2.: Pong 6.3.: Moore’s Gesetz 6.4.: 3D Brille - Shutter Glasses 6.5.: Modell eines Caves 6.6.: Datenhandschuh x Kapite l 1 Einleitung 1.1 Motivation Den Anwendern von Spielesoftware ist immer nur das Endergebnis, das Spiel selbst, ersichtlich. Wie viel Arbeit, Technik und Forschung wirklich dahinter steckt, um ein erfolgreiches Spiel auf den Markt zu bringen, kann kaum jemand wirklich beurteilen. Durch das ständige Verlangen der Konsumenten nach noch mehr und noch besseren Spielen, hat sich die Spielebranche längst von unabhängigen und zwanglosen Entwicklungsteams, zu leistungsorientierten, unter Erfolgsdruck stehenden Spieleschmieden gewandelt. Um die vorgegebenen Projektziele möglichst efzient und kostengünstig realisieren zu können, müssen Methoden aus anderen Softwarebereichen adaptiert und neue Wege gefunden werden, um den Entwicklungsprozess zu optimieren. In vielen Fällen können Konzepte und Systeme aus anderen Softwaresparten oder Industriezweigen, wie z.b. der Filmindustrie, angewandt werden, welche aber trotzdem oftmals erst der Spielebranche angepasst werden müssen. Durch die knapp bemessene Entwicklungszeit, welche zum Beispiel durch Lizenzverträge bei Spieleprojekten immer wieder auftritt, kann nicht ständig die Zeit zur Suche nach den efzientesten Lösungsstrategien für ein Problem und deren Aufzeichnung aufgewandt werden. So kann es vorkommen, dass ein ähnliches Problem wieder neu gelöst werden muss, da keine Informationen mehr über dessen letztmaligen Lösungsweg vorhanden sind. Die Verwendung von Design Pattern, einem allgemeinen Konzept zur Beschreibung wiederkehrender Probleme und deren Lösungen, wie es in den folgenden Kapiteln beschrieben wird, könnte der Spieleentwicklung wertvolle Zeit sparen und wiederkehrende Konikte und Problemsituationen lösen. 1 Einle itu ng 2 1.2 Zielsetzung In dieser Diplomarbeit soll anhand von Beispielen, Vergleichen und eigenen Erfahrungen, der Prozess der Spieleentwicklung genauer betrachtet, analysiert und evaluiert werden. Weiters soll der Frage nachgegangen werden, ob durch den Einsatz von Design Pattern, der Entwicklungsprozess gegebenenfalls optimiert und/oder vereinfacht werden kann. Die Design Pattern werden als beispielhafte Anwendung auf einen Prototypen, ein Flashspiel, welches im Verlauf des Praktikums am Fraunhofer Anwendungszentrum für Computergraphik in Frankfurt realisiert wurde, angewandt. Die Informationen für die jeweiligen Kapitel wurden einerseits aus einschlägiger Literatur bezogen, andererseits von renommierten Spielermen (z.B.: Firma Neo in Wien), um aus erster Hand zu erfahren, wie diese Unternehmen an den Entwicklungsprozess herangehen und abwickeln. Kapitel zwei beschäftigt sich mit der allgemeinen Rollenverteilung innerhalb eines Produktionsteams bei einer Spieleentwicklung. Dies dient als Grundlage für das Verständnis des darauf folgenden Kapitels. Es soll gezeigt werden, wie viele verschiedene Personen und Abteilungen in einer Entwicklungsrma nötig sind, um ein erfolgreiches Produkt so efzient als möglich zu erstellen, und wie eine reibungslose Kommunikation zwischen den Beteiligten, trotz unterschiedlichster Abteilungen und Wissensgebiete der Mitarbeiter, gewährleistet werden kann. Das dritte Kapitel beschreibt den generellen Entwicklungsprozess. In welche Abschnitte er sich aufteilt, die zeitliche Abfolge und welche Arbeitsschritte die jeweiligen Produktionsstufen enthalten. Es soll hierbei auf grundlegende Fragen eingegangen werden, wie dieser Prozess von der Ideenndung, bis hin zum verkaufsreifen Produkt, vonstatten geht. Der Qualitätssicherung ist ein eigenes Unterkapitel gewidmet, da es ein wichtiger Bestandteil der Entwicklungsphase ist und sich grundsätzlich über die gesamte Produktionsdauer erstreckt. Am Ende dieses Kapitels wird weiters ein Vergleich zwischen PC und Konsolen gezogen, da sich diese im Entwicklungsprozess stark unterscheiden. Kapitel vier untersucht eine mögliche Optimierung des Entwicklungs- 2 Einle itu ng 2 prozesses durch den Einsatz von Design Pattern. Hierfür werden bekannte Pattern aus der herkömmlichen Softwareindustrie verwendet, um diese auf die Möglichkeit des Einsatzes in der Spieleentwicklung zu überprüfen. Diese gefundenen Design Pattern sollen anschließend in Kapitel fünf auf das Flashspiel adaptiert werden, um somit eine mögliche Optimierung der Implementierungsstruktur und Entwicklungsablauf aufzuzeigen. Anhand der Erfahrung durch diese schon bekannten Pattern, soll ebenfalls versucht werden, neue Pattern, speziell für die Spieleentwicklung zu nden und anzuwenden. 3 Kapitel 2 Das Entwicklungsteam Die Teamgliederung hängt stark von der Unternehmensgröße und -philosophie ab. In den folgenden Punkten wird eine Teamstruktur deniert, welche mit kleinen Änderungen und Abweichungen beinahe in jeder Spieleentwicklungsrma vorzunden ist. Der größte Teil der hier verwendeten Literatur bezieht sich auf die amerikanische Spieleindustrie, da Amerika noch immer den Vorreiter in Sachen Computerspieleentwicklung darstellt. Daher ist es auch sehr schwierig, eine allgemein gültige Regel über die Zusammensetzung von Entwicklungsteams in der Spieleindustrie aufzustellen. 2.1 Entwicklung der Spielebranche und Auswirkung auf das Entwicklungsteam Durch den raschen Fortschritt der Technik hat auch die Spieleindustrie in den letzten 40 Jahren eine rasante Entwicklung vollzogen. Die ersten Computerspiele wurden von enthusiastischen Amateuren programmiert, welche für ZX Spectrum, Commodore C64 oder Amstrad CPC 464, siehe Abbildung 2.1, entwickelten. Durch die geringen Speicherkapazitäten und den schlechten Grakausgaben war die Spieleentwicklung anfänglich leider nur sehr beschränkt möglich. Für die Entwickler stellte es kein großes Problem dar, ein Spiel in “relativ” kurzer Zeit im Alleingang umzusetzen. [Rollings & Morris 2000]. Diese waren somit Programmierer, Künstler und Verleger in einer Person [Sikora 2002c]. Heutzutage würde es ebenfalls kein Problem darstellen, seine Spielideen bis hin zum fertigen Produkt, als Lone Wolf1 zu realisieren. Aber es darf nicht davon ausge- 1 Spieleentwickler, welcher alle Arbeiten selbst erledigt (Programierung, Grak,..) 4 Das Entw ick lu ngste am 2 und sich auch kommerziell erfolgreich behaupten können. Dafür sind die Anforderungen der Konsumenten an Spielabhandlung und Grak in der heutigen Zeit einfach zu hoch [Gruber 2001b]. Dies soll jedoch nicht bedeuten, dass erfolgreiche Spiele nur mit Abb. 2.1 Amstrad CPC 464, gebaut 1984 [Amstrad 2002] großem nanziellen und personellen Aufwand entwickelt werden können. Zum Beispiel war Deer Hunter von , in Abbildung 2.2 dargestellt, eines der am billigsten produzierten und gleichzeitig eines der verkaufsstärksten Spiele des Jahres 1998. Durch eine innovative Spielidee, einer clevern Vermarktung und vergleichsweise günstigen Preisen, gingen alleine in den USA mehr als eine Million Exemplare dieser Jagdsimulation über den Ladentisch [Saltzmann 2000]. Durch die stetig wachsenden Ansprüche und die damit verbundenen Techniken zur Realisierung, wurden immer mehr Leute notwendig, um das gewünschte Produkt erfolgreich zu entwickeln. Neue Arbeitsbereiche wurden geboren, um alle Anforderungen und Techniken realisieren zu können. Die kleinen “Ein-Mann-Unternehmen” wuchsen zu größeren, erfolgreicheren aber auch problematischeren Entwicklungsteams [Falstein & Fox 1997]. Abb. 2.2 Deer Hunter von Wizard Works 5 Das Entw ick lu ngste am 2 Doch diese Wandlung hatte noch weitere markante Veränderungen zufolge: - Dem Management wurde eine viel wichtigere Rolle zugeschrieben als bisher. - Ein Spiel zu entwickeln wurde sukzessive teurer, was die Quantität der Spiele beschränkte, jedoch die Qualität steigerte. - Da die Spiele nicht nur mehr von einer einzelnen Person produziert wurden, hatten sie auch nicht bloß den Touch des Einzelnen. Ein gesamtes Entwicklungsteam verleiht den Spielen nun Aussehen und Flair. - Die Position des Entwicklers (eng.: Designer) und des Programmierers hat sich in zwei separate Arbeitsbereiche aufgeteilt. Dies muss aber nicht unbedingt bedeuten, dass es nur Vorteile bringt, komplexe Arbeitsbereiche auf mehrere einzelne Personen aufzuteilen [Rouse 2001]. Probleme solcher Arbeitsbereichsteilung werden im Punkt 2.3 näher betrachtet. 2.2. Definition der und Abteilungen unterschiedlichen Entwickler “At least count, it takes about 217 people to design, produce and market a killer game” Miller Freeman, Computer Game Developer Conference [Gruber 2001a]. “Yeah, he is right. It takes about 20 to do a game, 10 to market, publish and sell it, and 187 to stand around, collect salaries and bitch about the stock dropping” Mark Shander, Reaktion auf die obige Aussage [Gruber 2001a]. Wie schon anfangs erwähnt, ist es nicht einfach, eine allgemein gültige Formel für die Zusammensetzung eines Entwicklungsteams zu denieren. So können folgende Punkte wohl kaum auf ein kleines Unternehmen projiziert werden. Bei kleineren Spieleschmieden werden oftmals verschiedene Positionen von ein und derselben Person besetzt. Man darf auch nicht vergessen, dass sich mitteleuropäische Spielermen noch immer nicht auf derselben Entwicklungsstufe benden wie amerikanische Unternehmen. Europa nähert sich diesem Standard jedoch mit großen Schritten, wie so manche Erfolgsprodukte aus Europa in Übersee 6 Das Entw ick lu ngste am 2 zeigen. Ein gutes Beispiel dafür bietet die Spieleentwicklungsrma NEO in Wien mit der überaus erfolgreichen Konvertierung des PC Spieles Max Payne2 auf die XBox [NEO 2002; ORF 2002]. Einen groben Überblick über die verschiedenen Abteilungen bietet Abbildung 2.3. MANAGEMENT PROGRAMMIERUNG GRAPHIK MUSIK QUALITÄTSKONTROLLE UND SERVICE Abb. 2.3 Abteilungen einer Spielerma 2.2.1. Management Abteilung Software-Entwickler (eng.: Software Planner) Das Design Dokument ist das Fundament für die Arbeit des SoftwareEntwicklers. Er ist verantwortlich für die Aufspaltung des Game Designs in funktionelle und technische Anforderungen (z.B. Planung der Game Engine, Grak Engine, etc.). Diese Gliederung dient zur Ressourcen- und Zeitplanung für das gesamte Projekt. Tauchen Fragen oder Probleme betreffend dem Design Dokument auf, werden diese gemeinsam mit dem Spielegestalter und/oder dem Technischen-Leiter behandelt. Technischer-Leiter (eng.: Lead Architect) Dieser deniert die modularen Strukturen eines Spieles und arbeitet eng mit dem Chefprogrammierer zusammen. Er kontrolliert den Code, welchen er vom Chefprogrammierer bekommt, auf seine Richtigkeit und Funktionalität. Zusammen mit dem QS-Leiter sucht er nach Unge- 2 Max Payne wurde von der nnischen Firma Remedy, mit Unterstützung von 3DRealms, entwickelt. 7 Das Entw ick lu ngste am 2 reimtheiten, sogenannten Snags, in der Implementierung. Diese werden erneut dem Chefprogrammierer mitgeteilt, welcher sie zur Behebung an die jeweiligen Programmierer aufteilt. Dieser Kreislauf wird in Abbildung 2.4 dargestellt. QS-LEITER TECHNISCHER LEITER Quell Code Kontrolle CHEF PROGRAMMIERER QUELLCODE OK ja nein bug fixing snags Abb. 2.3 Abteilungen einer Spielerma Der Technische-Leiter beteiligt sich normalerweise ebenfalls an der Programmierung. Doch durch die vielen Implementierungsüberprüfungen die er durchführen muss, den sogenannten Codereviews, hat er meist nur wenig Zeit, selbst Sourcecode zu generieren. Projektmanager (eng.: Project Manager) Der Projektmanager kommuniziert nicht direkt mit den einzelnen Programmierern oder Grakern, sondern kontaktiert diese nur über die einzelnen Leiter der Teams. Das dient vor allem dazu, kein konfuses Durcheinander in den Teams zu erzeugen, und es wird verhindert, dass etwaige Entscheidungen ohne dem Teamleiter getroffen werden. Er agiert grundsätzlich als Schnittstelle zwischen den Projektteams, dem Management und dem Marketing. Spielegestalter (eng.: Game Designer) Viele Arbeiten in der Spielentwicklung werden dem Spielegestalter zugeschrieben. Überwiegend ist er jedoch mit viel Schreibarbeit belastet. Er 8 Das Entw ick lu ngste am 2 erstellt das Design Dokument (näheres im Punkt 3) und ist für die Spiellogik, die Dialoge, die Spielabhandlung, eigentlich für das gesamte Look and Feel des Spiels verantwortlich. Deshalb ist es wichtig, dass er viel Programmierverständnis, aber auch ausgeprägte grasche Fähigkeiten aufweist, da er beides zur effektiven Umsetzung des Design Dokumentes benötigt. Dieses Allgemeinwissen ist ihm auch in den dauernden Gesprächen und Diskussionen mit den anderen Teamleitern von großem Nutzen. Wie schon erwähnt, ist der Spielegestalter der Chef über das Game Design Dokument und ist deshalb der Einzige, welcher Veränderungen an dem Dokument vornehmen darf. Er kontrolliert, durch Meetings mit den jeweiligen Teamleitern, den geradlinigen und dokumentgetreuen Ablauf des Produktionsprozesses. 2.2.2. Programmierabteilung Chefprogrammierer (eng.: Lead Programmer) Dieser weist die meiste Erfahrung und Programmierfähigkeit in der Programmierabteilung auf. Bei großen und komplexen Projekten ist der Chefprogrammierer oftmals mehr damit beschäftig zu organisieren und zu managen, als zu programmieren. Mit dem Software-Entwickler diskutiert er die codespezischen Implementierungsprobleme und teilt die vorgegebenen Module des Technischen-Leiters in funktionale Teile auf, welche er unter den Programmierern verteilt. Durch Meetings mit dem Projektmanager, versucht er das Projekt auf dem richtigen Kurs zu halten. Programmierer (eng.: Programmer) Jeder Programmierer arbeitet meistens an einem eigenständigen Abschnitt des Spieles (z.B. Steuerung oder Highscore, etc.). Unter den einzelnen Programmierern muss eine rege Kommunikation herrschen, damit Überschneidungen oder auftretende Probleme so schnell wie möglich erkannt und gelöst werden können. Natürlich ist hier auch der Chefprogrammierer gefordert, um die Vorgaben des Technischen-Leiters und des Software-Entwicklers gezielt und gut strukturiert an die einzelnen Programmierer zu verteilen. 9 Das Entw ick lu ngste am 2 2.2.3. Graphikabteilung Gestalterische-Leiter (eng.: Lead Artist) Es ist durchaus möglich, im Gegensatz zu den anderen Positionen, dass der Gestalterische-Leiter an mehreren Projekten gleichzeitig arbeitet. Bei der Spielerma NEO in Wien, konzentrieren sich die Graker und Künstler jedoch immer nur auf das gerade aktuelle Projekt [NEO 2002]. Er verbringt die meiste Zeit mit Zeichnen und Gestalten von Entwürfen und Skizzen. Er steht im dauernden Kontakt zum Chefprogrammierer und dem Spielegestalter, um sicher zu gehen, dass seine Entwürfe auch den technischen Möglichkeiten gerecht werden und den Vorgaben des Design Dokuments entsprechen. Künstler (eng.: Artist) Hier ist es ähnlich wie bei den Programmierern. Der Künstler bekommt seine Aufgaben vom Gestalterischen-Leiter zugeteilt und steht im dauernden Kontakt zu den anderen Teamkollegen. Auch er kann gegebenenfalls bei mehreren Projekten gleichzeitig beschäftigt sein. 2.2.4. Musikabteilung Komponist (eng.: Composer) Der Komponist entwickelt keine eigenen Musikstücke, sondern überprüft die fertigen Produkte des Musikers und teilt dem Effekt-Techniker mit, wie er diese weiter zu behandeln hat. Er spricht sich mit dem Spielegestalter ab, welche Musikstücke benötigt werden und welche Stimmung sie vermitteln sollen. Mit dem Chefprogrammierer bestimmt er die technischen Anforderungen der Musikles (z.B. Format, Bitfrequenz, etc). Wenn viel interaktive Musik (d.h. Tempo- oder Stimmungsveränderungen während des Spiels) benötigt wird, muss der Komponist enger mit der Programmierabteilung zusammenarbeiten, um die Musikles dem jeweiligen Spielverlauf anzupassen. 10 Das Entw ick lu ngste am 2 Musiker (eng.: Musician) Dieser bekommt seine Aufträge direkt vom Komponist. Er erstellt ganze Lieder, Musikles, etc. Effekt Techniker (eng.: Sound Effect Technician) Der Effekt-Techniker produziert Effekte wie Gewehrschüsse, Fußschritte, Umgebungsgeräusche, etc. und bearbeitet oftmals die Musikles des Musikers, damit sie den Vorschriften des Design Dokuments entsprechen. Viele dieser Musikles werden in Bibliotheken aufbewahrt, um gegebenenfalls wiederverwendet zu werden. In kleineren Unternehmen kann man diese drei Rollen ohne Probleme zu einer einzigen zusammenfassen. 2.2.5. Support- und Qualitätssicherungsabteilung QS-Leiter (eng.: Lead QA) Dieser erstellt Testpläne, um Fehler in den einzelnen Modulen3 zu nden und reicht diese Pläne an den QS-Techniker weiter. Die Auswertungen der Testpläne werden an den Projektmanager weitergeleitet, welcher die entsprechenden Abteilungen zur Fehlerbehebung informiert. QS-Techniker (eng.: QA Technician, Playtester) Der QS-Techniker muss in ewig langen Spielsessions versuchen, Fehler im Spielablauf zu nden und diese auf Kommando erneut erzeugen. Dies ist unbedingt notwendig, damit ein Debugger der Programmierabteilung zur genauen Fehlerortung im Quellcode integriert werden kann. Aber auch Ungereimtheiten bei Gestaltung und Spiellogik sollen vom QS-Techniker erkannt werden. Die so eruierten Fehler werden in den dafür vorgesehenen Testplänen vermerkt. Natürlich muss jede beliebige Fassung des Spieles (egal ob englisch, deutsch, etc.) eigenständig getestet werden. 3 Module können alle möglichen Entwicklungen während der Produktionsphase sein, die zur Realisierung des Spieles notwendig sind. Zum Beispiel 3D-Objekte, Quellcode, Musikles, Textles,.... 11 Das Entw ick lu ngste am 2 Servicetechniker (eng.: Support Technician) Die Servicetechniker sind für die restlichen Arbeiten im Unternehmen verantwortlich. Sie betreuen Netzwerke und Datenbanken, können aber auch für Spezialfälle wie zum Beispiel Motion Capturing eingesetzt werden. Folgende Literatur wurde zur Erstellung des Kapitel 2.2 verwendet [NEO 2002; Sikora 2001d; Rollings & Morris 2000; Gruber 2001]. 2.3. Kommunikation im Entwicklungsteam “When you get a group of egocentric and intelligent people in the same room together, there is usually only one predictable result: trouble.” Andrew Rollings [Rollings 2000; Rollings & Morris 2000] Befasst man sich näher mit der Teaminteraktion in der heutigen Softwareindustrie, wird schnell ersichtlich, dass diese in der Spielentwicklung viel komplexer ablaufen muss, um einen reibungslosen Produktionsprozess zu gewährleisten. Die verschiedenen Abteilungen müssen viel enger zusammenarbeiten, mehr miteinander kommunizieren und die Probleme und Anliegen anderer auch wirklich verstehen [Sanchez & Dalmau 2001]. Eine einfache Darstellung der Kommunikation zwischen den Teams ist in Abbildung 2.5 zu sehen. 2.3.1 Wodurch entstehen Kommunikationsprobleme Jedes Spiel muss einen gewissen Kick, ein jugendliches Flair aufweisen, um sich im ewigen Kampf um Verkaufszahlen und Akzeptanz bei den Anwendern behaupten zu können. Computerspiele haben einen wichtigen und gesicherten Platz in der heutigen Gesellschaft eingenommen. Die einstmaligen “Amateurprogrammierer” haben sich von einsamen, unbekannten Garagenhackern, zu erfolgreichen und beneideten Spielentwickler gemausert. Werden in dieser Branche neue Kräfte in einem Unternehmen gesucht, dann 12 Das Entw ick lu ngste am 2 wohl kaum alteingesessene Design- oder Programmiergurus, sondern junge, dynamische, am Nerv der Zeit wirkende Entwickler, welche den Trend der Computerspiele nur zu gut kennen, besser gesagt erkennen [Rollings & Morris 2000; Falstein & Fox 1997]. Viele dieser jungen Genies sind, durchaus berechtigt, sehr von ihrer Persönlichkeit und ihren Leistungen überzeugt. Darum ist es oft so schwierig, diese Individualisten in ein Team zu integrieren, wo Erfahrungsaustausch, Mitarbeiterakzeptanz und Gemeinschaftssinn die wichtigsten Faktoren einer harmonischen Zusammenarbeit darstellen [Falstein & Fox 1997] Artist 1 .. Artist X Lead Artist Progr. 1 .. Progr. X Lead Progr. Musiker QA Tech. Sound Effekt Techniker Support Tech. Composer Marketing Projekt Manager Game Designer Lead QA Lead Architekt Software Planer Legende: Projekt Manager gilt als allgemeine Schnittstelle für die gesamten Abteilungen Kommunikation zur Behebung von snags im Code Kontrolle der Design-Dokument-Vorschriften durch Meetings und Besprechungen In der Managementabteilung herrscht stetig rege Kommunikation untereinander Die einzelnen Teamleader sind die Kontaktperson nach außen Absprache für korrekten und reibungslosen Projektverlauf Abb. 2.5 Kommunikation zwischen den Entwicklungsteams 13 Das Entw ick lu ngste am 2 Da kein Entwickler heutzutage mehr alleine verantwortlich ist für Entwurf, Programmierung, Grak und Vermarktung (siehe Punkt 2.1) und die einzelnen Entwicklungsbereiche voneinander getrennt werden, kann es unter den, oftmals mit fachspezischem Wissen gesegneten Mitarbeitern der jeweiligen Abteilungen, zu Verständnisproblemen in Gesprächen und Diskussionen untereinander kommen. Aber das Wissen über die Arbeitsweisen und Probleme der anderen Entwicklungsbereiche und deren Interaktion miteinander, ist ein grundlegender Stützpfeiler für ein erfolgreiches Produkt. Vor allem in der Spieleindustrie ist diese Interaktion noch mehr erforderlich als in anderen Softwarebereichen [Sanchez & Dalmau 2001]. Einige verschiedene Typen von Spielentwicklern und deren Verhaltensproblematik in Teams, sind im Buch Game, Architecture and Design von Andrew Rollings ausgezeichnet beschrieben [Rollings & Morris 2000]. 2.3.2. Von einer Gruppe zum Team Viele Faktoren müssen berücksichtigt werden, wenn ein innovatives Team von Entwicklern gut zusammenarbeiten und verständlich zwischen den verschiedenen Abteilungen kommunizieren soll. Für den reibungsfreien Ablauf in der Gruppe ist größtenteils der Leiter jedes Teams verantwortlich. Natürlich muss schon auf unternehmensweiter Ebene ein ausgereiftes Managementsystem seinen Dienst leisten, aber jeder Einzelne kann und muss seinen Anteil zum gelungenen Informationsuss untereinander beitragen. Folgende Punkte können viel zu einem gelungenen Kommunikationsverhalten innerhalb des Unternehmens beitragen. - Eine gute Kommunikation und Informationsverteilung auf unternehmensweiter Ebene ist die Grundvoraussetzung für den gleichen Wissensstandard eines jeden Mitarbeiters. NEO setzt für jede Abteilung eine Art Tagebuch, rmeninterne Webpage ein, in dem jeder freien Zugang und Änderungsmöglichkeit hat. Treten interne Fehler oder Probleme jeglicher Art auf, so können diese diskutiert und gegebenenfalls behoben werden. Durch diesen allgemeinen Zugang zu den Informationen und Problemen können meist sehr schnell Lösungen gefunden werden, und der Infor- 14 Das Entw ick lu ngste am 2 mationen und Problemen können meist sehr schnell Lösungen gefunden werden und der Informationsstandard der Mitarbeiter wird auf etwa gleichem Level gehalten [NEO 2002]. Weiterst können regelmäßig angesetzte Meetings, auch wenn sie nur von kurzer Dauer sind, viel zum Informationsuss und Wissensaustausch beitragen. - Die Meinung und Ansichten jedes einzelnen Mitarbeiters muss von jedem seiner Kollegen voll und ganz akzeptiert werden. Gerade in der Spielebranche, wo viele exzellente Graker und Programmierer gemeinsam arbeiten, kann es leicht zu Spannungen zwischen den einzelnen Mitarbeitern kommen. - Falls es trotzdem zu Konikten kommt, sollte man versuchen jene nicht auf persönlicher Ebene zu klären, sondern immer sachlich und rmenbezogen zu bleiben. Außerdem kann ein vorher deniertes Koniktlösungssystem viel Stress und Sorge ersparen. - Wie schon kurz angesprochen, sollte immer eine Person im Team als Schnittstelle nach außen festgelegt werden (meist der Teamleader) [Rouse 2001]. Da die jeweiligen Pichten und Aufgaben x festgelegt werden, kann man durch eine klar denierte Hierarchie, den Kommunikationsablauf klar und leicht durchschaubar halten [Falstein & Fox 1997]. 15 Kapite l 3 Der Produktionsprozess 3.1 Ablauf des Produktionsprozesses Jede Spieleschmiede hat ihre eigenen Vorstellungen und Praktiken wie sie ein Spiel, von der Idee bis zum verkaufsreifen Produkt, umsetzen. Größere Unterschiede im Produktionsablauf sind eigentlich nur bei Entwicklungen für verschiedene Plattformen erkennbar (siehe Punkt 3.3). Jedoch sind in jedem Unternehmen grundlegend die selben Entwicklungsphasen vorzunden. Differenzen lassen sich vor allem bei den Bezeichnungen und durch spezischere Abweichungen in den einzelnen Produktionsabschnitten erkennen. In Abbildung 3.1 werden die fünf wichtigsten Punkte im Produktionsverlauf dargestellt. Natürlich sind die jeweiligen Phasen nicht so strikt getrennt wie hier abgebildet, sondern überlappen sich teilweise und laufen kurze Zeit parallel. Zur Übersicht und Orientierung genügt diese Darstellung aber allemal [Lamaree 2002; Rollings & Morris 2000; NEO 2002]. IDEE DESIGNPHASE PRE-PRODUKTION PRODUKTION POST-PRODUKTION QUALITÄTSSICHERUNG Abb. 3.1 Die verschiedenen Phasen der Spieleentwicklung 3.1.1 DIE IDEE VS. KONVERTIERUNG UND LIZENZ In den Spieleentwicklungsrmen werden nicht nur ständig neue Ideen 16 De r Pro du k tio nsp ro z e ss 2 für erfolgreiche Spiele geboren und umgesetzt, sondern viele Unternehmen werden mit der Konvertierung eines bereits bestehenden Spieles auf ein anderes System4 oder der Umsetzung einer bestehenden Lizenz beauftragt (z.B.: aus einem James Bond Film soll ein PC-Spiel entstehen,...). Bei Konvertierungen entfällt natürlich die Phase der Ideenndung. Die Spielhandlung und der Spielablauf sind bereits vorgegeben. Jedoch hat z.B. jede Konsole ihre eigenen Vorschriften und Hardwarespezikationen welche einzuhalten sind (vgl. Kapitel 3.2.2). Die Unterschiede zwischen den einzelnen Systemen, werden im Kapitel 3.3.3 genauer erläutert. Bei der Umsetzung bekannter Lizenzen steckt schon einiges mehr an Arbeit in der Entwicklung. Es muss zwar ein Designdokument, wenn auch nicht so aufwändig wie bei eigenen Ideen, angefertigt werden, die meisten graphischen Spielmodule (z.B.: Charaktere, Hintergründe, 3D-Objekte,...) sind jedoch durch die Lizenz bereits vorgegeben. Vor allem die Graker sind deshalb in ihrer Kreativität stark eingeschränkt, da sie keine neuen Kreationen erstellen müssen, sondern nur nach Vorlage gestalten. Meist sind auch schon vorgegebene Spielabläufe deniert, an welche man sich als Entwickler halten muss (z.B.: Indiana Jones 3 von Lucas Art). Ein weiterer Nachteil ist der meist straffe Zeitplan der bei einer Lizenzumsetzung einzuhalten ist und das sich daraus ergebende Vorurteil, dass lizenzierte Produkte immer von schlechterer Qualität sind. Da aber viel Geld für den Verleger auf dem Spiel steht, kann er sich keine unzuverlässigen Partner für die Umsetzung seiner Lizenz suchen. Deshalb wird viel Vertrauen in das Unternehmen gesetzt, was wiederum Achtung und Prestige für die Entwickler bringt [Saltzmann 2000]. Am meisten Herausforderung und Motivation bringt jedoch die Umsetzung neuer, eigener Ideen. Aber gute Ideen müssen zuerst einmal geboren und ausgebrütet werden, bevor man versuchen kann daraus einen Kassenschlager zu produzieren. Selbst in der allerersten Phase, der Ideenndung, können schon einige Fehler begangen werden, um den erfolgreichen Produktionsverlauf von vornherein zum Scheitern zu verurteilen. Die Idee muss vorerst im Gedächtnis heranwachsen und reifen. Erst nach einigen Tagen oder Wochen, wenn gedanklich die vielen Fakten und Elemente des Spieles zusammengetragen und durchgedacht sind, kann begonnen werden, eine sogenannte Featurelist zusammenzustellen. Diese besteht 4 Zum Beispiel die Konvertierung des Spieles Max Payne vom PC auf die XBox durch die Firma NEO in Wien 17 De r Pro du k tio nsp ro z e ss 2 aus ungeordneten Niederschriften von Ideen und Vorstellungen das Spiel betreffend. Mit einem Design Dokument hat dies allerdings noch nichts zu tun. Erst nach dem sogenannten Test der Zeit5 soll mit der Designphase des Spiels begonnen werden [Laramee 2002; Sikora 2002a]. 3.1.2 Die Designphase Hat die Idee den Test der Zeit standgehalten, kann nun begonnen werden, eine Kurzfassung des Design Dokumentes zu erstellen. Dieses wird auch Design Treatment genannt und ist der erste von drei Abschnitten, siehe Abbildung 3.2, in der Designphase. Es soll nur einige Seiten umfassen und die wichtigsten Punkte des Spiels denieren. Da es auch dazu dient, Kurzes Design Dokument „DESIGN TREATMENT“ Grobfassung des DD „PRELIMINARY DOCUMENT“ Endfassung des DD „FINAL GAME DESIGN DOCUMENT“ Abb. 3.2 Einzelne Stufen bei der Erstellung eines Design Dokuments dem Verleger die Idee zu präsentieren, müssen hier noch keine genauen technischen Anforderungen deniert werden. NEO in Wien muss dieses Kurzdokument nach Amerika zu Take26 schicken. Dort wird die Idee auf die Möglichkeit (Originalität, Marktverlangen,....) der Umsetzung geprüft. Dieser Abschnitt der Designphase wird bei NEO Pitchshifting-Phase genannt. Ist Take2 mit dem Kurzdokument zufrieden, kann mit der Grobfassung des Design Dokumentes - Preliminary Design Document (PDD) - begonnen werden [NEO 2002]. Diese Niederschrift kann auch als eine organisierte Liste von Features gesehen werden [Lamaree 2002]. Es sollen technische Spezikationen, die Hintergrundstory, Animationen, Filme, Charaktere, etc. schon ziemlich genau beschrieben und deniert werden. Dieses Dokument soll dazu dienen, die Anforderungen so gezielt wie möglich festzuhalten. Im Kreise der Abteilungsleiter wird diese Grobfassung diskutiert und auf die Realisierbarkeit geprüft. Wenn nötig, werden Veränderungen oder Verfeinerungen vorgenommen und erneut gemeinsam veriziert. 5 Für einige Wochen sollte man die gesamten Notizen und Fakten beiseite räumen und so wenig als möglich überhaupt über das Spiel, die Idee nachdenken. Erst am Ende dieser Zeit, wenn man erneut seine Notizen durchblättert und noch immer begeistert davon ist, soll man sich die Mühe machen und das Projekt fortsetzen [Sikora 2002a]. 6 Take2 ist ein weltweiter Verleger, Entwickler und Händler von Konsolen- und Computerspielen mit Sitz in New York. Seit einem Jahr ist NEO eine hundertprozentige Tochtergesellschaft von Take2. 18 De r Pro du k tio nsp ro z e ss 2 Erst wenn diese Grobfassung von jedem Beteiligten eine positive Zusage bekommt, wird mit dem Final Game Design Document, kurz GDD, begonnen. Das GDD soll zwar soviel Information wie möglich enthalten, es muss jedoch stets auch auf eine klare und logische Struktur im Dokument geachtet werden. Je nach Spielgenre und Komplexität des Spieles, hat ein GDD im Durchschnitt 100 bis 300 Seiten. Zu den gesamten Fakten des Preliminary Design Documents sollen hier eine noch detailliertere Beschreibung der einzelnen Module und Produktionsbereiche angefügt werden. Vor allem das Zusammenwirken der einzelnen denierten Module im PDD und der sich daraus ergebende Spielablauf soll festgehalten werden. Das nale Design Dokument muss als Grundlage für alle Fragen und Probleme während der Produktionsphase dienen. Ist das GDD endlich fertig gestellt, erreicht man den sogenannten Point Of No Return. Bis hier hin kann man ein Projekt noch abbrechen, ohne eine Unmenge an Zeit und Geld verschwendet zu haben. 3.1.3 Die Pre-Produktion Bevor nun endgültig mit der Produktion und Implementierung begonnen werden kann, müssen noch einige Produktspezikationen festgelegt werden, um eine klare und reibungslose Produktionsphase zu gewährleisten. Es werden alle notwendigen Arbeiten des Teams aufgelistet und in sinnvolle Arbeitsmodule unterteilt. Diese sind zum Beispiel die Erstellung von Soundeffekten, 3D-Modellen, Texturen, Algorithmen für Game Engine, etc. Ebenfalls entsteht in dieser Phase ein detaillierter Projektplan mit den Verantwortlichkeiten der Teammitglieder, Festlegung der Meilensteine und einem Budgetplan [Lamaree 2002]. Werden im Spiel Filmsequenzen oder längere Animationen verwendet, werden in dieser Phase die Storybords dafür erstellt. 19 De r Pro du k tio nsp ro z e ss 2 3.1.4 Die Produktion Als Grundlage für die Produktion dient das nale Game Design Dokument. Dieses soll in der Produktionsphase nicht mehr verändert werden. Oftmals tauchen jedoch während der Entwicklung neue Ideen auf, welche dem Spiel mehr Spaß und Pep verleihen könnten. Das Einfügen dieser nachträglich gewünschten Elemente wird in der Fachsprache als Feature Creep bezeichnet [Sikora 2002b; Rollings & Morris 2000; Sikora 2002d]. Da sie in der Designphase nicht eingeplant wurden, entwickeln sich diese Features meistens zu sehr kosten- und zeitintensiven Erweiterungen. So weit als möglich sollten die Probleme durch Feature Creeps schon in der Design Phase behoben werden. Außerdem kommt es meist gar nicht auf einzelne, nachträgliche eingebaute Elemente oder Effekte an. Wenn eine Spielidee gut ist, dann kann man auf nachträglich eingefügte Features ohnehin verzichten. Wären diese aber unerlässlich für den Erfolg des Produktes, wird wohl das gesamte Projekt von vornherein eine schlechte Idee oder Fehlplanung gewesen sein [NEO 2002]. Um den reibungslosen und erfolgreichen Entwicklungsablauf in der Produktion zu gewährleisten, sind die ständige Qualitätskontrolle und der Einsatz von wirkungsvollen Meilensteinen und Checkpoints unerlässlich. Mehr zu diesem Thema aber im Punkt 3.2. 3.1.5 Die Post-Produktion Bevor das fertige Produkt dem Verleger überreicht werden kann, muss sicher gestellt werden, dass alles perfekt und sauber läuft. Die letzten Snags und Fehler sollten in dieser Zeit behoben werden. Da diese Phase wegen Terminverzögerungen und kurzfristigen Problemen meist von Stress gezeichnet ist, wird sie in der Spieleindustrie auch Crunch Time genannt. Am besten wäre, wenn das Produkt schon am Ende der Produktionsphase fertig wird und diese Zeit nun zum “Aufpolieren” des Spiels verwendet werden könnte. Leider ist dies nur sehr selten der Fall. Wie viel Zeit nun tatsächlich für die Restarbeiten übrig bleibt und wie viel an Mehrarbeit für die Entwickler noch zu bewältigen ist, hängt stark von der anfänglichen, 20 De r Pro du k tio nsp ro z e ss 2 professionellen und gelungenen Zeit- und Ressourcenplanung und dem Gesamtmanagement des Projektes ab [Sikora 2002d]. 3.2 Qualitätssicherungsmaßnahmen 3.2.1 Meilensteine & Checkpoints “Just as mountaineers are warned not to eat yellow snow, you have been warned not to tolerate fuzzy milestones” [Rollings & Morris 2000] Jedermann arbeitet lieber ohne ständigen Termindruck oder einzuhaltende Abgabefristen. Meilensteine (MS) und Checkpoints (CP) sollen allerdings nicht als Druckmittel der Vorgesetzten gesehen werden, sondern als Wegweiser für einen erfolgreichen, efzienten und möglichst geradlinigen Produktionsverlauf (Siehe Abb. 3.3). Projektstart CP MS Projektende Geradliniger, erfolgreicher Entwicklungsverlauf Fehlerhafter, zielloser Entwicklungsverlauf ohne CP und MS Abb. 3.3 Mögliche Produktionsverläufe Die Denition von Meilensteinen und Checkpoints muss vorher gründlich analysiert und kalkuliert werden. Oftmals werden sie einfach nach dem Prinzip pick a date and hope for the best oder nach eigenen Wunschvorstellungen der Verleger gewählt [Rollings & Morris 2000]. Nicht nur dass durch solch unprofessionelles Handeln der gesamte Entwicklungs- 21 De r Pro du k tio nsp ro z e ss 2 ablauf gefährdet ist, auch die Motivation der beteiligten Entwickler sinkt durch diese verschwommenen und undurchsichtigen Zielsetzungen rapide. Es kommt noch hinzu, dass die Abstände der Festsetzung oftmals zu eng oder zu weit angelegt werden. Beides dient kaum zur Steigerung der Produktivität sondern setzt entweder die jeweiligen Entwickler zu stark unter Druck oder verleiht zu einem unabsichtlichen Abgleiten von der geradlinigen Bahn zum Ziel. Ein guter Mittelwert der Abstände zwischen Meilensteinen ist ein bis zwei Monate und bei Checkpoints zwischen vier und zehn Tagen. Ein weiterer schwerwiegender Fehler ist eine ungenaue Denition der jeweiligen MS oder CP. Wird dieser Punkt anfangs nur unklar oder unzureichend deniert, können die Beteiligten können bei der Abnahme des Meilensteins verschiedene Ansichten und Erwartungen des Ergebnisses haben. Damit kann es sehr leicht zu Missverständnissen und Streitigkeiten im Team kommen. Ein gut denierter Meilenstein darf keine Fragen offen lassen. Er muss so klar und präzise festgelegt werden, dass er als Ergebnis nur “0” oder “1” zulässt - geschafft oder nicht geschafft. Fallbeispiel 3.1 zeigt ein einfaches Beispiel für Zweideutigkeiten bei Zieldenitionen. Da die Meilensteine meist auch dem Verleger als Kontrolle vorgelegt werden, sollen diese wenn möglich immer so angesetzt werden, dass der Fortschritt der Entwicklung auch ohne Fachkenntnisse sichtbar ist und einen guten Eindruck hinterlässt. Im Gegensatz dazu, dienen die Checkpoints nur dem Entwicklungsteam, um den Produktionsverlauf nach Plan durchzuführen. [Pedersen 2001; Sikora 2001d; NEO 2002] 3.2.2 Wie läuft die Qualitätssicherung ab Grundlegend gibt es zwei Ursachen, warum ein Spiel am Ende der Entwicklung noch immer mit zahlreichen Fehlern übersäht ist. Entweder wurde die Zeit bis zum Abgabetermin des Spieles zu knapp und der Verleger brachte das Spiel trotzdem Termingerecht auf den Markt, oder das Testen wurde unprofessionell und minderwertig durchgeführt [Rollings & Morris 2000]. Wird ein Spiel auf den Markt geworfen, welches vorher unzureichend oder schlecht getestet wurde, verliert es trotz vielleicht guter 22 De r Pro du k tio nsp ro z e ss 2 Fallbeispiel 3.1 [Rollings & Morris 2000] Ausgangspunkt ist ein Blatt Papier mit 5 Punkten (rechts). Definition des Meilensteins durch den Auftraggeber: „Verbinden Sie Punkt A mit Punkt B.“ B A E D C B A E D C Mitarbeiter XY wird mit der Lösung dieses Problems beauftragt und erhält folgendes Ergebnis (links). Dieses Ergebnis ist natürlich OK und auch logisch. Die kürzeste Verbindung zwischen zwei Punkten ist eine Gerade. Der Auftraggeber hat sich das Ergebnis aber leider ganz anders vorgestellt (rechts). Beide haben recht, aber die Bilder zeigen komplett andere Ergebnisse. B A E D C Schuld an dieser misslichen Lage ist der anfangs ungenau definierte Meilenstein. Um das vom Auftraggeber gewünschte Ergebnis zu erhalten, hätte dieser präzisere Angaben machen müssen, wobei es kein Wenn und Aber bei der Lösung des Problems geben darf. Folgende Aufgabenstellung wäre als Definition angebracht gewesen. 1. Notwendiges Utensil ist ein blauer Stift mit Strichdicke 2,25pt. 2. Verbinden Sie Punkt A mit Punkt E 3. Verbinden Sie Punkt E mit Punkt D 4. Verbinden Sie Punkt D mit Punkt C 5. Verbinden Sie Punkt C mit Punkt B Achtung: Keine direkte Verbindung zwischen Punkt A und Punkt B !! Die Vorgehensweise zum Erreichen des Meilenstein hätte keine Fragen offen gelassen und das Ergebnis wäre perfekt. 23 De r Pro du k tio nsp ro z e ss 2 Spielidee und gelungener Spielhandlung, schnell das Vertrauen und die Akzeptanz der Spieler. Bei PC-Spielen kann man sich im Zeitalter des Internets noch mit zum Download verfügbaren Patches7 abhelfen. Da man bei Entwicklungen für den Konsolenmarkt diese Form der Fehlerbehebung leider nicht anwenden kann, muss die Qualitätssicherung und die Testphase umso genauer durchgeführt werden. Obwohl die meisten Ungereimtheiten bereits in der Designphase eliminiert werden sollten, schleichen sich während der Produktion immer wieder Fehler ein, welche so schnell wie möglich behoben werden sollten. Je später man einen Fehler bemerkt, desto größer ist der zeitliche und nanzielle Aufwand ihn zu beseitigen. Die gesamte Phase der Qualitätssicherung kann man grundlegend in drei Teile, siehe Abbildung 3.4, gliedern. „SYSTEMTESTING“ QUALITÄTSSICHERUNG QA „QUALITYASSURANCE“ „PLAYTESTING“ Abb. 3.4 Verschiedene Phasen der Qualitätskontrolle - Systemtesting Es werden hierbei unterschiedliche Testfälle angewendet, um die jeweiligen Codemodule und deren Integration in das Gesamtprojekt zu kontrollieren. Diese reichen von den einfachsten Selbsttests der Programmierer, über die Verwendung von Testscripts, welche alle Features und Funktionen eines Moduls testet, bis hin zur Funktionalität des gerade fertigen Moduls nach der Integration in das Gesamtprojekt. Eine detaillierte Beschreibung der einzelnen Testfälle ndet sich im Buch von Andrew Rollings und Dave Morries - Game Architecture und Design [Rollings & Morris 2000]. - Qualitätssicherung Die vielen Snags und Fehler im Code, sollten in diesem Testabschnitt eigentlich durch den Systemtest bereits behoben sein. Es wird hier das Augenmerk auf die Ästhetik, das Look and Feel des Spieles gelegt. Die einzelnen fertiggestellten Spielabschnitte und Module werden hier getestet und die Anforderungen an Graphik und Design mit dem Final Game 7 Patches sind verfügbare Programmteile, welche nach dem Ausführen automatisch den vorliegenden Fehler im Spiel beheben. 24 De r Pro du k tio nsp ro z e ss 2 Design Document verglichen. Wie schon im Punkt 2.2.5 beschrieben, ist es unumgänglich, dass der Tester aufgetretene Fehler nicht nur zufällig ndet, sondern akribisch danach sucht und sie auch erneut immer wieder hervorrufen kann. Dies gilt vor allem für den folgenden Punkt. - Playtesting Natürlich muss das gesamte Spiel am Ende der Entwicklung auf Spielbarkeit und Spiellogik getestet werden. Die Spieletester in dieser Phase sind den ganzen Tag nur mit Spielen beschäftigt. Da alle Versionen des Spieles (verschiedene Sprachen und Systeme) getestet werden müssen, muss der Spieletester viel Ausdauer und Ruhe aufweisen, um nach tagelangen Spielesessions noch immer die Konzentration aufzuweisen, nach Ungereimtheiten im Spiel zu suchen und sie auch zu nden. Fehler in dieser Phase können Steuerungsprobleme, Verständnisprobleme der Spielaufgaben, Logik des Spielverlaufs, usw. sein. Die Ablaufreihenfolge dieser drei verschiedenen Testarten ist eigentlich wie in Abb. 3.4 dargestellt. Jedoch kommt es auch hier zu Überlappungen und parallelen Testarbeiten, je nachdem welche Teile fertig und wie sinnvoll und aussagekräftig die Testläufe sind. In jeder dieser Phasen wird ein Fehlerbericht, auch Error-Report genannt, verfasst, in welchem die aufgetretenen Fehler angeführt werden. Diese werden dem Projektmanager mitgeteilt, welcher die jeweilig zuständigen Abteilungen zur Behebung des Fehlers informiert. Bei NEO in Wien wird zur Verwaltung der Fehler eine eigene Fehlerdatenbank geführt. Dort werden alle, jemals entdeckten Fehler eingetragen. Bei Konsolenspielen werden externe Tester hinzugezogen, welche die vielen Konsolenvorschriften (z.B. TCR8 bei XBox und TAC8 bei Play Station 2) überprüfen [NEO 2002]. Auch bei PC-Produktionen werden oftmals, zusätzlich zu den eigenen, externe Spieletester angestellt. Diese gehen ohne Vorkenntnisse und Vorurteile in die Testphase und können somit weitere Fehler leichter nden als Firmeninterne. Solche externen Tester sind zum Beispiel auch Studenten, welche einfach als Spieletester fungieren. Deren Meinungen und Kritiken können schon viel über die endgültige Zielgruppe aussagen [McCuskey 2000; Sikora 2001c]. 8 TAC und TCR sind denierte Vorschriften der Konsolenhersteller, um die Funktionen und Spezikationen der Konsolen festzulegen und das Verhalten des Spiels, möglichen Handlungsweisen des Anwenders anzupassen. Beispiel dafür ist das Verhalten des Spiels beim Ziehen des Kontrollerstecker oder dem Entfernen des Speicherchips während des Speichervorganges. 25 De r Pro du k tio nsp ro z e ss 2 3.3 Unterschiede im Produktionsprozess durch unterschiedliche Plattformen 3.3.1 Unterschiede zwischen Pc und Pc Zwar sind beinahe alle PCs der potentiellen Spieleanwender verschieden konguriert und weisen unterschiedliche Hardware auf, jedoch werden die Spiele meistens auf den neuesten Rechnern entwickelt und wenn das fertige Produkt ein Jahr später auf den Markt kommt, ist dieser Hardwarestandard bereits im Heimbereich vertreten [NEO 2002]. Außerdem wird nicht bei jedem Spiel an die Leistungsgrenzen der PCs gegangen. PCSpiele sollen vor allem einer breiten Masse zugänglich sein und dies ist nur möglich, wenn man auch ältere, leistungsschwächere PCs mit älteren Hardwarebestandteilen miteinbezieht. Die meiste Arbeit für die Entwickler steckt in den Anpassungen für die Lauffähigkeit des Spiels auf den unterschiedlichen Plattformen und in der Vielzahl an verschiedenen Treibern für PCs. 3.3.2 Unterschiede zwischen Pc und Konsole Wie wir in der Abbildung 3.5 sehen, gibt es einige markante Unterschiede bei der Entwicklung für das jeweilige System. Die offensichtlichsten Probleme durch die unterschiedliche Hardware liegen bei den Ausgabegeräten und an den begrenzten Speicherkapazitäten bei den Konsolen. Eine Schwierigkeit stellen die Fernsehgeräte als Ausgabemedium für die Spiele dar. Da keine einheitliche Normung bei den Fernsehern Gültigkeit hat, kann es zu unliebsamen Bildbereichsverlusten kommen (z.B. kann es bei kleinen Fernsehern vorkommen, dass das Logo der Fernsehanstalt nur mehr teilweise sichtbar ist). Diesen möglichen Bildverlust muss man schon vorher einplanen und darf keine wichtigen Spielelemente in diesem Bereich platzieren. Durch die eingeschränkte Farbdarstellung der Fernseher im Vergleich zu den PC-Monitoren, tritt ein gewisser Farbverlust auf, der ebenfalls schon in der Entwicklungsphase bedacht werden muss [NEO 2002]. 26 De r Pro du k tio nsp ro z e ss 2 PRO CONTRA Rasante technologische Entwicklung Zeitraubende Spieleentwicklung wegen unterschiedlicher Hardware - Komponenten, Systeme und Treiber Beschränkte Anzahl von Graphikschnittstellen (Open GL, DirectX) Die gleiche Hardware für jede Konsole Großer, weltweiter Absatzmarkt Wenig Konkurrenz PC Viele Konkurrenten, da jeder mit einem PC auch ein PC-Spiel entwickeln könnte Teure Entwickler-Kits und Werkzeuge KONSOLE Viele Einschränkungen Langwierige Testphasen Portieren auf neue Hardware sehr zeitaufwändig Abb. 3.5 Vergleich PC und Konsole [Saltzmann 2000]. Leider verfügen Konsolen über vergleichsweise wenig Speicherplatz, was oftmals viele Ideen und Vorstellungen schon in der Designphase zum Scheitern verurteilt, da sie wegen Speichermangel nicht realisierbar sind. (Vergleich: GameCube hat gesamt 24 MB Speicher - neue Graphikkarten (GeForce) für PC haben bereits 64 MB [NEO 2002; GameCube 2002; nVIDIA 2002]). Eine leichte Annäherung zwischen Konsolen und PCs sind aber zum Beispiel durch die neue XBox schon ersichtlich. Die XBox verfügt bereits über einen DirectX-Support, welcher bei der Entwicklung von PC-Spielen praktisch schon Industriestandard ist [XBoxFAQ 2002]. Diese und weitere Spezikationen sind in den jeweiligen konsolenabhängigen Vorschriften (siehe Punkt 3.2.2), welche unbedingt von den Entwicklern einzuhalten sind, deniert. Sich an diese Vorgaben zu halten, kann einerseits das Entwickeln erleichtern, da man sich auf die jeweiligen Angaben 100%ig verlassen kann, aber wiederum die Freiheiten der Entwickler einschränken. 3.3.3 Unterschiede zwischen Konsole und Konsole Auch Konsolen haben natürlich unterschiedliche Hardwarespezikationen, 27 De r Pro du k tio nsp ro z e ss 2 aber diese sind wenigstens bei den einzelnen Konsolentypen identisch. Weitere Unterschiede liegen in den vorher genannten Vorschriften welche für die jeweilige Konsole zutreffen müssen. Markante Differenzen bei selbigen Spiel auf verschiedenen Konsolen, werden in den unterschiedlichen Steuerungsvarianten und Kameraführungen bemerkbar. Vor allem wenn die einzelnen Konvertierungen von verschiedenen Unternehmen durchgeführt wurden, kann sich jedes Unternehmen durch eine noch bessere Implementierungslösung hervorheben. Als gutes Beispiel ist hier die Konvertierung von Max Payne auf die XBox zu nennen [NEO 2002, MaxPayneInt. 2001]. Die Art, wie ein Spiel durch die Steuerung kontrolliert und dem Anwender durch gelungene Kameraführung näher gebracht wird, ist für den Spielspaß und -erfolg wesentlich verantwortlich. Daher kann es auch durchaus große Unterschiede machen, ob man sich das Spiel für Play Station 2 oder XBox kauft. Weitere Informationen über die jeweiligen Systemspezikationen einzelner Konsolentypen nden sich auf folgenden Homepages [XBox 2002; Nintendo 2002; PS2 2002]. 28 Kapitel 4 Softwarekonzepte 4.1 Wiederverwendung in der Spieleentwicklung Wie schon in den vorderen Kapitel erwähnt, spielen Abgabefristen und Terminnot gerade in der Spieleentwicklung, im Vergleich zur herkömmlichen Softwareindustrie, eine viel wesentlichere Rolle. Es müssen so bald wie möglich vorzeigbare Ergebnisse geliefert werden, um den Markt mit immer neueren und besseren Spielen zu versorgen. Dadurch leiden oftmals die grundlegenden Designstrukturen der gesamten Entwicklung, da es schlussendlich nur wichtig ist, dass dem Anwender das Spiel gefällt, egal wie man dieses Ziel erreicht hat [Rollings & Morris 2000]. Andrew Rollings vergleicht diese Entwicklung in seinem Buch, Game Architecture und Design, mit der Erscheinung eines Schwans “Über der Wasseroberäche sieht man die Schönheit und Eleganz, aber darunter muss er ständig wild paddeln um nicht unterzugehen.” Probleme durch schlechte Struktur und Architektur der Implementierungen werden vor allem bei der späterer Fehlersuche oder den laufenden Implementierungsänderungen ersichtlich. Viele Softwarekonzepte, welche in der herkömmlichen Softwareindustrie bereits Standard sind, werden immer häuger in der Spieleentwicklung angewendet, um die Entwicklungsphasen zu optimieren und mögliche Probleme erst gar nicht aufkommen zu lassen. Eines dieser Konzepte ist der Einsatz von Design Pattern, um den genannten Problemen entgegen zu steuern. Dieser Idee liegt die Dokumentation von Erfahrungen und bewährten Praktiken zugrunde, die bei der Gestaltung von Softwaresystemen gemacht werden. Diese Dokumentation von Lösungen immer wiederkehrender Probleme verhindert, dass Erfahrungen die zu diesen Lösungen geführt haben, bei jedem Ent- 29 S o f tw are k o nz e p te wicklungsprozess wiederholt gemacht werden müssen [Leßmann 2001]. Ein Problem bei der Verwendung von Design Patterns ist die allgemeine Verständlichkeit und gleiche Bezeichnung der Patterns. Viele dieser Muster sind bereits aus der herkömmlichen Softwareindustrie bekannt und können in der Spieleentwicklung übernommen werden. Jedoch ist man ständig auf der Suche nach neuen, spezischeren Patterns, welche für die Spieleentwicklung eingesetzt werden können, um deren speziellen Anforderungen gerecht zu werden. Auf der gamasutra-Homepage, eine der größten Spieleentwickler-Plattform, wird seit zwei Jahren versucht, eine Datenbank für Spiele Design Patterns anzulegen und diese allen interessierten Entwicklern zugänglich zu machen, um so auch einen gewissen “Patternstandard” etablieren zu können [Hecker & Simpson 2000]. 4.1.1 Definition von Patterns Der Ausdruck Pattern hat sich in den letzten Jahren zu einem beliebten Modewort entwickelt. In allen Bereich des alltäglichen Lebens trifft man auf Patterns, egal ob es sich um das Muster auf Orientteppichen handelt oder um die Denitionen menschlicher Persönlichkeitsmuster [PatternQuiz 2002]. Die allgemeine Denition eines Patterns in der Softwareindustrie nach Christopher Alexander, lautet: “Each pattern describes a problem which occurs over and over again in our enviroment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice” [Alexander 1977]. Ganz einfach ausgedrückt deniert sich ein Pattern als eine generische Beschreibung für ein, in vielen ähnlichen Varianten wiederkehrendes Problem, welches in einem bestimmten Zusammenhang auftritt und der Denition einer allgemeinen Lösung dafür. Es soll so, eine detaillierte Lösung für jedes spezielle Problem abgeleitet werden können [Alexander 1977; Leßmann 2001]. 30 S o f tw are k o nz e p te 4.1.2 Das Pattern Template Um einen entsprechenden Standard für die Denition von Patterns zu etablieren, wurden vier grundlegende Punkte als Beschreibung für ein Pattern Template festgelegt [Kreimeier 2002]. Der Name Der Name für das entsprechende Pattern muss aussagekräftig und für jedermann verständlich gewählt werden. Die Funktionsweise des Patterns soll schon durch den Namen klar sein. “Finding good names has been one of the hardest parts of developing our catalogue” [Gamma et al. 1994]. Das Problem Beschreibt das Problem, welches wiederkehrend in einem gegebenen Zusammenhang auftritt. Die Beschreibung des Problems soll zusätzlich die Anforderungen welche die Lösung erfüllen muss, Gegebenheiten, Probleme welche berücksichtig werden müssen und die wünschenswerten Eigenschaften der Lösung enthalten [Askit 1998]. Die Lösung Eine Beschreibung des Zusammenwirkens von Eigenheiten und Mechanismen, damit das Problem gelöst werden kann. Dies ist aber keine genaue Beschreibung oder konkrete Implementierung, sondern nur eine abstrakte Struktur welche die Lösung umschreibt [Kreimeier 2002]. Die Konsequenz Alle Lösungen haben auch weitere Konsequenzen oder Probleme zur Folge. Diese sollen, wenn möglich, angeführt werden [Kreimeier 2002]. 4.1.3 Kategorien von Patterns Patterns sind je nach ihrer Abstraktionsstufe, kurz Abst., grundsätzlich in drei verschiedene Kategorien (Ebenen), siehe Abbildung 4.1, einzuteilen. 31 S o f tw are k o nz e p te Architektonische Pattern Abst. 3 Design Pattern Abst. 2 Idiome Abst. 1 Abb. 4.1 Einteilung der Pattern in drei Kategorien Idiome Benden sich auf der untersten Abstraktionsstufe und werden daher auch als Low-Level Pattern bezeichnet. Diese Muster zeigen, wie einzelne Eigenschaften einer Programmiersprache genutzt werden können. Idiome sind deshalb programmiersprachenabhängig [Leßmann 2001]. Design Pattern Diese bilden die mittlere Stufe der Abstraktion und sind im Gegensatz zu den Idiomen grundsätzlich von der Implementierungssprache unabhängig. Sie stellen ein Schema für die Verfeinerung von Subsystemen oder Komponenten eines Softwaresystems oder der Beziehung unter ihnen zur Verfügung [Askit 1998]. Architektonische Pattern Diese Pattern drücken ein fundamentales Organisationsschema für Softwaresysteme aus. Sie dienen zur Gestaltung der Systemarchitektur. Als Beispiel hierfür dient das M-V-C Konzept, welches in Punkt 4.2 noch genauer vorgestellt wird [Askit 1998; Leßmann 2001]. 4.1.4 Darstellung der Pattern Für die Darstellung der Strukturen, der im folgenden Kapitel beschriebenen Pattern, wird eine Form der Object Modelling Technique (OMT), als Beispiel siehe Abbildung 4.5, verwendet. Diese Methode hat sich bereits 32 S o f tw are k o nz e p te als Industriestandard etabliert. Da die Design Patterns grundsätzlich unabhängig von der Implementierungssprache sind, ist es prinzipiell egal, welche Programmiersprache man für die Erstellung von Pseudocodebeispielen verwendet. Im Kapitel 4.2 und Kapitel 5 wird Java verwendet. 4.2 Design Pattern im Einsatz in der Spieleentwicklung 4.2.1 Das Template Pattern Oftmals verwendet man bereits in der Implementierung Patterns, ohne sich bewusst zu sein, dass es sich um welche handelt. Das Template Pattern ist eines jener, welche Entwickler jeden Tag verwenden ohne den Gedanken daran zu verschwenden, wie und warum sie es einsetzen. Es handelt sich dabei lediglich um eine abstrakte Klasse, welche verwendet wird, um die Anforderungen in weiterer Folge zu spezialisieren. Durch die Vererbung werden die vorher festgelegten Rahmenbedingungen mit speziellen Funktionen ergänzt. Dadurch kann viel Zeit und Programmieraufwand gespart werden, da nur die sich ändernden Programmteile implementiert werden müssen und bei gleichbleibenden Teilen auf die abstrakte Klasse zurückgegriffen werden kann. Als einfaches Beispiel für eine Wiederverwendung bestehender Module soll Abbildung 4.2. dienen. Abb. 4.2 Beispiel für Wiederverwendung gleicher Module 33 S o f tw are k o nz e p te Die Karosserie des Autos ist bei jedem Modell, entspricht der abstrakten Klasse, gleich. Will man jedoch das Auto auf spezielle Situationen vorbereiten und mit anderen Reifen ausstatten, tauscht man nicht das gesamte Fahrzeug, sondern nur die vier Räder aus. In Computerspielen fallen immer wieder Objekte auf, welche oftmals gleiche oder ähnliche Eigenschaften und Strukturen aufweisen. Zum Beispiel die Bewegung der Gegner bei klassischen Shoot’m up Spielen wie Xenon2 in Abbildung 4.3. Die Gegner haben zwar unterschiedliches Aussehen, aber die grundlegenden Bewegungsabläufe, sind identisch Abb. 4.3 Das Spiel Xenon2. Entwickelt von der Firma Bitmap Brothers, 1992 Aber auch bei allen anderen Arten von Spielgenres tauchen allgemeine Grundstrukturen auf, welche man mit der Verwendung des Template Patterns, vereinfachen und verbessern könnte. Ein weiteres Beispiel hierfür ist das Geschicklichkeitsspiel Bananoid, dargestellt in Abbildung 4.4, mit den unterschiedlichen Spielsteinen. Die einzelnen Spielsteine weisen gleiches Verhalten bei Treffer auf - Ball prallt entsprechend ab. Einige der Steine beinhalten jedoch weitere, zusätzliche Eigenschaften. Abb.4.4 Das Spiel Bananoid von William Rieder, 1989 34 S o f tw are k o nz e p te Die in der Abbildung 4.5 dargestellte Klassenstruktur, zeigt die zwei verschiedenen, abgeleiteten Klassen, “ConcreteClass1” und “ConcreteClass2” der abstrakten Basisklasse “AbstractClass”. Diese abgeleiteten Klassen implementieren die verschiedenen abstrakten Methoden jeweils unterschiedlich. Die in der Basisklasse implementierte Methode “Template Method” ist jedoch in allen abgeleiteten Klassen gleich. Der darauffolgende Pseudocode in Abbildung 4.6, soll eine mögliche Implementierung dieses Patterns in Java veranschaulichen. AbstractClass TemplateMethod() anyMethod1() anyMethod2() ConcreteClass1 ConcreteClass2 anyMethod1() anyMethod2() anyMethod1() anyMethod2() Abb.4.5 Klassenstruktur eines Template Patterns abstract class AbstractClass { public AbstractClass() { TemplateMethod() } abstract anyMethod1(); abstract anyMethod2(); private void TemplateMethod(){ //this method is always the //do something //same in all derived classes } } class ConcreteClass1 extends AbstractClass { ……… ……… //any code for the anyMethod1() and anyMethod2() } class ConcreteClass2 extends AbstractClass { ……… ……… //another code for the anyMethod1() and anyMethod2() } Abb.4.6 Pseudocode des Template Patterns 35 S o f tw are k o nz e p te 4.2.2 Das Iterator Pattern Diese Pattern ermöglicht ein efzientes und schrittweises Durchlaufen von Listen von Elementen, welche meist gleichen Typs sind. Als Beispiel siehe Abbildung 4.7. Elemente vom Typ string „Ich“ „Du“ „Er“ „Sie“ „Es“ „Wir“ „Ihr“ „Sie“ Abb. 4.7 Durchlaufen einer Liste mit Elementen gleichen Typs Solche Listen werden in der Fachsprache als Collection-Objekte bezeichnet. Einfache Beispiele hierfür sind Arrays, Listen, Stacks, usw. [Krüger 2000]. Mittels des Iterator Patterns ist es möglich, auf die einzelnen Elemente einer solchen Datenstruktur zuzugreifen und sie beliebig zu verwenden. Das folgende Klassendiagramm (Abb.4.8) soll Einblick in die Funktionsweise des Iterators geben. Collection getElements() getKeys() erzeugt Iterator hasNext() next() Element liefert Abb. 4.7 Durchlaufen einer Liste mit Elementen gleichen Typs Wie aus dieser Abbildung ersichtlich ist, enthält der Iterator die zwei unterschiedlichen Methoden “hasNext()” und “next()”. “hasNext()” überprüft, ob das nächste Element vorhanden ist und noch nicht besucht wurde. Die Methode “next()” liefert jeweils das nächste unbesuchte Element im 36 S o f tw are k o nz e p te Collection Objekt. Die Collection-Klasse selbst enthält Methoden wie “getKeys()” und “getAllElements()”, um gewisse Teilmengen von dem Collection Objekt durch den Iterator anfordern zu können [Krüger 2000]. Folgender Pseudocode, Abbildung 4.9, soll die Implementierung eines Iterator Patterns, mit dem in Abbildung 4.7 dargestellten string-Array als Collection Objekt, in Java zeigen. interface StringIterator { public boolean hasNext(); public String next(); } class StringArray { String[] data; public StringArray() { data = {“Ich”, “Du”, “Er”, “Sie”, “Es”, “Wir”, “Ihr”, “Sie”}; } public StringIterator getElements() { return new StringIterator() { int index = 0; public boolean hasNext() { return index < data.length; //as long as the index is equal to the number } //of strings in the array public String next() { return data[index++]; //every call of next() -> index = index+1; } }; } } public class IteratorExample { public static void main(String[] args) { StringArray strar = new StringArray(); StringIterator it = strar.getElements(); //get the Elements from the array and while (it.hasNext()) { //pass through the elements System.out.println(it.next()); //output } } } Abb. 4.9 Pseudocode eines Iterators in Java. In Anlehnung an Krüger [Krüger 2000] Als mögliches Beispiel und sehr einfache Anwendung des Iterator Patterns, wird das wohlbekannte Spiel “Schiffe versenken”, Abbildung 4.10, genannt. Hierbei muss der Gegenspieler seine eigenen Schiffe auf seinem Schlachtfeld positionieren und versuchen, die gegnerischen Schiffe, welche ebenfalls auf einem, dem Spieler unsichtbaren Spielfeld, positioniert wurden, zu treffen. 37 S o f tw are k o nz e p te Alle Koordinatenpaare, diese entsprechen den Positionen der Schiffe, werden in einem Collection Objekt abgelegt. Wird durch den Spieler ein Schuss abgefeuert, das heißt, es wird ein Koordinatenpaar angegeben, so durchläuft der Iterator das Collection Objekt und vergleicht die Position der Schiffe mit der des abgefeuerten Schusses. So kann sehr einfach bestimmt werden, ob der Schuss ein Treffer war oder das Ziel verfehlt hat. Abb.4.10 Einfaches Schiffe versenken [Battleship 2002] Natürlich ist die Verwendung eines Iterator Patterns nicht allein auf ein schrittweises Vorwärtsdurchlaufen beschränkt. Genau so gut könnte man auch einen Rückwärtsiterator denieren. Durch einfache Manipulationen des Quellcodes lassen sich eine Menge weiterer Anwendungsmöglichkeiten nden, wie das System des Iterator Patterns in der Spieleentwicklung sinnvoll eingesetzt werden kann. Eine weitere Einsatzmöglichkeit wird im Kapitel 4.2.4 im Zusammenhang mit dem Factory Pattern gezeigt. 38 S o f tw are k o nz e p te 4.2.3 Das Mvc Konzept und Observer Pattern Das Model-View-Controller Konzept, kurz MVC, teilt das Gesamtsystem in die drei genannten Teile auf (siehe Abb. 4.11). Durch diese Aufteilung erreicht man eine viel Benutzer größere Unabhängigkeit verwendet und Strukturiertheit stellt dar zwischen den einzelnen Komponenten. Aufgrund View Controller dieser Separation des Quellcodes der einzelnen Teile, können diese sehr einfach und rasch ausgeaktualisiert manipuliert Modell tauscht und die Flexibilität COMPUTERSPIEL des Gesamtsystems stark erhöht werden. Ein Abb.4.11 Einfache Ablaufstruktur des MVC-Konzeptes weiterer großer Vorteil liegt in der Möglichkeit der gleichzeitigen Darstellung mehrerer unterschiedlicher Views durch das Model. Viele Spiele benötigen bereits zwei oder mehrere Ansichten gleichzeitig (z.B.: Flugsimulator: Cockpitsicht und Radardarstellung) um die Spielbarkeit zu fördern. Natürlich ist die obige Abbildung nur eine Symboldarstellung der einzelnen Systeme. Diese kommunizieren untereinander auch bidirektional und nicht nur in eine Richtung. Abbildung 4.12 zeigt die allgemeine Kommunikation der drei Einzelsysteme untereinander. View Stellt alle nötigen Daten und Informationen am Ausgabegerät dar. Erhält vom Modell die neuen Informationen und aktualisiert damit die Anzeigen. Controller Bekommt Daten durch Eingabegeräte des Anwenders um damit das Modell zu manipulieren. Diese Eingabegeräte können zum Beispiel Tastatur, Maus, Joystick oder ähnliches sein. 39 S o f tw are k o nz e p te Modell View Controller Wertänderung des Modells wird an die View gesendet. Erlaubt den Aufruf von Methoden des Modells (z.B. Modifikationen,.) Das Feedback zwischen Controller und Viewer sorgt für eine schnelle Reaktion des Views auf Controlleränderungen Eingaben beeinflussen das Modell Abb.4.12 Kommunikationsablauf im MVC-System [Helman 1998] Model Stellt den funktionalen Teil der Anwendung zur Verfügung. Darin werden die Daten und Werte des Spiels berechnet. Falls es neue Informationen für die bei dem Modell registrierten Views gibt, werde diese vom Modell benachrichtigt [Krüger 2000; Amrhein 2002]. Ein wichtiger Bestandteil des MVC-Konzepts ist das sogenannte ObserverPattern. Dieses dient als Benachrichtigungsmechanismus des Modells, um die View über Änderungen zu informieren [Krüger 2000]. Dieses Pattern erlaubt eine “eins-zu-viele” Abhängigkeit zwischen Objekten. Wenn das überwachte Objekt (Observable) seinen Zustand ändert, werden alle weiteren Objekte davon benachrichtigt, welche sich vorher an dieses angemeldet haben und so zum überwachenden Objekt (Observer) wurden [Rollings & Morris 2000; Amrhein 2002]. Als Veranschaulichung, Abbildung 4.13, dient hier das zuerst angesprochene Beispiel mit dem Flugsimulator. Um mehr Informationen und tiefern Einblick in die Funktionsweise des Observer Patterns zu bekommen (Klassen- 40 S o f tw are k o nz e p te diagramm, Quellcode), dient folgende Literatur [Krüger 2000; Rollings & Morris 2000; Lam 1998; Baldwin 1998]. Radardarstellung Sicht aus Cockpit Weitere mögliche Ansichten Observer Aktualisation und Rückmeldung Berechnung der Flugbahn .... .... Observable Abb. 4.13 Observer Pattern im praktischen Einsatz In der Spieleentwicklung trifft man sehr oft auf den Einsatz des Observer Patterns, da dieses “eins-zu-viele” Kommunikationsproblem in vielen Bereichen Anwendung ndet. Einige Beispiele der möglichen Verwendung des Observer Patterns als Bestandteil des MVC-Patterns in Computerspielen, werden nun angeführt. Bei den bekannten Strategiespielen Command & Conquer, oder dem etwas ältern Dune2 wird zusätzlich zur Hauptansicht auf das Spielfeld, eine Ansicht des Gesamtspielfeldes gezeigt. Siehe Abbildung 4.14 und 4.15. Hier sind die beiden verschiedenen Ansichten dargestellt. Beide müssen gleichzeitig Änderungen des Spielverlaufs (Fahrzeugbewegung, Gebäudebau,..) darstellen. Abb.4.14 Das Strategiespiel Dune2 41 S o f tw are k o nz e p te Abb.4.15 Command & Conquer zeigt ebenfalls zwei unterschiedliche Ansichten Doch auch in anderen Spielegenres werden verschiedene Ansichten eingestetzt, um die Spielbarkeit zu erleichtern. Abbildung 4.16. zeigt das Rennspiel Need for Speed 5. Bei Rennsimulationen wird oftmals eine zusätzliche Streckensicht eingeblendet. Auch der Rückspiegel stellt eine eigene Ansicht dar, welche ebenfalls ständig aktualisiert werden muss. Rückspiegel Hauptsicht Streckensicht Abb.4.16 Need for Speed 5 mit verschiedenen Ansichten 42 S o f tw are k o nz e p te 4.2.4 Das Factory Pattern Folgend, wird eine von zwei verschiedenen Varianten einer Factory behandelt. Die eine Variante ist die sogenannte Factory-Methode und die zweite wird Factory-Klasse genannt. Grundlegend erfüllen beide die selbe Aufgabe einer Factory. Diese ist ein Hilfsmittel zum Erzeugen von Objekten, ohne dabei explizit den new-Operator zu verwenden. Die Factory wird eingesetzt, wenn die Objekte schwer zu konstruieren oder umfangreich zu kongurieren sind, oder wenn zum Beispiel erst die Daten aus einem Netzwerk oder einer Datenbank entnommen werden müssen, um das entgültige Objekt erzeugen zu können. Den Klassen welche das Objekt erzeugen, ist normalerweise nicht bekannt, welches Objekt sie nun genau erstellen. Die Factory stellt einen Auswahlalgorithmus zur Verfügung, welcher entscheidet, wie das Objekt schlussendlich aussieht [Krüger 2000; Wiesner 2001]. Will man im Laufe der Entwicklung weitere Objekte erzeugen, muss man nun nur noch die Factory verändern. Der Unterschied zwischen der Factory-Methode und der Factory-Klasse ist eigentlich schon durch den Namen erklärt. Bei der Factory-Klasse sorgt nicht nur eine Methode innerhalb der eigenen Klasse für die Instanzzierung neuer Objekte, sondern eine eigenständige Klasse. Dies bringt unter anderem den Vorteil, dass man bei Bedarf ganz einfach die gesamte Factory austauschen könnte. Um die Anwendung des Factory Patterns in der Spieleentwicklung zu zeigen, wird weitergehend die Factory-Methode verwendet. Das Prinzip der Factory, ist bei Factory-Methode und Factory-Klasse sowieso identisch. Der wichtigste Schritt bei der Erstellung einer Factory-Methode ist der Schritt vom Konstruktor zur Methode. Folgende zwei Quellcodeabschnitte sollen dies veranschaulichen. //Konstruktor public SpaceShip (int x) { int ShipType = x; } //Factory Methode static SpaceShip createType(int x) { return new SpaceShip(x); } 43 S o f tw are k o nz e p te public class SpaceShip { private SpaceShip() { //to prevent a manual use of the constructor } } public static SpaceShip createTyp(int value) { //Template Method SpaceShip ss = null; if(condition1) { //Code, create SpaceShip of typ 1 } else if(condition2) { // Code, create SpaceShip of typ 2 } return ss; } Als mögliches Anwendungsbeispiel aus der Spieleindustrie wird auf die Geschicklichkeitspiele Bananoid, siehe auch Punkt 4.2.1, und Aquanoid, siehe Abbildung 4.17, hingewiesen. Die Erzeugung der Spielsteine könnte mit einer Factory Methode realisiert werden. Obwohl die Anwendung der Factory Methode an diesem Beispiel, wegen der Einfachkeit der Erstellung der einzelnen Spielsteine, vielleicht nicht die beste Lösung ist, trägt sie jedoch zum einfachen Verstehen dieses Patterns bei und wird vorallem für die Anwendung beim Prototypen, Kapitel 5.1.4, eine wichtige Rolle spielen. Die verschieden farbigen Spielsteine können verschiedenes Verhalten aufweisen. Deshalb der Entscheidungsalgorithmus, nach welchen die Steine erzeug werden. Abb.4.17 Screenshot von Aquanoid Wie in der Abbildung 4.17 ersichtlich, sind am Aufbau des Levels einige unterschiedliche Spielsteine, sogenannte Tokens, beteiligt. Diese können 44 S o f tw are k o nz e p te unterschiedliche Eigenschaften aufweisen. So müssen manche Steine öfters getroffen werden um zu verschwinden, beeinussen das Flugverhalten des Balles oder verändern das Spielpaddle. Eine mögliche Implementierungslösung, angelehnt an Abbildung 4.17, könnte wie in Abbildung 4.18 dargestellt, aussehen. public class Token { … … … public static Token createToken(int typ) { Token Ttyp = null; } } //Template Method if(typ == 1) { //Code to create red token (normal) } else if(typ == 2) { // create dark blue token (hit two times) } else if(typ == 3) { // create dark blue token (hit three times) } else if(typ == 4) { // create yellow token (ball gets faster) } return Ttyp; Abb.4.18 Pseudocode zeigt praktische Anwendung des Factory Patterns Will man die Level- und Spielsteinkomplexität erhöhen und weitere unterschiedliche Spielsteine hinzufügen, muss in diesem Fall nur mehr die Factory Methode um die gewünschten if-Anweisungen erweitert werden. Ein weitere Vorteil liegt in der einfachen Erstellung der einzelnen Levels. Die Tokens benden sich alle in einem zweidimensionalen Feld. Jede Position in dem Feld kann durch einen Spielstein besetzt werden. Dieser wird in dem Feld durch einen int-Wert dargestellt, wobei eine Null für keinen Spielstein steht. Abbildung 4.19 veranschaulicht diese Leveldarstellung. Werden diese int-Werte in ein 2 dimensionales Array geschrieben, kann mittels eines Iterators, siehe dazu Kapitel 4.2.2, das Array durchlaufen und bei den entsprechenden int-Werten der dazugehörige Token in der Factory Methode erzeugt werden. 45 S o f tw are k o nz e p te 0 0 1 0 1 0 1 0 0 1 1 1 2 2 2 1 1 1 1 2 2 3 3 3 2 2 1 Abb.4.19 Verschiedene int-Werte stehen für die speziellen Tokens Wie schon anfangs erwähnt, wird ein Factory Pattern vor allem auch dann eingesetzt, wenn das zu erzeugende Objekt schwer zu konstruieren ist oder die notwendigen Informationen erst aus einem Netzwerk oder Datenbank entnommen werden müssen. Durch die vermehrte Nutzung des Internets für Computerspiele, trifft man immer häuger auf das Problem der verteilten Information im Netz und den daraus entstehenden Vorteilen. Um Speicherplatz und andere Hardwareressourcen bei Verwendung von Spielen zu sparen, muss am Rechner nur ein Bruchteil des Spieles installiert sein und der restliche Teil wird je nach Spielerwunsch oder Spielablauf durch das Internet bezogen. Die so zusammengestellten Objekte sind zum Beispiel einzelne Räume, Szenarien, Charaktere oder auch Spielabläufe und könnten durch eine Factory Methode oder Factory Klasse erzeugt werden, da sie durch ihre Zusammenstellung aus verschiedensten Datenbanken, einen sehr komplexen Erzeugungsvorgang aufweisen. Durch diese Nutzung des Internets und des hier sinnvollen Einsatzes des Factory Patterns, ist eine viel komplexere, abwechslungsreiche und interaktivere Gestaltung einzelner Levels oder ganzer Spiele möglich. 46 S o f tw are k o nz e p te 4.2.5 Das Platzhalter Pattern Das Platzhalter Pattern soll, ähnlich dem MVC-System, vor allem ein Konzept zur Verbesserung der Struktur und Steigerung der Flexibilität bei Spieleentwicklungen anbieten. Im Gegensatz zu den vorher erwähnten Pattern, ist das Platzhalter Pattern derzeit noch in keiner Patternsammlung erwähnt, oder deniert worden. Deshalb soll zuerst das Pattern Template, siehe Punkt 4.1.2, dazu dienen, um dieses neue Pattern nach dessen Vorschriften zu denieren. Der Name: Platzhalter Pattern (auf englisch: Placeholder Pattern) Das Problem: Betrachtet man verschiedene Computerspiele und Spielgenres genauer, so erkennt man immer wieder gleiche Bereichsaufteilungen im Spiel, in welchen verschiedene Spielkomponenten platziert sind. In Abbildung 4.14, dem Spiel Dune2, ist das Spiel grundsätzlich in 4 verschiedenen Teilbereiche aufgeteilt. Diese sind in Abbildung 4.20 skizziert. A1 – Menüleiste A1 A2 A3 A4 A2 – Hauptspielfläche A3 – Gesamtübersicht A4 – Bearbeitungstools Abb.4.20 Aufteilung der Spielbereiche bei Dune2 Egal mit welchen Team man in Dune2 spielt, oder in welchen Level man sich bendet, es tritt immer die selbe Einteilung auf. Durch die Denition von Teilbereichen wird die Grundstruktur des Spieles festgelegt. Man kann die einzelnen, vordenierten Bereiche, ähnlich 47 S o f tw are k o nz e p te wie bei Frames in HTML, mit beliebigen Inhalt füllen und dadurch die Darstellungen variieren lassen. Da der Platzhalter als Komponente dient, durch welchen alle Bereiche des Spiels genau deniert sind, ermöglicht das Pattern ein schnelles und effektives verändern der Spieloberäche. Dadurch entsteht zum Beispiel eine einfache und strukturierte Möglichkeit, viele verschiedene Layouts für das selbe Spiel oder Level zu erzeugen. Vor allem durch die Nutzung des Internets und die Vielzahl an Ressourcen die dadurch zur Verfügung stehen, ist es von großem Vorteil, den strukturellen Aufbau so einfach und logisch als möglich zu gestalten, um eine leichtes variieren einzelner Komponenten zu ermöglichen. Die Lösung: Durch die vorher denierte Vorlage (Schablone), werden einzelne Bereiche für die jeweiligen Spielkomponenten festgelegt. Diese Vorlage wird als “Platzhalter-Klasse” implementiert und soll Methoden zum Setzen und Löschen von Spielkomponenten anbieten. Als mögliche Implementierung, siehe dazu folgenden Quellcode und die dazugehörige Abbildung 4.21. public class PlaceHolder{ …… …… setArea1(Object1){ … //code to dene the position of … //the Area1 and place the } //Deliverd Object there setArea2(Object2){ … //same as in Method setArea1 } … … clearArea1(){ … //code to clear the last Object, set } //in the Area1 } clearArea2() { … } …… //Same as above 48 S o f tw are k o nz e p te Das gesamte Spielfeld Area1 - Entspricht hier der Anzeige der Spielabhandlung Area2 - Anzeige der HUDs Abb.4.21 Darstellung möglicher Bereichsaufteilung Die Konsequenz: Durch diese Vorlage ist jedoch die Gestaltung der Levels entsprechend eingeschränkt. Daher sollte dem Entwickler schon vorher klar sein, wie die Levels aussehen werden und welche Funktionalität sie beinhalten sollen. Dementsprechend muss er vorher schon die benötigten Bereiche genau denieren. Eine Anwendung dieses Patterns soll die Abbildung 4.22 zeigen. Hierbei handelt es sich um das Computerspiel Stunt der Firma Distinct Software, Inc, welches 1990 am Spielemarkt erschienen ist [Stunts 2002]. Abb.4.22 Vergleich zwei verschiedener Cockpits und selber Strecke bei Stunts Wie hier zu sehen ist, handelt es sich um dieselbe Strecke aber um verschiedene Autos, deshalb ist auch das Cockpit unterschiedlich. Diese 49 S o f tw are k o nz e p te Spielansicht könnte man nun in drei Teile, wie in Abbildung 4.23 dargestellt, aufteilen. Oberer Teil des Cockpits (B1) Sicht durch Windschutzscheibe (B2) Armaturenanzeige und Lenkrad (B3) Abb.4.23 Aufteilung der Spielansicht von Stunts Die Sicht durch die Windschutzscheibe ist je nach Streckenauswahl unterschiedlich. Genau so wie sich die Wahl des Autos auf die Ansicht des Cockpits auswirkt. Würde dieses Spiel mit dem Platzhalter Pattern realisiert, könnte der Ablauf vom Main Menu bis zum Start wie in Abbildung 4.24 skizziert, aussehen. B1 und B3 sind in dieser Darstellung zu einem einzigen Teilbereich zusammengefasst worden. Main Menu wähle Auto Porsche clearCockpit(); setCockpit(Porsche); Main Menu Main Menu wähle Strecke Start Strecke10 clearCockpitView(); setCockpitView(Track10); Abb.4.24 Ablaufdiagramm bei der Wahl der Strecke und des Autos Ähnlich wie in diesem Beispiel von Stunts, können mehrere Bereiche deniert werden und so die Flexibilität der Spielgestaltung erhöht werden. Der große Vorteil liegt darin, das dadurch eine klare und übersichtliche Struktur erhalten bleibt, da alle einzelnen Spielelemente, über dieses Pattern deniert sind. 50 Kapite l 5 Vergleich mit dem Prototypen 5.1 Beschreibung des Prototypen Im Zuge des Berufspraktikums am Fraunhofer Anwendungszentrum für Computergraphik in Chemie und Pharmazie (kurz AGC) in Frankfurt, entstand ein, in Flash umgesetztes Computerspiel, welches Medizinstudenten als Lernergänzung und stoffbezogenes Unterhaltungstool dienen soll. In Anlehnung an das gleichzeitig laufende k-Med Projekt, wurde als Grundelement und Hauptthema des Spieles der Zitratsäurezyklus gewählt [kMed 2001]. Dieser ist ein wichtiger Bestandteil der Biochemie und durch die vielen fachspezischen Molekülnamen, schwierig zu erlernen und zu merken. Das Spiel selbst wurde in vier einzelne Levels aufgeteilt, welche den Spieler durch verschiedene Spielvarianten bis zum vollständig fertig erstellten Zitratzyklus führen sollen. Diese Levels sind aufeinander aufbauend gestaltet, um den Spieler langsam zum Ergebnis zu leiten. Um den Spieleifer zu steigern, werden entsprechend dem Spielverlauf Punkte vergeben und am Ende ausgewertet. Ebenso spielt die Zeit eine tragende Rolle um den Stress als weiteren Spielfaktor heranzuziehen. Jeder Teil (Level, Menu, usw.) wurde vorerst als einzelner Flashlm erstellt und erst am Ende des Projektes zu einem Gesamten zusammengefügt. Die Anwendung wurde in Flash 5.0 und in der asheigenen Scriptsprache ActionScript implementiert. Die einzelnen Levels des Prototypen sind im Anhang 1 beschrieben. Eine spielbare Version des Prototypen bendet sich auf der beigelegten CD und ist problemlos von dieser aus zu starten. In der folgenden Abbildung 5.1, sind zwei Auszüge aus dem Spiel dargestellt. In nächsten Kapitel 5.2, 51 V e rgle ich m it de m Pro to t y p e n werden weitere Screenshots des Spiels zur Erklärung des möglichen Einsatzes von Design Pattern abgebildet. Abb.5.1 Menü- und Hilfeanzeige des Prototypen 52 V e rgle ich m it de m Pro to t y p e n 5.2 Optimierung des Prototypen durch den Einsatz von Design Pattern 5.2.1 Einsat z des Template Patterns Im Bezug auf das Flashspiel ndet man zahlreiche Anwendungsfälle, wo das Template Pattern sinnvoll eingesetzt werden kann. Das dritte Level des Prototypen besteht aus einem animierten Molekül auf der linken Seite der Spieläche und einer Anzahl von animierten Türen, siehe Abbildung 5.2, welche sich ungleichmäßig auf und zu bewegen9. Der Inhalt der Türen ist mit wahren und falschen Aussagen gefüllt. Die Reaktion bei Mausklicks auf die Türinhalte ist ebenfalls unterschiedlich. Dies hängt von der Tatsache ab, ob die Aussage, im Bezug auf das Links dargestellte Molekül, richtig oder falsch ist. Abb.5.2 Das dritte Level des Flashspiels Der Animationsvorgang ist in allen Fällen gleich. So könnte man die Türen mit der entsprechenden Animation als abstrakte Klasse denieren. Zwei verschiedene Klassen erben von der abstrakten Klasse. Diese sind die 9 Die ungleichmäßige Bewegung wird durch einen unterschiedlichen Startwert der Türanimation erreicht. 53 V e rgle ich m it de m Pro to t y p e n richtigen und die falschen Türinhalte (“wrongElement” und “rightElement”). Der Beginn der Animation und der Inhalt, wird den Klassen als Variablen mitübergeben. Abbildung.5.3 zeigt die Anwendung der Template Methode als Klassendarstellung, im Bezug auf den Prototypen. BasicElement animation() reactionOnClick() wrongElement rigthElement reactionOnClick() reactionOnClick() doorContent; animationStart; doorContent; animationStart; Abb.5.3 Klassenstruktur des Template Patterns im Bezug auf den Prototypen Einen möglichen Implementierungsansatz zeigt folgender Pseudocode. abstract class basicElement { public basicElement() { animation(); } abstract reactionOnClick(); private void animation(){ //code for animation } } class wrongElement extends basicElement {//class rigthElement is nearly the same public wrongElement(doorContent, animationsStart) { } public void reactionOnClick() { //if user clicks on the region inside the door -> do something } } 54 V e rgle ich m it de m Pro to t y p e n 5.2.2 Einsatz des Iterator Patterns Im ersten Level, Abbildung 5.4, muss der Spieler, ähnlich dem Hangman-Spiel, versuchen, verschiedene Substratnamen zu erkennen und zu benennen. Abb.5.4 Screenshot des ersten Levels des Prototypen Der Computer berechnet zufällig das Erscheinen der einzelnen Buchstaben der Wörter. Diese sind einzeln in einem, der Länge des Wortes entsprechenden, Array (LetterArray) abgelegt. Jeder Buchstabe eines Wortes ist durch die Position im Array mit einem Index versehen (siehe Abb. 5.5). Der Zufallsgenerator berechnet einen int-Wert (randomValue) und dieser ist durch die interne Bezeichnung der Arraypositionen (0,1,.....x), mit einem entsprechenden Buchstaben verknüpft. f u m a r a t Einzelne Buchstaben im Array 0 1 2 3 4 5 6 Index: Position im Array Abb.5.5 Verknüpfung zwischen Index und Buchstaben 55 V e rgle ich m it de m Pro to t y p e n Leider passiert es, dass der Zufallsgenerator auch wiederholt gleiche Werte ausgibt. Um dies zu verhindern, werden die bereits generierten Zufallszahlen in einem neuen Array (checkArray) abgelegt, und ein Iterator wird dazu eingesetzt, dieses Array jedes Mal zu durchlaufen und zu überprüfen, ob sich die gerade erzeugte Zufallszahl bereits im Array bendet, d.h. der Buchstabe wurde bereits gesetzt. Folgender Pseudocode in Abbildung 5.6, soll dieses Problem veranschaulichen. Siehe ebenfalls Punkt 4.2.2. ... ... //read word from le and put the single Letters ... //in a string-array called “LetterArray” ... Array checkArray = new Array[LetterArray.length()] //the check-array for //the random-values int counter=0; int randomValue=0; String SplitLetter; while (counter < LetterArray.length()){ //loop as long as every letter randomValue = random(LetterArray.length()); //of the word is in the array if(checkLetters(LetterArray)){ checkArray[counter] = randomValue; } } ... ... //TRUE if random value is new //put the new value in the //checkArray SplitLetter= getLetter(randomValue); //specify the letter on the //arrayposition DrawLetter(); //draw letter on the screen counter++; ... ... ... public boolean checkLetters(String arrayToCheck){ Iterator it = arrayToCheck.getElements();//get all elements of the stringarray while(it.hasNext()){ if(it.next =! zufallsZahl){ //if we still have the random-value return false; } } return true; //if it is a nonexistent random-value } ... ... Abb.5.6 Pseudocode für eine Iterator-Anwendung 56 V e rgle ich m it de m Pro to t y p e n 5.2.3 Einsatz des Mvc-konzepts und Observer Patterns Der Einsatz des MVC-Konzepts beim Prototypen leitet sich eigentlich aus einem ashspezischen Problem, dem Platzieren der einzelnen Filmsequenzen auf der Zeitleiste und deren Kommunikation untereinander, ab. Jedes einzelne Level wurde vorerst als eigenständige Filmsequenz erstellt und erst am Ende in eine gemeinsame Zeitleiste, zu einer einzelner, durchgehender Sequenz zusammengefügt. Jedoch mussten die vielen Parameter des Spieles (Punkte, Leben, Munition,..) mitübergeben werden. Dies stellte im nachhinein ein größeres Abstimmungsproblem dar, weil sich einige Werte nicht so einfach von einer Filmsequenz zur anderen übergeben ließen. Dieses Problem könnte man mit dem geschickten Einsatz des MVC-Patterns wesentlich verbessern. Wie sich dies auf den Prototypen auswirkt, sehen wir anhand der Abbildung 5.7. Die Darstellung beruht auf der im Punkt 4 vorgestellten, allgemeinen Kommunikation zwischen den Teilsystemen des MCV-Patterns. Als Observer werden alle jene Elemente deniert, welche das gesamte Spiel über, in allen Levels gleich bleiben. Diese Status Informationen werden in der Fachsprache als HUDs, Heads-Up-Display, bezeichnet [GameDevDict 2002]. Diese HUDs des Prototypen werden in der Abbildung 5.8 dargestellt. View: Munitionsanzeige View: Punkteanzeige Bestätigung Wertänderung Model: Quellcode für die Erstellung der Levels HUDs Eingabewerte View: Lebensanzeige View: Zeitanzeige Controller: Eingabe durch Tastatur und Maus Abb.5.8 MVC Darstellung bezogen auf den Prototypen 57 V e rgle ich m it de m Pro to t y p e n Punkte Leben Zeit Munition Abb.5.7 Beispiel für HUDs beim Prototypen Natürlich besteht das anfangs erwähnte Problem durch die einzelnen Filmsequenzen bei der Programmierung in Java nicht, sondern ist ein alleiniges Problem bei ashähnlichen Tools. Durch die hilfreiche Trennung der einzelnen Systeme, lassen sich in der Spieleentwicklung aber schnell, viele weitere Anwendungsfälle, in mehr oder weniger abgewandelter Form, nden. Die Anwendung des Observer Patterns kann ebenfalls mittels den HUDs demonstriert werden. Bei vielen Anwenderaktionen werden durch falsches oder richtiges Handeln, Werte für Punkte, Leben, Zeit und Munition gesetzt. Dies könnte durch den Einsatz eines Observer Patterns realisiert werden. Trifft man im dritten Level, siehe Abbildung 5.2, zum Beispiel eine richtige Tür, muss der Munitionstand und der Punktestand aktualisiert werden. Trifft man eine falsche Tür, hat dies Auswirkungen auf die Zeit, die Munition und oftmals auch auf die Leben. 58 V e rgle ich m it de m Pro to t y p e n 5.2.4 Einsatz des Factory Patterns Im ersten Teil des vierten Levels, dargestellt in Abbildung 5.9, erscheinen zufällig Substrate, Enzyme und Energieträger auf der Spieläche. Ähnlich den Spielsteinen im Geschicklichkeitsspiel Aquanoid, siehe dazu Kapitel 4.2.4, könnte die Erzeugung durch den Einsatz einer Factory Methode verbessert werden. Abb.5.9 Level 4 des Flashspiels Die 3 verschiedenen Elemente, (Enzyme, Substrate und Energieträger), haben ebenfalls unterschiedliche Eigenschaften welche beim Erzeugen deniert werden müssen. Die Elemente erscheinen zufällig und bewegen sich auf der Spieläche vor und zurück. Zusätzlich zu den Bewegungsanimationen müssen weitere Eigenschaften deniert werden, um das Element genau zu spezizieren. Es darf immer nur ein richtiges Element erscheinen und es kann ihm auch nur ein bestimmter Platz am Spielfeldrand zugeordnet werden. Weiters muss noch die Reaktion bei Mausclick auf das Element (entspricht einem Abschuss des Elementes) deniert 59 V e rgle ich m it de m Pro to t y p e n werden. Durch diese aufwändigen Kongurationen der einzelnen Spielobjekte, kann zum Einsatz des Factory Patterns gegriffen werden. Da es auch falsche Enzyme, Substrate und Energieträger geben kann, muß die Factory Methode dementsprechend erweitert werden. Folgender Pseudocode zeigt wie dieses Problem als Factory-Methode in Java zu beheben sein könnte. public class CACElement { private CACElement() { } public static CACElement createCACElement(string element) { CACElement cacel = null; if(element == wrongEnzyme) { //create a wrong enzyme with all specications } } } else if(element == rightEnzyme) { //create right enzyme with all specications } … //The same with the other Elements … Will man nun zum Beispiel dieses Level erweitern, Hinzufügen von weiteren falschen Elementen, muss nur eine weitere if-Anweisung zur bestehenden Factory-Methode hinzugefügt werden. 60 V e rgle ich m it de m Pro to t y p e n 5.2.5 Einsatz des Platzhalter Patterns Betrachtet man einen Screenshot des Flashspiels, wie z.B. Abbildung 5.7, so lassen sich drei grundlegende Teilbereiche festlegen. Die Anzeige der HUDs, die Darstellung des Levelfortschritts auf der rechten Seite, sowie natürlich die eigentliche Spieläche. In Abbildung 5.10 wird diese Aufteilung skizziert. C1 C3 C1 – Spielfläche C2 – Levelanzeige C3 – Anzeige der HUDs C2 Abb.5.10 Aufteilung des Prototypen in gleichbleibende Teilbereiche Vergleicht man die unterschiedlichen 4 Levels, (Abbildung 5.2, 5.4, 5.7 und 5.9) untereinander, wird ersichtlich, dass sich alle Teilbereiche (C1, C2, C3) jeweils ändern. Zwar ist der strukturelle Aufbau von Flashanwendungen im Vergleich zu Javaprogrammen, wie schon beim MVC-Konzept beschrieben, unterschiedlich, aber die Absicht und Möglichkeiten, welche sich durch den Einsatz des Platzhalter Patterns bieten, ist wohl durch dieses und Kapitel 4.2.5 klar geworden. Wahrscheinlich müssen immer noch einige weitere Spezikationen und Veränderungen getroffen werden, um dieses Pattern richtig und efzient einsetzen zu können. Aber wie bei allen bisherigen Pattern, muss es sich durch den oftmaligen Einsatz in der Spieleindustrie erst einmal beweisen. Ob es sich dann durchsetzen kann oder in Vergessenheit gerät, wird sich erst herausstellen. 61 Kapite l 6 Zukunft der Computerspiele Schon 1952, kurz nach Einführung der ersten kommerziellen Computer, wurde, jedoch nur für wissenschaftliche Zwecke, ein Dame-Programm entwickelt. Doch erst mit der Implementierung von Spacewar 1962, Abbildung 6.1, wurde die Ära der Computerspiele eingeläutet [Ahl 1978]. Den großen Durchbruch und somit der Auslöser der Mainstream-Videospiele, ebnete das in Abbildung 6.2 dargestellte, 1971 konzipierte Computerspiel Pong. Dieses Spiel gab den Anstoß für die rasante Entwicklung der Spielebranche, egal ob für den Heimbereich oder die öffentlichen Münzspielautomaten. Mit der Entwicklung des Com- Abb. 6.1 Abb. 6.1 Spacewar Abb. 6.2 Pong [ClassicGames 2002] [ClassicGames 2002] modore C64 (ca. 1982), konnte jedermann nun selbst zum Programmierer von Computerspielen werden, und es entstand dadurch eine breite Masse an Spielen und Genres. Beinahe alle heutigen Spielgenres waren schon auf dem C64 vertreten. Spätere Spiele übertrafen die C64-Spiele nur an feinerer Ausarbeitung, besserer Graphik und besseren Audioeffekten. Die Zeiten wo jedermann nach Lust und Laune erfolgreich Computerspiele programmieren konnte, sind jedoch vorbei. Obwohl sich die Spieleindustrie seit deren Beginn rasant entwickelt hat, ist sie noch immer weit hinter ihren Möglichkeiten zurück. Ihre Entwicklung lässt sich am Besten mit der des Films vergleichen. Die Technik der Computerspiele bestimmt derzeit noch weitgehend den Verkaufserfolg, genau so wie damals in den 20iger Jahren, 62 Z u k u nf t de r Co m p u te rsp ie le 2 den der Filme. Durch die Weiterentwicklung der Technik, wurde bei Filmen plötzlich mehr Wert auf dessen Inhalt gelegt. Selbiges zeichnet sich nun auch bei den Computerspielen ab [Braben 2002]. Derweilen ist es noch leicht möglich, eine schlechte Spielhandlung mit perfekter Graphik aufzubessern, um somit das Produkt noch zu retten. Spielt jedoch die Rechenleistung keine Rolle mehr, muss der ausschlaggebende Unterschied mehr in der Story, als in der Technik liegen [NEO 2002]. Laut Moore’s Gesetz10, wird die Rechenleistung, derzeit ohne Aussicht auf ein Ende, weiter stetig steigen. Abbildung 6.3 zeigt dieses Gesetz und dessen Auswirkung seit 1970. Laut Intel, wird diese Entwicklung noch mindes- Abb. 6.3 Moore’s Gesetz [Moore 1965b] tens weitere 10 Jahre anhalten. Sony erklärte sogar, dass ihnen dieser Fortschritt zu langsam sei. Die neue PS3 soll ca. 1000 mal leistungsfähiger sein als die PS2. Sony will allerdings nicht solange warten, bis sich diese Leistung auf herkömmlichen Weg realisieren lässt [Braben 2002]. Sie wollen noch keine genauen Aussagen darüber treffen, wie sie dieses Ziel erreichen können, sondern sprechen bisher nur verschwommen vom Einsatz des sogenannten grid computing11 [Becker 2002]. Ein weiterer Entwicklungsschritt durch höhere Rechenleistung und ausgefeilterer Technik, ist die immer intensivere Vereinigung zwischen dem 10 Moore’s Gesetz (englisch: Moore’s Law, aufgestellt von Gordon Moore 1965) besagt, dass die Geschwindigkeit aktueller Prozessoren alle 18-24 Monate ungefähr, durch einen Nachfolger verdoppelt wird [Moore 1965a]. 11 grid computing bedeutet, das Verbinden von einer Vielzahl von Computern zu einem größeren, virtuellen System zur Steigerung der Verarbeitungsgeschwindigkeit [Shankland 2002]. 63 Z u k u nf t de r Co m p u te rsp ie le 2 Spieler mit dem Spiel selbst werden. Die Spielwelten werden immer komplexer, die Interaktion umfangreicher und eine realistischere Darstellung der Realität wird durch genauere physikalische Eigenschaften, besserer Graphik und ausgefeilterer künstlicher Intelligenz (KI) erreicht [Rollings & Morris 2000]. Demis Hassiabis, Gründer von Elixr Studios, sieht eine immense Weiterentwicklung der KI-Routinen welche sich möglicherweise in Hardware-KI-Beschleunigern, ähnlich wie bisher für Graphikkarten, oder sogar in eigenen Articial Intelligence Operating Systems, bemerkbar machen [Houlihan 2001]. Die Verschmelzung mit dem Spiel, das Eintauchen in die virtuelle Welt, ist bereits mit vielen Techniken, wie zum Beispiel 3D Brillen, Abbildung 6.4, Cave-Anwendungen, Abbildung 6.5, oder Datenhand-Schuhen, Abbildung 6.6, teilweise möglich [Dertouzos 1999]. Bald werden diese Systeme von jedem potentiellen Spieler genauso alltäglich genutzt, wie heutzutage Maus oder Tastatur. Ein weiterer unaufhaltsamer EntwicklungsAbb.6.4 3D Brille - Shutter Glasses [Dansdata 2002] schritt, ist die vermehrte Nutzung des Internets, um mit vielen Mitspieler über Grenzen hinweg gemeinsam an einem Spiel teilnehmen zu können. In einzelnen Fällen Abb.6.5 Modell eines Caves Abb.6.6 Datenhandschuh wird das Internet [Indiana 2002] [York 2002] bereits genutzt, um viele Spieler in einem Spielfeld zu versammeln. Vor allem bei RPG12und FPS13-Spielen kommt es bisher vermehrt zum Einsatz. Laut Shu Yoshide, Vizepräsident der Produktentwicklung von Sony Computer Entertainment America, benden wir uns mit der Ausnutzung der Onlinetechnologie für Computerspiele, im Vergleich, gerade einmal auf der selben Stufe wie damals, als 3D Technologie nur für Arcade Games, 12 RPG ist die Abkürzung für Roleplaying Game, also Rollenspiele. 13 FPS ist die Abkürzung für First-Person-Shooter z.B. CounterStrike 64 Z u k u nf t de r Co m p u te rsp ie le 2 Schießspiele und Fahrsimulatoren verwendet wurde. Jedes einzelne Spielgenre könnte durch die Verwendung der Onlinetechnologie revolutioniert werden. Denn es gibt keine bessere und natürlichere KI, als die der Spieler selbst [Yoshida 2002]. 65 Kapite l 7 Resümee Durch die ständige Verbesserung und Weiterentwicklung der Computerspiele und deren Technik, müssen ständig Neuerungen und Verbesserungen im Entwicklungsablauf getätigt werden, um mit dieser Entwicklung schritt halten zu können. Im zweiten Kapitel wurde festgestellt, das sich die Entwicklungsteams seit der vermehrten, kommerziellen Nutzung der Computerspiele, stark verändert haben. Verschiedene Arbeiten, welche früher von einer einzelnen Person erledigt werden konnten, mussten in separate, genauer spezizierte Arbeitsbereiche aufgeteilt werden. Durch diese Trennungen wurde die Kommunikation unter den einzelnen Mitarbeiter teilweise immer schwieriger, aber das Verständnis für die gegenseitigen Probleme immer bedeutender. Daher muss ein gutes Management und eine klare Kommunikationshierarchie dafür sorgen, dass eine reibungslose Verständigung untereinander gewährleistet werden kann. Der Entwicklungsvorgang bei Computerspielen ist so stark vom Marktverlagen und Lizenzverträgen geprägt, dass die Unternehmen ohne Rücksicht auf eine klare und strukturierte Entwicklungsarbeit nehmen zu können, die Produktentwicklung vorantreiben, um am Ende ein zufriedenstellendes Ergebnis zu erhalten. Design Pattern können, falls sie für jedermann zugänglich und wohlüberlegt deniert sind, viel Arbeitsaufwand und Entwicklungsarbeit einsparen, da sie grundlegende, immer wieder auftretende Strukturen und Probleme in der Spielebranche beschreiben. Diese können in folge, ohne größeren Zeitaufwand, in weitere Projekte integriert werden. Dadurch steigt vor allem die Klarheit, Strukturiertheit und Flexibilität des Projektes. Obwohl viele Pattern bereits in der herkömmlichen Softwareindustrie erfolgreich 66 Re sü m e e 2 eingesetzt werden, geht die Adaption auf die Spielentwicklung eher langsam voran. Um die Spieleentwicklungen schneller und efzienter voran treiben zu können, muss eine gewisse Zusammenarbeit aller Entwickler vorherrschen, um die potentiellen Kunden mit immer neueren und besseren Spielen zu überraschen und die Grenzen des Möglichen zu erweitern. Gerade beim Einsatz von Design Pattern kann ein großer Schritt in die Richtung der efzienteren Entwicklung gemacht werden. Die Sammlung verschiedenster spielespezischer Design Patterns auf der Webseite von Gamasutra14, ist sicher ein guter Anfang, um eine allgemeine Regelung und Verwendbarkeit von Patterns in der Spieleentwicklung zu gewährleisten und diese auch jedem potentiellen Spieleentwickler zugänglich zu machen. 14 www.gamasutra.com 67 Literaturverzeichnis [Ahl 1978] Ahl D.: Basic Computer Games, Sybex Verlag, 1978 [Alexander 1977] Alexander Ch.: A Pattern Language: Towns, Buildings, Constructions. Oxford University Press, 1977. [Amrhein 2002] Amrhein B.: Design Pattern für Graphische Benutzeroberächen. URL, http://www.hta-be.bfh.ch/~amrhein/Skripten/Swing/Pattern.pdf, 02. Mai 2002, Kopie auf CD-ROM (Amrhein_MVC.pdf) [Amstrad 2002] URL, http://www.homecomputermuseum.de, 04. Juni 2002, Kopie auf CD-ROM (Amstrad.pdf) [Askit 1998] Aksit K.: Architektur-Muster für Software-Systeme - Einführung in das Thema “Patterns”. URL, http://wwwpaul.informatik.tu-muenchen.de/ seminare/softwareentwicklungWS98/Architekturmuster/, 04. Juni 2002, Kopie auf CD-ROM (PatternEinfuehrung.pdf) [Baldwin 1998] Baldwin G. R.: Implementing The Model-View-Controller Paradigm using Observer and Observable. URL, http://home.att.net/~baldwin.rick/Advanced/Java200.htm, 02. Mai 2002, Kopie auf CD-ROM (javaMVC.pdf) 68 L ite ratu r v e rz e ichnis [Bartlett 2001] Bartlett E.: So you want to be a games designer. URL, http://www.igda.org, 15. April 2002, Kopie auf CD-ROM (wantDoBeGamesDesigner.pdf) [Battleship 2002] Einfaches JavaScript Computerspiel URL, http://www.lcss.net/num/games_b.htm, 04 Juni 2002, Kopie auf CD-ROM (Battleship.pdf) [Becker 2002] Becker D.: PlayStation 3 takes to the grid, ZDNet News URL, http://zdnet.com.com/2100-1105-866388.html, 23. Mai 2002, Kopie auf CD-ROM (Playstation3.pdf) [Burwell 2001] Burwell C.: Calling the Shots, Decision Making for Games. Game Developer Magazine, S. 38-44, January 2001 [Braben 2002] Braben D.: Another Five Years from Now: Future Technologies, Vortrag von David Braben auf der Game Developer Conference 2002 URL, http://www.gdconf.com, 23. Mai. 2002, Kopie auf CD-ROM (gdconf-Archive.pdf) [ClassicGames 2002] URL, http://www.classicgaming.com/museum/pong/, 23.Mai.2002, Kopie auf CD-ROM (ClassicGaming.pdf) [Dansdata 2002] URL, http://www.dansdata.com/v8200d.htm, 23.Mai.2002, Kopie auf CD-ROM (ShutterGlasses.pdf) 69 L ite ratu r v e rz e ichnis [Dertouzos 1999] Dertouzos M.: What will be. Die Zukunft des Informationszeitalters. Springer-Verlag Wien New York 1999 [Eckel 2001] Eckel B.: Thinking in Patterns with Java, Revision 0.6. HTML Version URL, http://www.mindview.net/Books/TIPatterns, 02. Mai 2002, Kopie auf CD-ROM (Thinking in Patterns/html/index.html) [Falstein & Fox 1997] Falstein N., Fox D.: Collaborating in Game Design. URL, http://www.gamasutra.com/features/, 26. März 2002 Kopie auf CD-ROM (Collaborating.pdf) [Freeman 1997] Freeman T.: Creating a Great Design Document, URL, http://www.gamasutra.com/features/game_design/091297/ design_doc.htm, 15. April 2002, Kopie auf CD-ROM (greatingGreatDesignDocuments.pdf) [FutureZone 2002] ORF-Artikel auf FutureZone: Wiener Game Design für die Xbox. URL, http://futurezone.orf.at, 18. April 2002 Kopie auf CD-ROM (FutureZoneMaxPayne02.pdf) [GameCube 2002] Nintendo GAMECUBE News Page - System Summary URL, http://members.aol.com/mips36/specs.htm, 17.April 2002, Kopie auf CD-ROM (GameCube.pdf) [GameDevDict. 2002] Internes Wörterbuch von GameDev.net, URL, http://www.gamedev.net/dict, 02. Mai 2002, Kopie auf CD-ROM (HUD.pdf) 70 L ite ratu r v e rz e ichnis [Gamma et al. 1994] Gamma E., Helm R., Johnson R., Vlissides J.: Design Patterns: Elements of Reusable Object-Oriented Software. Adison Wesley Longman, 1994 [Gruber 2001a] Gruber D.: Working With Other People. URL, http://www.makegames.com/chapt3.html, 26. März 2002, Kopie auf CD-ROM (WorkingWithOtherPeople.pdf) [Gruber 2001b] Gruber D.: Do You Have What it Takes to Be a Game Developer? URL, http://www.makegames.com/chapt1.html, 26 März 2002, Kopie auf CD-ROM (DoYouHaveWhatItTakes.pdf) [Hecker & Simpson 2000] Hecker Ch., Simpson B. Z.: Game Programming Patterns and Idioms. Game Developer Magazine, Sept. 2000 [Helman 1998] Helman D.: Model-View-Controller, URL, http://ootips.orp/mvc-pattern.html, 02.Mai 2002, Kopie auf CD-ROM (ootipsMVC.pdf) [Houlihan 2001] Houlihan J.: GDC: Demis Outlines The Future Of Articial Intelligence In Gaming, URL, http://ww.gamespot.co.uk/printer/stories/news/ 0,2160,2094344,00.html, 23. Mai 2002, Kopie auf CD-ROM (FutureOfAI.pdf) [Indiana 2002] URL, http://avl.indiana.edu/facilities/index.shtml, 27.Mai.2002, Kopie auf CD-ROM (Cave.pdf) 71 L ite ratu r v e rz e ichnis [kMed 2001] Homepage des k-Med Projektes, URL, http://www.k-med.org, 10. Juni 2002 Kopie auf CD-ROM (kMed.pdf) [Kreimeier 2002] Kreimeier B.: The Case For Game Design Patterns URL, http://www.gamasutra.com/features, 10. Juni 2002 Kopie auf CD-ROM (Kreimeier.pdf) [Krüger 2000] Krüger G.: Go To Java 2, Handbuch der Java-Programmierung HTML Version 2.0, URL, http://www.javabuch.de/download.html, 24. April 2002, Kopie aud CD-RROM (GoToJava2/html/index.html) [Lam 1998] Lam St.: Observer Design Pattern. URL, http://sern.ucalgary.ca/courses/SENG/609.04/W98/lamsh/ observerLib.html, 02. Mai 2002, Kopie auf CD-ROM (Observer.pdf) [Laramee 2002] Laramee F. D.: The Game Design Process. URL, www.gamedev.net, 02. April 2002, Kopie auf CD-ROM (GameDesignProcess.pdf) [Leßmann 2001] Leßmann J.: Software Patterns und Pattern Languages. Seminararbeit, Fachbereich Mathematik/Informatik, Universität Paderborn, 2001 Kopie auf CD-ROM (Lessmann.pdf) [MaxPayneInt. 2001] GamesWeb - Homepage.: Online Interview mit Markus Wilding. URL, http://gamesweb.com/pc/specials/interviews/maxpayne-interview.php, 17. April 2002, Kopie auf CD-ROM (MaxPayneInterview.pdf) 72 L ite ratu r v e rz e ichnis [McCuskey 2000] McCuskey M.: LoneWolf Killers. PartII: The Development Phase URL, http://www.gamedev.net, 02. April 2002 Kopie auf CD-ROM (LoneWolfKillers_Part2.pdf) [Moore 1965a] URL, http://www.computerlexikon.com, 23.Mai.2002, Kopie auf CD-ROM (Computerlexikon.pdf) [Moore 1965b] URL, http://www.intel.com/research/silicon/mooreslaw.htm, 23.Mai.2002, Kopie auf CD-ROM (MooresLaw.pdf) [NEO 2002] Spielerma NEO in Wien: Interview mit Erik Pojar. 01. März 2002 Kopie auf CD-ROM (InterviewNEO.pdf) [Nintendo 2002] Nintendo GameCube - Homepage, URL, http://www.nintendogamecube.com, 17.April 2002, Kopie auf CD-ROM (NintendoGameCube.jpg) [nVIDIA 2002] nVIDIA Homepage - Rubric Products, URL, http://www.nvidia.com/view .asp?PAGE=geforce4mx, 17.April 2002, Kopie auf CD-ROM (GeForce.pdf) [ORF 2002] ORF-Homepage - Futurezone Forum. URL, http://futurezone.orf.at, 12. März 2002, Kopie auf CD-ROM (neo_MaxPayne.pdf) [PatternQuiz 2002] Denition von eigenen Persönlichkeitsmustern, URL, http://members.aol.com/groovydougie/quizzes/pattern.htm, 04 Juni 2002,Kopie auf CD-ROM (PatternQuiz.pdf) 73 L ite ratu r v e rz e ichnis [Pedersen 2001] Pedersen E. R.: Pedersen’s Principles on Game Design and Production URL, http://www.gamedev.net, 02. April 2002 Kopie auf CD-ROM (PedersensPrinciples.pdf) [PS2 2002] Playstation - Homepage, URL, http://www.playstation2.com, 17.April 2002, Kopie auf CD-ROM (ps2.jpg) [Rollings 2000] Rollings A.: Zitate. URL, http://www.spieldesign.de/Zitate/zitate.html, 26. März 2002, Kopie auf CD-ROM (Zitat_Rollings.pdf) [Rollings & Morris 2000] Rollings A., Morries D.: Game Architecture and Design. Coriolis, 2000 [Rouse 2001] Rouse R.: What Ever Happened to the Designer/Programmer? Game Developer Magazine, S. 88, April 2001 [Saltzmann 2000] Saltzmann M.: Game Design, zweite Ausgabe. Die Geheimnisse der Pros. X-Games München, 2000 [Sanchez & Dalmau 2001] Sanchez D., Dalmau C.: The Birth of a New Game Studio, Part One: Humble Beginnings. URL, http://www.gamasutra.com/features/, 26. März 2002, Kopie auf CD-ROM (humbleBeginnings.pdf) [Shankland 2002] Shankland S.: Big Blue, Energy Dept., eye Science Grid, ZDNet News, URL, http://zdnet.com.com/2100-1103-866631.html, 23.Mai.2002, Kopie auf CD-ROM (gridComputing.pdf) 74 L ite ratu r v e rz e ichnis [Sikora 2002a] Sikora D.: You Got Game, Part 1: The Idea. URL, http://www.gamedev.net, 02. April 2002, Kopie auf CD-ROM (gotGame_Part1.pdf) [Sikora 2002b] Sikora D.: You Got Game, Part 2: The Design. URL, http://www.gamedev.net, 02. April 2002, Kopie auf CD-ROM (gotGame_Part2.pdf) [Sikora 2001c] Sikora D.: You Got Game, Part 3: The Document. URL, http://www.gamedev.net, 02. April 2002, Kopie auf CD-ROM (gotGame_Part3.pdf) [Sikora 2001d] Sikora D.: You Got Game, Part 4: The Development. URL, http://www.gamedev.net, 26. März 2002, Kopie auf CD-ROM (gotGame_Part4.pdf) [Stunts 2002] Related Game Site for Stunts. URL, http://www.mobygames.com/game/ sites/gameId,329/, 26. April 2002, Kopie auf CD-ROM (Stunts.pdf) [Wiesner 2001] Wiesner St.: Factory Pattern. Besonderheiten in der Implementierung in Java. URL, http://rzserv2.fhnon.de/~lg002556/designpattern/ Factory_Pattern.htm, 02. Mai 2002, Kopie auf CD-ROM (WiesnerFactory.pdf) [Wohlgemuth 1999] Wohlgemuth C.: Behavioral Patterns: Strategy Pattern und Template Method. URL, http://www.uni-koblenz.de/~wohlg/Prosem3_99.htm, 22. April 2002, Kopie auf CD-ROM (BehavioralPatterns.pdf) 75 L ite ratu r v e rz e ichnis [XBox 2002] XBox - Homepage, URL, http://www.xbox.com, 17.April 2002, Kopie auf CD-ROM (XBox/xbox.html) [XBoxFAQ 2002] AreaXBox - Das Xbox-Online-Magazin.: FAQ. URL, http://www.areaxbox.de/php/faq.php#9, 17.April 2002, Kopie auf CD-ROM (XBoxFAQ.pdf) [York 2002] Homepage der York University in Toronto, Canada, URL, http://www.yorku.ca/mack/Bareld.html, 07. Juni 2002, Kopie auf CD-ROM (DataGlove.pdf) [Yoshida 2002] Yoshida, S.: Next Generation Console Development and Production in the Global Market: Opportunities and Challenges. Vortrag von Shu Yoshida auf der Game Developer Conference 2002, URL, http://www.gdconf.com, 23. Mai. 2002, Kopie auf CD-ROM (Shu Yoshida.pdf) 76 Anhang1: Spielbeschreibung Allgemeine Info: Als Munition stehen jeweils 5 Pillen zur Verfügung. Um Nachzuladen, wird einfach die STRG (CTRL) - Taste gedrückt. Ist die gesamte Zeit in den Leveln 1, 3 und 4 abgelaufen, so verliert der Spieler ein Leben. In Level 2 wird ein Leben abgezogen, wenn richtige Substrate mit einer Pille abgeschossen werden. Level 1: “Mystische Buchstaben” Im ersten Level werden Substratnamen gesucht. Der Computer beginnt, Buchstabe für Buchstabe das jeweilige Wort auszufüllen. Je schneller man die Namen erkennt, desto mehr Zeit bleibt, um das Wort zu vollenden. Ein Click auf das Substratsymbol links stoppt den Computer und der Spieler kann das Wort vervollständigen! Level 2: “Ein verrückter Flug” Die richtigen Substrate sollte man auffangen und falsche Stoffe abschießen. Man bekommt dafür Punkte gut geschrieben. Werden falsche Substanzen gefangen oder gar richtige abgeschossen, wird das mit Zeitaddition und Abzug eines Lebens bestraft. Hier kann der Spieler mit der LEERTASTE (SPACE) die Pillen abfeuern. Eine Kontrolle über die zur Verfügung stehende Zeit bietet die Anzeige neben der Uhr. 77 Anhnag 1: S p ie lbe schre ibu ng 2 Level 3: “Irre Synonyme” Die rechts stehenden Synonyme müssen dem links erscheinenden Molekül zugeordnet werden. Man muss jedoch beachten, dass sich viele irreführenden Aussagen unter die Richtigen gemischt haben. Der User hat in 3 Runden die Möglichkeit, sein Wissen zu überprüfen. Level 4: “Der CAC” Das letzte Level setzt sich aus zwei eigenen Sublevels zusammen. Als erstes soll man die im Zitratzyklus vorkommenden Enzyme und Energieträger auf die entsprechenden Platzhalter links und oben am Spielfeldrand ziehen. Um mehr Punkte zu erlangen, kann der Spieler falsche Stoffe abschießen. Immer wieder versuchen sich andere, falsche Stoffe an das gerade aktive Teil anzuhängen, wodurch der Schwierigkeitsgrad erhöht wird. Die gesammelten Substrate vom zweiten Level sind in dieser Version des Prototypen bereits gutgeschrieben. Hat man alle nötigen Stoffe gesammelt, muss der Zitratzyklus nun richtig zusammengesetzt werden. Die Reihenfolge ist egal, aber es wird natürlich bestraft (Zeitaddition), versucht man eine Substanz auf einen falschen Platz im Zitratzyklus zu ziehen. 78 Anhang2: Inhaltsverzeichnis 79