Bachelorthesis als PDF
Transcription
Bachelorthesis als PDF
Konzeption eines virtuellen Haustieres für ein touch-fähiges Handy und Umsetzung der Schwerpunkte. Bachelorthesis an der Fakultät für Gestaltung der Hochschule Augsburg Erstgutachter: Prof. KP Ludwig John Zweitgutachter: Erich Seifert vorgelegt von Melanie Schmidt Augsburg, 10.02.2010 Danksagung Hiermit möchte ich folgenden Personen für die Unterstützung während meiner Arbeit danken: Prof. KP Ludwig John - für die sehr gute Betreuung während meines Projektes und die Bereitstellung eines Testhandys Erich Seifert - für die Betreuung und kompetente Hilfestellung bei Fragen der Programmierung Manuel Weiss - für die große Unterstützung bei der 3D-Modellierung und Animation Abstrakt Einen Drachen streicheln? Und das auf einem Handy? Das Ziel der Bachelorarbeit ist es, ein virtuelles Haustier in moderner 3D-Grafik für ein Handy mit Touch-Oberfläche zu entwickeln. Entwicklungsumgebung: JavaME und dessen Mobile 3D Graphics API (m3g, JSR-184) sowie LCDUI und LWUIT. Entwickelt unter Windows Vista mit Eclipse SDK Version: 3.5.0 und dem Wireless Toolkit 2.5.2_01 für CLDC 1. Motivation 2. Vorwort 2.1. Definition des Themas 2.2. Eingrenzung des Themas 2.3. Aufbau der Arbeit 3. Konzept von LittleLegends 4. Recherche 4.1. Definition eines virtuellen Haustieres 4.2. Bekannte Spiele mit virtuellen Haustieren 5. Implementierung eines Prototypen 5.1. Design 5.1.1. Methoden 5.1.2. Konzept des Sets und der GUI 5.1.3. GUI 5.1.4. Charakterentwicklung 5.1.5. 3d-Modellierung von Charakter, Set und Objekten 5.1.6. Animation 5.1.7. H3t-Exporter 5.1.8. M3g-Converter 5.2. Programmierung 5.2.1. Recherche und Vergleich von Methoden 5.2.2. Die M3G-API 5.2.3. KI und Datensicherung 5.2.4. Konzept der Klassen und Methoden 5.2.5. UseCase 5.2.6. UML 6. Ergebnis 7. Bewertung 8. Ausblick 9. Glossar 10. Quellenangaben 1 2 2 2 2 3 7 7 9 11 11 11 12 13 16 17 19 20 22 23 23 25 31 32 37 39 42 42 43 44 47 1 1. Motivation Seit Snake 1998 vorinstalliert als erstes embedded Handyspiel auf dem Markt kam, hat sich in der mobilen Spielebranche einiges getan. Mit der Verbreitung von JavaME (Java Micro Edition), welches speziell auf die geringen Ressourcen von mobilePhones und PDAs zugeschnitten ist, entstanden kleine, downloadbare Programme, sogenannte MIDlets. 2002 kamen die ersten Spiele zum Herunterladen und es entstand ein neuer Industriezweig. Neben professionellen Agenturen konnten auch Privatpersonen mit Java-Kenntnissen eigene Spiele programmieren und auf ihrem Handy installieren oder der Öffentlichkeit zugänglich machen. Neben den klassischen 2D-Spielen wie Tetris oder Asteroids, von denen mindestens eines auf jedem Handy vorinstalliert mit ausgeliefert wird, finden immer mehr aufwendige 3D-Spiele Verbreitung. Von der Adaptierung von Konsolen- und PC-Spielen bis hin zu ganz neuen Spielen, die die Möglichkeiten eines aktuellen Handys, wie Sensorentechnik und Touchscreen, ausnützen. Durch die stetig wachsende Leistungsfähigkeit der Handys werden immer aufwendigere und optisch eindrucksvollere Spieleproduktionen möglich. Mit diesem Thema beschäftige ich mich in meiner Bachelorarbeit. Die Arbeit stellt die Frage, in wie weit schon 3D auf aktuellen Handys möglich ist. Weiter möchte ich wissen, wie ein JavaMe Spiel 3D-Dateien einbinden kann und wie ich aktuelle Interfaces wie den Touchscreen dazu nutzen kann. Dieses Thema habe ich mir ausgesucht, weil ich mich auf Java-Programmierung spezialisiert habe. Durch weitere Semesterprojekte an der FH Augsburg habe ich bereits Einblick in die mobile Java-Programmierung erhalten und dies hat bei mir großes Interesse geweckt. Genauso gerne beschäftige ich mich mit der 3D-Modellierung. Nun lag es nahe, meine beiden Interessensgebiete miteinander zu verbinden und ein aktuelles wie auch zukunftsträchtiges Projekt daraus zu entwickeln. 2 2. Vorwort 2.1. Definition des Themas In meiner Bachelorarbeit möchte ich ein Spiel entwickeln, in dem es um ein virtuelles Haustier geht, dass der User pflegen muss. Wie bei den oben recherchierten, bereits existierenden Spielen, soll es auch meinem Spiel darum gehen, das Haustier zu füttern, waschen und pflegen. Bei guter Pflege und Befriedung aller Bedürfnisse soll sich das Wesen, wie bei dem Spiel Tamagotchi, zu einer höheren Form entwickeln. Dieses Simulationsspiel möchte ich für ein Handy mit Touchscreen entwickeln, um diese Möglichkeit der Interaktion zu nutzen. Z.B. soll der User sein Haustier direkt auf dem Bildschirm streicheln können. Die verwendete Methode für das Design des Haustieres soll 3D sein. Die Einbindung von 3D in die Handyumgebung ist freigestellt. Aufgrund Erfahrungen im Bereich JavaME werde ich diese Programmiersprachen verwenden. 2.2. Eingrenzung des Themas Das Thema meiner Bachelorarbeit beinhaltet die Erstellung des Konzeptes für dieses Spiel mit dem virtuellen Haustier. Das Konzept soll vollständig und abgeschlossen sein. Zusätzlich erstelle ich einen Prototypen, der ausgewählte Aktions- und Interaktionsmöglichkeiten besitzt. Für den Prototypen entwickel ich ein virtuelles Haustier ohne Entwicklungsstufen sowie zwei verschiedene Szenerien mit Objekten. Diese Szenerien sollen in JavaME eingebunden und mit dem 3D-Haustier interagiert werden. Folgende Interaktionsmöglichleiten sollen möglich sein: Füttern, Waschen, Streicheln. Desweiteren soll eine Attributabfrage ermöglicht und eine grafische Oberfläche erstellt werden um das Spiel zu steuern und mit dem Wesen zu interagieren. 2.3. Aufbau der Arbeit Als erstes gehe ich in dieser Dokumentation auf die Recherche für das Bachelorprojekt ein. Ich zeige auf, was es bereits an ähnlicher Software oder Applikationen auf dem Markt gibt. Danach werde ich den Begriff virtuelles Haustier definieren, da dies der Kernbegriff meiner Arbeit ist. Im Abschnitt vier dieser Dokumentation erläutere ich das Konzept von LittleLegends. LittleLegends ist der Name des Spiels, welches ich im Rahmen der Bachelorarbeit entwickelt habe und von dem ich ein Prototyp realisierte. Im darauffolgenden Abschnitt gehe ich genauer auf die Implementierung des Prototypen ein. Zuerst erkläre ich die Entscheidungen und Methoden im Bereich Design wie Charakterentwicklung und Modellierung, sowie Entwurf einer Userinterfaces. Dabei gehe ich auch auf das verwendete Format und die benutzen Exporter und Konverter ein. Danach erläutere ich die technische Seite der Arbeit. Ich gehe dabei auf die verwendete API ein und Vergleiche Methoden, die für das Projekt in Frage kämen. Danach erkläre ich genauer die Implementierung der verschiedenen Aktionen und im Konzept definierte Eigenschaften sowie veranschauliche die verwendeten Methoden und Klassen. Im Anschluss fasse ich meine Ergebnisse kurz Zusammen und bewerte diese hinsichtlich gewählter Methode und daraus resultierender Effizienz und Qualität inhaltlicher und perfomanter Kriterien der Applikation. 3 3. Konzept von LittleLegends Grundbedürfnisse Alle lebenden Wesen haben Grundbedürfnisse. Bei Vernachlässigung dieser Bedürfnisse werden sie krank oder sterben nach einiger Zeit. Bei LittleLegends soll durch Grundbedürfnisse, die der User zu beachten hat, ein lebendes Wesen simuliert werden. Ignoriert er diese oder beachtet diese nicht ausreichend hat das Auswirkungen auf die Attribute des Wesens. Hunger/Durst Hunger ist ein essentielles Grundbedürfnis. Schon im ursprünglichen Tamagotchi-Spiel wurde auf das Füttern sehr viel Wert gelegt. Jedoch war es in diesem sehr unrealistisch, da man das Wesen im Durchschnitt alle 10 Minuten füttern muss. In LittleLegends soll dies in realistischer Weise geschehen. Nahrung sollte dreimal am Tag gegeben werden und zwischendurch einige Snacks. Schlaf Der Schlaf ist neben Nahrungsaufnahme das wichtigste für lebende Wesen. Auch in LittleLegends sollen die Wesen ausreichen Schlaf bekommen. Um den User aber für die Nacht zu entlasten wird die Schlafphase länger ausfallen als Lebewesen normal brauchen. Toilette/Waschen Stubenreinheit ist für Besitzer von realen Haustieren ein wichtiges Kriterium. Auch in LittleLegends, in dem die Wesen als Haustiere fungieren und in einer wohnlichen Umgebung leben, sollen die User ihrem Tier Sauberkeit beibringen. Lernen Als Fabeltiere sind die Wesen in LittleLegends wesentlich klüger als normale Haustiere. Somit können sie mehr lernen als das „Stöckchen holen“ beim Hund. Aber damit sie sich nicht langweilen müssen sie kontinuierlich beim Lernen unterstütz werden. Dies beeinflusst ebenfalls das Attribut Gehorsam. Mit seinem Wesen zu lernen ist eine gute Möglichkeit ihn zu erziehen. Spieltrieb Besonders junge Wesen, ob menschliche Kinder oder Hundewelpen, haben einen gesunden Spieltrieb. Es sollte dem Wesen auch die Möglichkeit geben werden diesen auszuleben, indem der User sich selber mit ihm beschäftigt oder ihm Spielzeug gibt. 4 Eigenschaften vom User beeinflussbare: - Faulheit - Gewicht - Lernbereitschaft vom User nicht beeinflussbare: - Faul - Verspielt - Klug Attribute: - Aufmerksamkeit - Hunger - Durst - Müdigkeit - Stimmung - Sauberkeit - Spieltrieb - Gehorsam - Gesundheit - Harndrang - Zuneigung 5 Veränderung der Attribute: Essen Schlafen Toilette Waschen Lernen Spielen → Stimmung+, Hunger -, Sättigung-, Harndrang+ → Müdigkeit-, Stimmung+, Hunger+ → Harndrang-, Stimmung+, Reinlichkeit+ → Reinlichkeit+, Stimmung+, Gesundheit+, Zuneigung+ → Müdigkeit+, Gehorsam+, Lernbereitschaft-, Spieltrieb+ → Spieltrieb-, Stimmung+, Gesundheit+, Gesundheit+, Lernbereitschaft+, Zuneigung+ Bei Vernachlässigung oder Übertreibung der Grundbedürfnisse: Überfütterung → Gesundheit-, Gewicht+, Hunger+, Müdigkeit+, Sättigung+, Faulheit+ Unterfütterung → Gesundheit-, Gewicht-, Hunger+, Gehorsam-, Lernbereitschaft-, Sättigung+, Stimmung-, ZuneigungSchlafmangel → Gesundheit-, Hunger-, Stimmung-, ZuneigungZu viel Schlaf → Gewicht+, Faulheit+, Gehorsamkeine Toilette → Sauberkeit-, Gehorsam-, Stimmung-, Zuneigungzu wenig waschen → Sauberkeit-, Gesundheit-, Stimmung-, Zuneigungzu viel waschen → Stimmungzu wenig Lernern → Gehorsamzu viel lernen → Stimmung-, Lernbereitschaft-, Zuneigung-, Spieltrieb+ zu wenig spielen → Stimmung-, Gewicht+, Zuneigung-, Lernbereitschaftzu viel spielen → Stimmung+, Gehorsam-, Lernbereitschaft+ zu wenig Aufmerksamkeit → Gehorsam-, Stimmung-, Faulehit+ 6 zeitliche Auswirkungen auf die Attribute Die zeitliche Komponente hat wesentliche Auswirkungen auf die Attribute des Wesens. Essentielle Attribute wie Sättigung, Hunger und Harndrang verändern sich schneller als nicht lebenswichtige Attribute wie Lernbereitschaft und Spieltrieb. Allerdings verändern sich Attribute auf die viel Einfluss genommen werden kann durch verschiedene Aktionen wie z.B. die Stimmung verändert sich ebenfalls sehr schnell. Bei Vernachlässigung der Bedürfnisse werden Minuspunkte gegeben. Diese werden stündlich aktualisiert. Ein Tag des virtuellen Haustieres entspricht einem 24 Stunden Tag. Lebensdauer und Entwicklung Das virtuelle Haustier lebt 30 Tage. Tag 1: (Stunde 0-2): Ei Tag 1: (Stunde 2) :Baby Tag 5: Erwachsener Tag 20: Greis Nach 30 Tagen ist das Spiel zu Ende. Das Haustier stirbt nicht wie bei dem ursprünglichen Tamagotchi, sondern der User entlässt es in die Freiheit wo es nun alleine weiterlebt und für sich selbst sorgen kann. Bein Vernachlässigung wird das Haustier krank und kann früher sterben. Dies wird durch die Anzahl der Minuspunkte ermittelt. Ebenfalls kann sich die Entwicklung bei schlechter Pflege verzögern. 7 4. Recherche 4.1. Definition eines virtuellen Haustieres Ein virtuelles Haustier, auch digitales Haustier genannt, ist ein künstliches für Menschen geschaffenes, unechtes Haustier. Manche Menschen haben lieber ein virtuelles Haustier anstatt eines echt Haustieres. Diese Haustiere haben keine physikalische Form, sondern sind abhängig von der Hardware, auf der sie laufen und der Software, mit der sie programmiert sind. Virtuelle Haustiere sind meist in Spielen enthalten. Diese Spiele haben jedoch kein bestimmtes Ziel. Der User muss versuchen durch Pflege und Interaktion mit dem künstlichen Wesen dieses solange wie möglich am Leben zu erhalten und oft diesem helfen, sich zu einer höheren Form weiter zu entwickeln. Die Interaktionsmöglichkeiten sind beschränkt und vorgegeben, wie z.B. es füttern, mit ihm spielen oder waschen. Die Spiele benutzen visuelle Effekte oder eine beschränkte künstliche Intelligenz um den Anschein zu erwecken, dass das Tier lebendig ist und dem Nutzer das Gefühl von Realität vermitteln. Dies wird durch einen gewissen Grad an Autonomie und unvorhersehbaren Aktionen unterstützt.1 Das verstärkt das Verantwortungsgefühl des Users für sein virtuelles Haustier. Virtuelle Haustiere können Simulationen von echten Tieren sein wie in dem Spiel Nintendogs2 oder Fantasiewesen wie in Tamagotchi3 . Die Wesen wollen Aufmerksamkeit und umsorgt werden. Bei schlechter Pflege können sie krank werden oder manche sogar sterben. Allerdings ist es danach immer möglich ein neues Spiel zu beginnen. Besonders Kinder können jedoch zu solchen virtuellen Haustieren eine enge Beziehung aufbauen und möchten beim Tod der Wesen diese nicht einfach ersetzten. 1 2 3 vgl. http://en.wikipedia.org/wiki/Virtual_pets http://nintendogs.nintendo.de/ http://www.tamagotchi.de/, http://www.tamagotchi.com/ 8 Es gibt drei verschiedene Arten von Software mit virtuellen Haustieren. Geräte-basierende virtuelle Haustiere Digitale Haustiere wie Tamagotchi oder Giga Pets auf unabhängigen kleinen Computern. Im Fall des Tamagotchis wurde das Spiel in einem kleinen Ei-förmigen, transportablen Gerät geliefert mit Knöpfen auf der Außenhülle, um mit dem Haustier zu interagieren. 4 Web-basierende digitale Haustiere Manche Internetseiten bieten kostenlos ein Spiel mit einem virtuellen Haustier an. Der Benutzer muss sich lediglich registrieren. Diese Spiele enthalten manchmal auch eine virtuelle Community, wie Neopia in Neopets1 oder Marada in Marapets2 . In diesen Spielen kann man interne Spielen spielen und damit virtuelles Geld verdienen um Futter oder Gegenstände für das Haustier zu kaufen. Manchmal kann man auch echtes Geld in Spielgeld umwandeln lassen um mehr virtuelles Geld zu Verfügung zu haben oder besondere Items zu erstehen. In diesen Communities kann der User auch selbst aktiv werden und eigene Wesen erstellen. 3 Software-basierende virtuelle Haustiere Virtuelle Haustiere in Computer- und Videospielen sind meist eine Unterklasse von Lebenssimmulationen. Der Computer bietet durch höhere Rechenleistung und Speichervermögen mehr Möglichkeiten für qualitative visuelle Effekte und Interaktivität. Haustiere auf dem PC können somit eine höhere virtuelle Intelligenz und die Fähigkeit zu lernen besitzen. 1 2 3 4 4 http://www.neopets.com/ [Stand 01.01.2010] http://www.marapets.com/ [Stand 01.01.2010] http://www.marapets.com/marapets.php [Stand 01.01.2010] http://images.amazon.com/images/G/03/software/features/0DUIbeduerfnissegr.jpg [Stand 01.01.2010] 9 4.2. Bekannte Spiele mit virtuellen Haustieren Tamagotchi „Das Tamagotchi (jap. [...], Wortschöpfung aus tamago (dt. „Ei“) und wotchi (von engl. watch, dt. „Uhr“)) ist ein aus Japan stammendes Elektronikspielzeug, das in der zweiten Hälfte der 1990er Jahre weltweit überaus populär war und im Jahr 2004 wieder neu aufgelegt wurde.“1 Das ursprüngliche Tamagotchi ist c.a. 4 cm breit und 6 cm hoch. Das darin digitale Wesen ist ein Küken. Das Küken schlüpft bei seiner Geburt aus einem Ei. Ab diesem Zeitpunkt muss der Nutzer sich rund um die Uhr um dieses Wesen kümmern. Es pflegen, mit ihm spielen, es füttern, mit ihm lernen, usw. Das Display der Original-Version hat eine Auflösung von 32 x 16 Pixeln, weswegen das Wesen darin oft nicht als Küken zu erkennen ist. Bei Vernachlässigung kann es krank werden und sterben. Es gibt jedoch eine Reset-Funktion mit der man ein neues Spiel beginnen kann. Auf der Außenhülle sind je nach Version drei bis neun Knöpfe angebracht, mit Hilfe denen der User mit dem Tamagotchi-Küken interagieren kann. Das Tamagotchi hat sich seit 1996 stetig weiterentwickelt. Neuere Modelle wie das Tamagotchi Connexion, haben eine Infrarot-Schnittstelle, mit der sich zwei Küken besuchen können und sogar miteinander Kindern bekommen können. 9 2 3 10 1 2 3 vgl. http://de.wikipedia.org/wiki/Tamagotchi [Stand 01.01.2010] http://www.timboucher.com/journal/wp-content/uploads/2009/01/tamagotchi.jpg http://www.ubergizmo.com/photos/2008/9/color-tamagotchi.jpg 10 IPuppy IPuppy ist eine Applikation für das IPhone. Das Prinzip ist dasselbe wie beim Tamagotchi, nur wurden hier die Möglichkeiten des IPhone bezüglich Grafik, Speicher und des Touch-Screens ausgenutzt. Als Haustier kann man sie einen Hundewelpen von der Rasse Schnauzer1 , Husky2 oder Chihuahua3 (je nach gekaufter Version) aussuchen. Es gibt unterschiede bezüglich Farbe und Fell. Im Laufe des Spiels wächst der Welpe zu einem größeren Hund heran. Interaktionsmöglichkeiten, wie den Hund durch Berührung des Screens zu waschen sind neu. Ebenfalls kann man mit seinem Hund spazieren gehen . Dabei findet der Hund Gegenstände, die der User verkaufen kann und dafür digitales Geld erhält, mit der er neue Gegenstände für den Hund wie besseres Shampoo, Spielzeug oder ein Hundekörbchen kaufen kann. 15 15 4 5 Nintendogs Nintendogs ist ein Spiel auf dem NintendoDS. Ebenso wie bei IPuppy besitz der User einen oder auch mehrere Welpen um die er sich kümmern muss. Mit dem Touchscreen des NintendoDS kann der User mit dem Hund interagieren, es streicheln oder kitzeln. Es gibt vier verschiedene Versionen, die jeweils mit einem anderen Hund beginnen, z.B. ein Labrador oder Dalmatiner. 6 7 7 1 2 3 4 5 6 7 http://appshopper.com/games/ipuppy-schnauzer http://appshopper.com/games/ipuppy-husky http://appshopper.com/games/ipuppy-2 http://www.iphonediario.com/noticias/303315673screen.jpg http://images.appshopper.com/screenshots/291/068226.jpg Vgl. http://nintendogs.nintendo.de/ http://images.businessweek.com/ss/05/11/miyamoto/image/nintendogs.jpg 11 5. Implementierung eines Prototypen 5.1. Design Als erstes möchte ich auf das Design von LittleLegends eingehen, angefangen von den ersten Enwürfen auf Papier über die Modellierung in 3D bis hin zur Interfacegestaltung. Als erstes werde ich die benutzen Methoden und Software aufzeigen. Danach erörtere ich das Konzept des Designs und werde genauer auf das Menü des Prototypen sowie die Charakterentwicklung von 2D in 3D eingehen. Als letzten Punkt dieses Abschnitts stelle ich die benutzen Softwaretools zum Export und Konvertieren der 3d Modelle vor. 5.1.1. Methoden Für die 3D-Modellierung und Animation benutze ich die Software 3ds Max 9. Um die 3D-Objekte in JavaMe einzubinden verwende ich das Format m3g. Darauf werde ich später im Kapitel Programmierung weiter eingehen. 3ds Max kann das jedoch Format m3g nicht korrekt exportieren. Deswegen habe ich als Alternative das M3G-Toolkit von Mascot Capsul1 benutzt, welches den H3T-Exporter, einen M3G-Konverter und M3g Viewer enthält. Auf das Format h3t und den Exporter werde ich später noch genauer eingehen. Somit exportiere ich meine 3D-Szenen zuerst in h3t um diesen dann mit dem Converter in m3g umzuwandeln. 1 http://www.mascotcapsule.com/toolkit/m3g/en/index.php 12 5.1.2. Konzept des Sets und der GUI Das Set von LittleLegends sollte einfach, bunt aber trotzdem ansprechend sein, damit nicht nur Kinder Spaß an dem Spiel haben, sondern auch Jugendliche und Erwachsene. Es entstand ein farbliches Bild ähnlich von Playmobil-Welten. Eine Abstraktion von Elementen des Sets und des Menüs hatte nicht nur ein einheitliches Bild zur Folge sondern auch eine Vereinfachung bei der Erstellung der Elemente für die Welt, was in Anbetracht des kurzen Entwicklungszeitraum am geeigneten schien. Ich werde in der Beschreibung des Designs dieser Arbeit nur auf im Prototypen realisierte Abschnitte des Konzepts von LittleLegends eingehen. Das Set des Prototypen beinhaltet zwei Wohnräume. Einmal das Wohnzimmer, in dem sich das Wesen hauptsächlich aufhält, isst und schläft. Zum anderen das Badezimmer, in dem das Wesen gewaschen werden kann. Immer sichtbar auf dem Bildschirm des Handys ist das grafische Userinterface (GUI). Die GUI in Form einer blauen Leiste am unteren Rand des Screens enthält sechs verschiedene kleine Grafiken. Diese Grafiken sind die Buttons, mit denen man mit dem Wesen und seiner Welt interagieren kann. Mit diesen Buttons kann man alle Bedürfnisse des Wesens beeinflussen oder zu einem Menü gelangen. Die Buttonleiste ist im Rahmen der Usability am unteren Rand des Bildschirms, damit der Benutzer nicht bei Interaktion mit den Buttons den restlichen Schirm mit den Fingern oder der Hand verdeckt. Grafisch sollten sich die Buttons im Einklang mit den bunten 3D-Elementen befinden und den Blick des User nicht allzu sehr ablenken, aber trotzdem auffällig genug sein um eine schnelle Identifikation zu ermöglichen. Mit Hilfe der Buttons gelangt der User auch von dem Wohnraum in das Badezimmer und zurück. Genaueres zum grafischen Userinterface behandle ich im nachfolgenden Abschnitt. Im Prototypen in LittleLegends habe ich als virtuelles Haustier einen Drachen konzipiert. Der Drache als Fabelwesen ist weder Mensch noch Tier. Er hat eine gewisse Intelligenz aber auch tierische Neigungen. Dieser Zwiespalt stellt schon das Konzept von LittleLegends dar, in dem das Wesen gefüttert werden muss, dieses gleichzeitig aber auch lernen kann, was eine gewisse Intelligenz voraussetzt. Dies sollte auch das Set darstellen, in dem zum einem das Wesen in einem Wohnzimmer eines anscheinend ganz normalen Hauses wohnt und in einer Dusche gewaschen wird. Im Gegensatz dazu aber in einem Körbchen schläft und mit Steaks, also Fleisch, gefüttert wird. Da das Spiel für Kinder und Jugendliche konzipiert ist, wollte ich zudem eine Verharmlosung bis hin zur Verniedlichung des Wesens und seinen Bedürfnissen. 13 5.1.3. GUI Die Buttons Füttern Der erste Button in der Leiste stellt ein Steak dar. Wie oben erwähnt frisst ein Drache laut Fabelgeschichten Fleisch. Dies wurde verharmlost in dem diesem zum Essen ein Steak gegeben wird. Bei Betätigung des Buttons erscheint ein Steak welches der User auf das Wesen ziehen muss damit die Essensanimation abgespielt wird und sich die Attribute Sättigung, Harndrang und Stimmung erhöhen und Hunger verringert. Waschen Der Button mit dem Schwamm führt den User ins Badezimmer. Dort steht das Wesen in einer Dusche und kann nun vom Benutzer gewaschen werden. Wenn man ins Badezimmer kommt ändern sich auch die Buttons in der Leiste. Es befinden sich dort nun ein gelber Pfeil nach links, ein Schwamm, eine Bürste und eine Shampoo-Flasche. Mit dem gelben Pfeil gelangt der User zurück ins Wohnzimmer. Mit der Shampoo-Flasche kann auf das Wesen fünf Mal ein Schaum aufgetragen werden. Mit dem Schwamm kann man diesen Schaum wieder wegwischen und mit der Bürste kann das Wesen geschrubbt werden. Alle Aktionen erhöhen die Reinlichkeit, Stimmung, Gesundheit und Zuneigung. Schlafen Der dritte Button ist dazu da das Wesen schlafen zu legen. Wenn man auf den Button drückt wird die Schlafanimation aktiviert. Die Buttons auf der unteren Leiste verschwinden und es tauchen drei neue auf. Ein Pfeil nach links, eine ausgeschaltete Glühbirne und eine eingeschaltete Glühbirne. Bei dem Pfeil handelt es sich um einen Button der den User zurück ins vorherige Menü bringt. Mit den Glühbirnen kann man das Licht ein oder ausschalten. Denselben Effekt kann der User hervorrufen, wenn er im Wohnzimmer auf die rote Lampe klickt, allerdings wird hierbei keine Schlafanimation aktiviert. Die Attribute Stimmung und Hunger erhöhen sich, die Müdigkeit wird reduziert. 14 Spielen Der Button mit dem Ball soll dazu dienen mit dem Wesen zu spielen. Diese Funktion wurde noch nicht implementiert. Lernen Mit dem Button mit dem Buch drauf soll der User mit dem Wesen lernen können. Diese Funktion wurde noch nicht implementiert. Neue Ausstattung Der Button mit dem Pinsel und der Farbe steht für eine Renovierung oder Neuausstattung des Wesens. Diese Funktion ist noch nicht realisiert. Hier soll der User die Räume des Hauses verändern können. Z.B. soll die Farbe der Wände im Wohnzimmer geändert oder dem Wesen ein neues Körbchen gegeben werden. Information Der letzte Button ist für Information. Dieser Button ist in jedem Zimmer sichtbar. Der User soll jederzeit auf Informationen über die Attribute des Wesens zugreifen können. Wenn auf diesen Button geklickt wird, erscheint ein blaues, halbtransparentes Viereck, in dem die wichtigsten Attribute des Wesens wie Fröhlichkeit, Sättigung oder Harndrang aufgelistet wird. Zu jeden Attribut gibt es eine fünfstufige Skala, die durch kleine Kreise dargestellt werden. Rote Kreise bedeuten Pluspunkte, leere Kreise sind Minuspunkte. Umso mehr rote Kreise es gibt umso mehr Bedürfnisse sind gestillt und umso besser ‚geht‘ es dem Wesen. In diesem Fenster gibt es unter den Attributen einen Punkt „ins Menü“. So lässt sich das Spiel pausieren und ins Hauptmenü zurückkehren. 15 Sauberkeitsleiste Im Badezimmer erscheint links oben eine Leiste. Diese stellt die Sauberkeit des Wesens dar und spiegelt das Attribut Reinlichkeit. Je mehr es gewaschen wird, desto mehr erhöht sich der innere rote Balken. Menü Bei Spielbeginn erscheint zuallererst das Menü. Dort kann der User auswählen ob er sein Spiel weiterspielen oder ein neues Spiel beginnen möchte. Ebenfalls kann er von dort in die Hilfe oder das Spiel beenden. Bei dem Untermenü Hilfe sind alle für den User relevanten Attribute aufgelistet und kurz erklärt, wofür diese stehen und wie er sie im Spiel beeinflussen kann. 16 5.1.4. Charakterentwicklung Zur Entwicklung eines eigenen Charakters für LittleLegends habe ich zu allererst die Arten von virtuellen Haustieren untersucht, die es in Spielen gibt. In dem Anschnitt Bekannte Spiele mit virtuellen Haustieren (Seite 6) habe ich bereits einige existierende Spiele vorgestellt. Dabei habe ich bemerkt, dass besonders bei Software-basierenden Spielen, reale Haustiere simuliert werden, wie ein Hund, Katze oder auch Pferde. Fantasiewesen kommen hauptsächlich in webbasierenden Spielen vor, wo auch die User gestalterischen Einfluss auf die Wesen nehmen können. Somit wollte ich auch im Bereich der Software einen unrealistischen Charakter entwickeln um freie Hand in der Gestaltung und im Bereich der Bedürfnisse des Wesens zu haben. Infolge dessen habe ich Fantasie und Märchen als Thema vorgegeben. Geplante Charaktere waren unter anderem Einhörner oder Sphingen, aber nur der Drache wurde im Prototypen konzeptioniert und realisiert. Am Anfang habe ich zwei unterschiedliche Skizzen von einem Drachen erstellt. Diese Skizzen habe ich einigen Kindern bei der Zielgruppenbefragung gezeigt und auswählen lassen was ihnen besser gefällt. Das Resultat war eine eindeutige Mehrheit für den kleinen grünen Drachen, der wesentlich besser auf die etwas ältere Zielgruppe zugeschnitten ist. Danach hab ich zwei Skizzen als Vorlage für die 3d-Modellierung erstellt. 17 5.1.5. 3d-Modellierung von Charakter, Set und Objekten Modellierung des Drachen Zur Modellierung des Drachen habe ich die Poly by Poly Technik benutzt. Der Vorteil davon ist, dass ich jedes Polygon einzeln setzte und somit die Polygonanzahl sehr genau bestimmen kann. Dies war notwendig, da der Charakter sehr Polygonarm konstruiert werden musste aufgrund der geringen Performance, Speicher und Grafikleistung des Smart Phones. Die Topologie des Drachen musste zum Animieren ausgelegt sein, weswegen auch die Gliedmasen nicht eins zu eins von der 2D- Zeichnung übernommen wurden. Ebenfalls besteht das Mesh vollkommen aus Quads, was dem Drachen weichere Konturen gibt und scharfe Kanten beim Animieren vermeidet. 18 Modellierung des Sets und der Objekte Das Set besteht aus einem Wohnzimmer und einem Badezimmern. Dem Wohnzimmer wurden mehrere Elemente hinzugefügt. Einmal Gegenstände, die der Drache oder der User benutzen kann, wie das Körbchen oder die Lampe, zum anderen Objekte die lediglich zur Atmosphäre beitragen, wie Fenster mit einem Blick nach draußen, eine Tür, Teppich, der Schrank und der Spielzeugritter. Im Badezimmer stehen eine Duschwanne, der Duschhahn, Handtücher, ein Regal und Shampoo-Flaschen. Alle Objekte wurden entweder mit Boxmodelling erstellt, wie die Duschwanne, oder mit Splines und einem Lathe-Modifier, wie die Shampoo-Flaschen. Hier wurde ebenfalls versucht, so polygonreduziert wie möglich zu arbeiten um die Perfomance des gesamten Spiels auf dem Handy nicht zu belasten. Die Farbgebung ist aus dem RGB-Raum und recht bunt gehalten um der Playmobilrichtung gerecht zu werden. 19 5.1.6. Animation Um den Drachen für die Animation vorzubereiten habe ich Bones als Grundgerüst erstellt mit Helfern zum erleichterten Bedienen. Danach habe ich das Mesh an die Bones gebunden und somit geskinned. Nun musste noch das Mesh geweighted werden, d.h. einstellen welcher Scheitelpunkt von welchen Bone beeinflusst wird. Aufgrund der Limitation von dem h3t-Exporter konnte ich jedem Vertex nur einen Bone zuweisen. Auf den h3t-Exporter werde ich im nachfolgenden Abschnitt weiter eingehen. Das hatte zur Folge, dass das Mesh bei der Animation scharfe Kanten aufwies. Die benötigten Animationen für den Prototypen sind: - - - - - - - Walkcycle normal Walkcycle fröhlich Walkcycle traurig Unter der Dusche Essen Schlafen Gestreichelt werden 20 5.1.7. H3T-Exporter Wie oben bereits erwähnt benutzte ich als Zwischenformat h3t. Dieses Format ist das einzige funktionierende, kostenlose Tool zum Export von einer 3D-Szene für das Konvertieren in m3g. Allerdings hat dieses Format einige Einschränkungen und Vorgaben. Ich werde im Folgenden die wichtigsten Vorgaben vom h3t-Exporter erläutern die, während meiner Arbeit Ausschlag gebend waren. Bones H3t hat eine Bones-Limitierung von drei. Das heißt, dass einem Vertex nur drei Bones zugeordnet werden darf. Diese Vorgabe beschränkt die flüssige Animation des Charakters und hat Verzerrungen und scharfe Kanten zur Folge. Abweichend von der Angabe in der Dokumentation von h3t war es in 3ds Max nicht möglich mit einem Limit von drei das Mesh korrekt zu exportieren. Die Lösung war die Zurodnung der Vertices auf ein Limit von eins zu reduzieren, was die beschrieben Folgen verstärkt hat. Morphing Um Animationen wie den Mund vom Drachen zu öffnen, ist es üblich Morphs zu verwenden. D.h., dass ein zweites identisches Mesh erstellt wird mit der gewünschten Mimik. Mit einem Morph-Modifier kann dieses Mesh auf das Original angewendet werden und je nach Einstellung der Übereinstimmung wird die Verformung übertragen. Somit kann man eine Animation erstellen, in der der Drachen den Mund öffnet. Allerdings werden im Exporter von 3ds Max diese Option nicht unterstützt. Im h3t-Exporter für Maya wird diese Option jedoch im Gegensatz zu Max unterstütz, weswegen ich meinem Kommilitonen Manuel Weiss aus IAM5, der sich mit Maya sehr gut auskennt, gebeten habe mir bestimmte Animationen in Maya zu erstellen. 21 Material Um Material und Farbe korrekt exportieren zu können muss ein h3t-Material verwendet werden. Dies ist nach der Installation des h3t-Plugins im Materialeditor zu finden. Hier kann dann unter anderem die Sichtbarkeit oder Glanz einstellen werden. Es ist möglich eine Farbe zu verwenden oder ein bis zwei Bitmaps als Textur. Die Bitmaps müssen quadratisch sein mit einer Seitenabmessung gleich einer Zweierpotenz (2, 4, 16, 32, 64, 128, 256). Umso höher die Kantenlänge umso qualitativer ist das Bitmap. Jedoch sollte diese nicht zu groß gewählt werden hinsichtlich der Performance-Einschränkungen. Die Texturen werden bei Export mit ausgelagert als PNG-Files. Es ist allerdings nicht möglich Polygone eines Objekts unterschiedliche Materialien zu geben. Transparenz Es ist nicht möglich mit h3t transparente Objekte korrekt zu exportieren. Animation In 3ds Max hatte ich das Problem, dass sich, wenn ich den Drachen vom Mittelpunkt verschoben habe, das Mesh im Exporter verzerrte. Um eine korrekte Exportiertung zu gewährleisten durfte das Objekt nicht verschoben werden. Dies trat allerdings erst auf nachdem ich das Mesh an die Bones geskinned habe. Eine Lösung für dieses Problem habe ich nicht gefunden. Selbst nach einem erneuten Versuch das Mesh an die Bones mit zu skinnen und neu zu weighten ließ es sich nicht korrekt exportieren. Ich habe somit auf Translationen in den Animationen von 3ds Max verzichtet . 22 5.1.8. M3g-Converter Nach dem Export von h3t-Files aus 3ds Max konnte ich diese mit dem M3G-Converter von Mascot Capsule umwandeln in M3G-Files. Dazu musste ich lediglich im Konverter die zu konvertierende Datei auswählen. Der Konverter hat nun im selben Order wie die h3t Datei eine M3G Datei erstellt. Falls in der Szene Texturen waren, wurden die vom h3t-Exporter erstellen PNGFiles in die M3G-Dateien mit eingebunden. 23 5.2. Programmierung 5.2.1. Recherche und Vergleich von Methoden OpenGL ES 1 „OpenGL ES (Open Graphics Library for Embedded Systems) ist eine Spezifikation für ein plattform- und programmiersprachenunabhängiges API (Application Programming Interface) zur Entwicklung von 3D-Computergrafik. Die Spezifikation beschreibt eine vereinfachte Version der OpenGL Spezifikation welche sich besonders für den Einsatz im Bereich von eingebetteten Systemen eignet.”2 OpenGL ES findet unter anderem Anwendung auf der PlayStation 3, dem IPhone von Apple oder das N900 von Nokia. Spiele mit OpenGL ES - Neocore - Armadillo Roll Vorteile: - Direkte und schnelle Steuerung der Grafikausgabe - Komplex und leistungsstark Nachteile - Hohe Einarbeitungszeit - Beispiele aus C, C++ können nicht direkt übernommen werden - 3D Szenen aus 3d-Software-Tools können nicht direkt eingebunden werden 1 2 http://www.khronos.org/opengles/images/opengles_75px.png http://de.wikipedia.org/wiki/OpenGL_ES 24 Mobile 3D Graphics API (m3g) M3G ist eine Spezifikation, die eine API für das Entwicklen von Javaprogrammen mit 3D-Computer Grafik zu Verfügung stellt. Es erweitert die Ressourcen von Java, Micro Edition. Das objekt-orientierte Interface beinhaltet 30 Klassen die zum Zeichen von komplexen, animierten drei-dimensionalen Szenen verwendet werden. Die Klassenbibiliothek [JSR-184] berücksichtigt die geringe Rechenleistung und die limitierten Resourcen von Handys und PDAs. „Ziel des [JSR-184] ist es, eine schnelle 3D-Grafik auf Handys und PDAs zu ermöglichen, die die Implementierung von Spielen, Simulationsprogrammen und interaktiven Animationen erlauben.“ 1 Vorteile Schnelle Implementierung von 3D-Szenen Erstellung von Morphing-Effekten Zugriff auf die Animationen mittels eines AnimationControllers Nachteile Geringe Performance, somit Einschränkungen der Polygonanzahl und Texturen Fazit Um eine einfache Implementierung meiner Szenen aus 3ds Max zu gewährleisten, habe ich mich für die JSR-184 API des M3G entschieden. Zusätzlich ist dies auf JavaME abgestimmt, so dass ich mich nur in die Klassen des M3G einarbeiten musste. Screenshot von Asphalt 3: Street Rulse, zeigt die Möglichkeiten von der Mobile 3D Graphics API 2 1 2 Breymann / Mosemann, Seite 223 http://en.wikipedia.org/wiki/Mobile_3D_Graphics_API 25 5.2.2. Die m3g-API Anforderungen M3g erfordert CLDC 1.1 und MIDP 2.0. Weiterhin muss die API JSR-184 auf den Handys vorhanden sein, sowie eine hohe Rechenleistung im Bereich 3d-Darstellung. Implemetierung M3g besitzt zwei Modi für das Rendering: - Retained Mode: Rendert die 3D-Welt auf Basis der Licht und Kamerapositionen - ImmediateMode: Einzelne Objekte können direkt auf den Bildschirm gezeichnet werden, ohne die gesamte Welt zu rendern. Beide Modi können nebeneinander verwendet werden und ermöglichen bei richtiger Verwendung eine performante Applikation. Mobile 3D Graphics API MIDP CLDC 1.1 Integration er Mobile 3D API in die bestehende Umgebung 26 Szenegraph „ Der Retained Mode basiert auf einem Szenegraph, der die Hierachie der darzustellenden Szene beschreibt. Der Graph besteht aus einem Weltknoten, der die Wurzel des Graphen ist, und aus weiteren Knoten, die die Geometrie, Beleuchtung, die Position und Orientierung, die Beschaffenheit der Objekte und die Kameraeigenschaften beschreiben. Dabei finden Operationen, die auf einen Knoten angewendet werden (z.B. eine Rotation), auch auf Kindknoten anwendung.”1 Ein Szenengraph wird mit einer 3D-Software wie 3ds Max, Maya oder Blender erstellt. Dazu wird die Szene in dem Programm erstellt und beim Export in m3g, oder wie bei mir mit dem Zwischenschritt über h3t, wird der Graph in das File mit eingebunden. Mit dem m3g Viewer kann man sich nicht das 3d-Objekt anschauen sonder auch den Szenegraphen anzeigen lassen. Bei direktem Export von 3ds Max in M3G wird eine html Datei erzeugt die den Szenegraphen anzeigt. World Group Sprite3D Mesh Group Group Camera Morphing Mesh Light Beispiel eines Szenegraphs 1 Background Breymann / Mosemann, Seite 224 Skinned Mesh 27 Klassen im m3g In diesem Abschnitt möchte ich die wichtigsten Klassen von m3g Vorstellen um einen Überblick zu erhalten. Auf die Mobile 3d-API wird in J2ME durch das Package javax.mircoedition.m3g zugegriffen. Loader und Object3D „ Im M3G [gibt es] die Klasse Loader mit der Methode load(). Mit dieser Methode [wird] ein Szenegraph im M3G-Dateiformat [geladen]. Die Klasse Loader deserialisiert einen Szenegraphen, und die einzelnen 3D-Objekte einer Szene werden in ein Array von Objekt 3D-Objekten (Rückgabewert der Methode load() eingetragen. Die ist im M3G der übliche Wert, 3D-Objekte im MIDlet aus einer Datei einzulesen. Fast alle Klassen des M3G außer Loader, Transform, RayIntersection und Graphics3D erben von der Klasse Objekt3D.“ 1 Graphics3D Die Klasse Graphics3D ist das zentrale Element der API. Sie wird für das Rendering benutzt und es gibt davon nur eine Instanz. Laut [JSR 184] muss die Klasse wie folgt eingebunden werden: Public class MyCanvas extends Canvas { Graphics3D myGraphics3D = Graphics3D.getInstance(); //Graphics-Singelton holen Public void paint(Graphics g) { Try { myGraphics3D.bindTarget(g); //Renderingausgabe an das Singelton binden myGraphics3D.render(myWorld);// Szene rendern } Finally{ myGraphics3D.releasTarget();//Renderingausgabe freigeben. } //… } //… } Die Rendering-Ausgabe ist meist ein Graphics-Objekt welches von der paint()-Methode der Klassen Canvas oder GameCanvas übergeben wird. Zusätzlich kann Graphics3D auch ein Image2D-Bild rendern, welches z.B. für eine Textur verwendet werden kann. Das Graphics3D hat verschiedene Eigenschafte die unterstütz werden, wie z.B. ANTIALIAS, DITHER oder TRUE_COLOR. Allerdings werden nicht alle Eigenschaften von der Hardware oder Software auf dem PDA oder Handy unerstützt.2 1 2 Breymann / Mosemann, Seite 225 Breymann / Mosemann, Seite 228 28 World, Group und Node Die Klasse World ist die Wurzel des Szenegraphen und somit dessen Einstiegspunkt. Weitere Knoten werden der World-Klasse mittels der addChild()-Methode hinzugefügt. Beim Rendern des Graphics3D-Objektes muss diesem ein Objekt der Klasse World übergeben werden. Die Klasse World erweitert die Group-Klasse um Methode zum Setzten von Hintergrund- und Kamera-Instanzen. Die abstrakte Klasse Node ist die Basis-Klasse aller Szenengraph-Knoten. Die fünf Klassen die von Node erben sind Camera, Mesh, Sprite3D, Light und Group. In LittleLegends werden die Szenen, wie das Wohnzimmer oder das Badezimmer, von der Klasse World abgeleitet, da es das oberste 3D-Objekt ist. Der Drache ist ein Node, welcher an World angehängt ist. Camera „Die Klasse Camera wird für die Transformation der 3D-Szene auf Bildschirmkoordinaten eingesetzt, wobei sich das M3G bei der Projektion und beim Clipping an OpenGL hält.“1 Es ist möglich in einer Szene mehrere Kameras einzusetzten und diese miteinander Kombinieren. Light Es gibt in M3G vier Lichtarten - Ambient Light Dieses Licht beleuchtet alle Objekte aus jeder Richtung gleichmäßig. - Directional Light Diese Lichtart ist dem Sonnenlicht ähnlich. Es kommt gleichmäßig aus einer Richtung, die Position des Lichts hat keine Bedeutung. - Omnidirectional light Auch hier werden alle Objekte aus allen Richtungen beleuchtet, allerdings nimmt die Intensität mit der Entfernung ab. - Spot light Ein Spotlight beleuchtet die Objekte aus einer bestimmten Richtung, wobei die Entfernung von Objekt und Licht von Bedeutung ist. In LittleLegends werden zum optimalem Ausleuchten der Szenen zwei direktionale Lichter benutzt. 1 Breymann / Mosemann, Seite 233 29 Erzeugen und Verwendung einer M3G-Datei Wie eine M3G-Datei mit Hilfe von h3t-Exporter und Konverter erzeugt wird habe ich bereits im Kapite 8.1.7 ht3-Exporter (Seite 20) erläutert. Hier möchte ich dies nochmals an einer Grafik des schematischen Aufbaus genauer darstellen: 1 Lang, Seite 8 1 30 Die Verwendung von M3G-Dateien ist nicht immer einfach und hängt auch davon ab, von welchem 3D-Programm exportiert wurde. So hat Maya nach dem Exportieren einen geringfügigen anderen Aufbau des Szenengraphens als 3ds Max. So musste ich für die Dateien von Maya die Klasse Actor einfügen um das zu animierende Mesh mit find(ID) zu lokalisieren und diesem einen AnimationController, mit der ID des Controllers aus dem Szenengraphen, zuzuweisen. Bei beiden Exporten, von Maya und von Max, musste ich jedesmal im Szenegraphen nachschaunen welche ID das SkinnedMesh hat, welches ich in die Szene einfügen möchte. Beispiel eines Szenegraphen 31 5.2.3. KI und Datensicherung In LittleLegends wurde eine einfache KI auf Basis permanenter Datenspeicherung konzpiert. Das Konzept, dass das Wesen lernen soll wurde noch nicht umgesetzt. Datensicherung mit einem RecordStore Ein RecordStore ist ein permanenter Speicher auf dem Handy. Die Klasse RecordStore verwaltet das Hinzufügen, Lesen, Löschen und Ändern im internen Speicher. Ein RecordStore hat einen eindeutigen Namen und ein positive ganze Zahl als Primärschlüssel. Datensätze werden als Byte-Arrays geschrieben. Deswegen müssen Daten, die in integer oder String vorliegen, zuerst umgewandelt werden. Das umgekehrte Prinzip muss zum Auslesen von Byte in ein beliebiges Format angewendet werden. Wenn der Benutzer nun in LittleLegends eine Interaktion ausführt, z.B. den Drachen füttert, werden bestimmte Attribute wie die Stimmung um eins erhöht. Danach werden alle Attribute in dem RecordStore gespeichert und wieder ausgelesen, um für den User zur Verfügung zu stehen. Zeitlich Komponente durch Thread-Programmierung Um die Zeit vergehen zu lassen, wird in dem Prototypen mit dem Starten des MIDlets auch ein Thread gestartet. Dieser beeinflusst nach einer bestimmten Zeit (z.B. jede Minute oder jede Stunde) die Attribute. Er verringert z.B. die Stimmung und erhöht den Harndrang. Dies simuliert somit vergehende Zeit in der Welt des virtuellen Haustieres. Die Zeit soll einem realistischen Wert von 24 Stunden darstellen. Im Prototypen ist die Zeit minütlich eingestellt um diese zu Präsentieren. Was noch nicht implementiert ist, ist da Altern des Wesens. Da noch keine Geburt oder andere Entwicklungsstufen vorhanden sind, wurde erstmal vernachlässigt. Ebenso gibt es noch keine Unterscheidung zwischen Tag und Nacht der realen Welt. Dazu eine Abfrage der Systemuhr des Handys implementiert werden. 1 1 http://picture.yatego.com/images/3ef727e15b1151.0/eki-clock-uhr-galery.jpg 32 5.2.4. Konzept der Klassen und Methoden In diesem Abschnitt möchte ich auf die verwendeten Klassen und ihre Funktion eingehen. Eine schematische Darstellung befindet sich in den zwei folgenden Abschnitten UseCase und UML. MyMIDlet MyMIDlet ist die Startklasse des gesamten Programms und ist von MIDlet abgeleitet. Somit besitzt sie die typischen Funktionen initialize(), startApp(), pauseApp() und destroyApp(). In der Methode startApp() wird je eine Instanz der Klasse Attributes und Controller sowie Time erstellt, auf die ich später noch genauer eingehen werde. Die initialize-Methode wird aufgerufen. In der initialize()-Methode wird da Menü aufgerufen und der menustatus, das heißt in welchem Menü sich die Applikation beim Start befindet, bzw. in welchem Raum sich das virtuelle Haustier gerade aufhält, übergeben. Ebenfalls wird eine Instanz der Klasse Controller mitgegeben, die in startApp() erstellt wurde. MyCanvas Die MyCanvas-Klasse ist die Hauptklasse der Applikation LittleLegends. Von hier aus werden alle Funktionen gesteuert. MyCanvas ist von Canvas abgeleitet und besitzt dessen paint()-Methode. Hier wird die 3D-Szene und Objekte sowie benötigte Bilder geladen und mit paint() auf den Screen gezeichnet. Mit der Methode setLight() werden Instanzen von Light erstellt und an ein World-Objekt angehängt. Ähnlich in der Methode setAspectRatio(), in der ein KameraObjekt erstellt. Die Perspektive wird auf die Breite und Höhe des Handybildschirms angepasst. Dann wird die Kamera gemäß der vom Menü übergebenen Rotationswinkeln und Verschiebungen angepasst. Für den Touchscreen wichtige Methoden sind pointerDragged(), pointerPressed() und pointerReleased(). Wenn nun der User auf den Bildschirm tippt wird pointerPressed()-Methode aufgerufen, welche zuständig für das Aktivieren der Buttons ist. Wenn über den Bildschirm mit stetigem Druck gestrichen wird, wird pointerDragged() aufgerufen. Damit wurde z.B. das Streicheln oder Waschen realisiert. PointerReleased wird aufgerufen, wenn der User den Screen nicht mehr berührt, d.h. der Druck aufhört. Diese Methode wird im Prototypen nicht verwendet. Mit der Methode paint() wird, wie bereits erwähnt, alles an ein Graphics-Objekt gebunden und auf die Leinwand, d.h. den Screen gezeichnet. Um zu entscheiden, welches 3d-Mesh oder welche Buttonbar gezeichnet werden soll, habe ich einige if-Abfragen verwendet. Die interne Klasse RefreshTaks, abgeleitet von TimerTaks ist mit seiner Methode run() für die Animation zuständig. Wenn eine Instanz dieser Klasse aufgerufen wird,ruft sich diese solange selber auf bis sie gestoppt wird. Diese Klasse benutzte ich zum Animieren des Walkcycles. Je nachdem in welche Richtung der Drache laufen soll werden float-variablen hoch oder runter gezählt bis sie einen bestimmten Wert erreicht haben. Danach ändert der Drache sein Richtung. Diese Art funktioniert auf dem Emulator sehr flüssig, läuft jedoch auf dem Handy (besonders auffällig bei Nokia XPressMusik 5800) viel langsamer und zäher ab, was vermutlich an den beschränkten Speicherressourcen und der schlechten Unterstützung für 3D liegt. 33 MyCanvas_shower Eine fast identische Klasse wie MyCanvas ist die MyCanvas_shower. Diese hat denselben Aufbau, da sie auch dieselbe Funktion besitzt, die Szene laden und Steuern. Es werden lediglich andere 3d-Objekte und Bilder geladen und gezeichnet. Vom Menü werden andere Kameraeinstellungen übergeben. Menu Die Menu-Klasse wird von MyMIDlet aufgerufen. Sie ist zuständig für die Initialisierung des Displays des Handys. Weiterhin ruft sie je nach übergeben Menüstatus BathroomForm.java oder MainroomForm.java auf. MainroomForm Hier werden für die Wohnzimmer-Szene die benötigte Buttonbar geladen sowie Kameraeinstellungen initialisiert. Danach wird die Klasse MyCanvas aufgerufen und dieser die Instanz des MIDlets, der Pfad der 3d-Szene, Kameraeinstellungen, die Buttonbar sowie eine von Menu mitgelieferte Instanz von Controller übergebenen. Die Einstellungen und Pfadangaben holt die Klasse MainroomForm von der Klasse Mainroom. Mainroom In dieser Klasse werden Pfadangaben für Bilder und 3d-Objekte sowie die Kameraeinstellungen festgelegt. BathroomForm BathroomForm ist fast identisch mit der Klasse MainroomForm. Sie übergibt lediglich anderen Pfadangaben und Einstellungen. Bathroom Diese Klasse ist identisch mit der Klasse Mainroom. Sie enthält lediglich andere Einstellung für die Kamera und andere Pfadangaben für Bilder. 34 Actor Die Klasse Actor wird aus der paint()-Methode von MyCanvas aufgerufen, um eine Animation eines 3D-Objektes darzustellen. Dazu muss der Actor-Klasse das World-Objekt, die ID des zu rendernden 3D-Meshes, die ID des AnimationControllers, der die Animation des Meshes steuert, ein aktuelles Time-Objekt sowie die Anzahl der Frames der Animation übergeben werden. Das Mesh wird anhand seiner ID in dem World-Objekt ausfindig gemacht und zu seinem SkinnedMesh gecastet. Hier kann z.B. auch die Dauer und die Geschwindigkeit der Animation beeinflusst werden. Package geom GeomUtils Diese Klasse ist dafür zuständig Weltkoordinaten in Bildschirmkoordinaten umzuwandeln. Dazu werden aus der Klasse MyCanvas die aktive Kamera und die x, y und z Koodinaten als Point3fArray des zu translatierenden Punktes übergeben. Von der übergebenen Kamera holt sie die Klasse dessen Transform-Matrix und dessen Projektion, welche in einer Transform-Variablen gespeichert werden. Es wird eine neue Transform-Matrix erstellt, dieser die aktuelle TransformMatrix der Kamera übergeben und danach invertiert. Dann wird das Array mit den x,y und z Koordinaten mit der neuen Kameramatrix und Projektionsmatrix transformiert. Um nun die aktuelle Bildschirmkoordinaten zu berechnen werden jeweils x, y und z mit der vierten Stelle der 4x4 Matrix, also der Stelle die für die Translation zuständig ist dividiert und mit der Screenhöhe oder –breite multipliziert. Der selbe Wert von Höhe oder Breite muss danach noch dazu addiert werden. Da Bildschirmkoordinaten nur aus eine x und y-Koordinate bestehen, muss der dritte Wert, der für z zuständig ist nicht mit multipliziert und addiert werden. vectorP[0]/vectorP[3]*screenW_2 + screenW_2, //x -vectorP[1]/vectorP[3]*screenH_2 + screenH_2, //y vectorP[2]/vectorP[3] //z Point3f Diese Klasse wird von GeomUtils aufgerufen, um x, y und z Koordinaten in einem Array zu speichern. 35 Package KI Attributes In dieser Klasse sind alle dreizehn Attribute des virtuellen Haustieres definiert, welche in dem Konzept des Prototypen festgelegt wurden. Alle Attribute sind mit Gettern und Settern ausgestattet um die Attribute aus dem Speicher hier zu speichern, damit die Applikation auf die Werte zugreifen kann. Die Methode newGame() ist zuständig, wenn ein neues Spiel gestartet wird. Dabei werden alle Werte der Attribute auf den Mittelwert fünf gesetzt und in der Datenbank überschrieben. Controller Die Controller-Klasse ist zum steuern aller Attribute und Interaktionen die Werte der Attribute verändern zuständig. Z.B. werden bei der Aktion füttern, die durch Berührung des Buttons mit dem Steak-Icon in der MyCanvas-Klasse ausgelöst wird, das Attribut Hunger (Hunger), Laune(Mood)und Harndrang (Stranguary) um eins erhöht und die Sättigung (Satsifaction) um eins gesenkt. Danach werden die Daten in dem internen Speicher gesichert und neu ausgelesen. Database Die Klasse Database ist der interne Speicher. Darin wird ein RecordStore erzeugt. Die Funktion des RecordStores habe ich bereits in dem Abschitt 8.2.3 KI und Datensicherung (Seite 31) erläutert. In der Klasse Database wird somit dieser RecordStore erzeugt und wieder aufgerufen, um mit entsprechenden Methoden Werte auszulesen, zu überschreiben, zu löschen oder einzufügen. Die Werte werden in den Methode zu Byte-Arrays umgewandelt, damit der RecordStore diese Speichern kann. Beim Auslesen kann mit bestimmten Methoden das Byte-Array wieder in Integer,long oder einen String umgewandelt werden. Diese Klasse habe ich aus dem Buch „Spieleprogrammierung für Handys mit Java ME“ übernommen. 36 DB Mit der Klasse DB wird die Klasse Database und somit der RecordStore gesteuert. Die Methode setValues() holt sich die Werte der aktuellen Attribute mit Hilfe der übergebenen AttributeInstanz. Mit der Methode addEntry() können neue Einträge hinzugefügt werden. Dazu wird erst abgefragt, ob der Wert des Attribues, welches in die Datenbank geschrieben werden soll, nicht größer als zehn ist und ob dieser nicht im negativen Bereich ist. Dann wird die Methode writeInteger(String, int) von der Klasse DB aufgerufen, welche den übergeben Integer Wert und den String, der den Schlüssel darstellt in ein Byte-Array umwandelt und in den RecordStore speichert. Der Schlüssel ist dafür zuständig, um den Wert an eine bestimmte Stelle des RecordStores zu speichern und um diesen Wert auch wieder auslesen zu können. Somit funktioniert der RecordStore wie ein Hashtable, der permanent gespeichert werden kann. Mit der Methode getValues werden die Werte der Attribute anhand ihres Schlüssels wieder ausgelesen und die zugehörigen Variablen der Klasse Attributes gespeichert. Time Die Time-Klasse erbt von der Klasse Thread. Diese Klasse erzeugt die Zeit in der Applikation. Es wird ein Thread initialisiert, der mit der run()-Methode nach einer bestimmten Zeit immer wieder aufgerufen wird. Die Zeit zwischen den Aufrufen ist einstellbar und zu Testzwecken auf eine Minute (6000 ms) eingestellt. Nach dieser Zeit ruft der Thread die Methoden getHungry(), getThirsty(), getDirty() und getTired() in der Controller-Klasse auf. getHungry() z.b. reduziert den Wert Hunger und der Sättigkeit um eins. So wird eine ablaufende Zeit simuliert und somit Bedürfnisse wie bei einem lebenden Wesen hervorgerufen. 37 5.2.5. UseCase Name und Identifier füttern, UC 1 Ziel Der User das virtuelle Haustier füttern. Kategorie primär Vorbedingung Die Appliaktion muss auf dem Handy instaliert sein und ist am laufen. Nachbedingung Erfolg Die Attribute Hunger, Laune, Harndrang und Zufriedenheit wird erhöht. Nachbedingung Fehlschlag Die Werte der Attribute bleiben gleich. Beteiligte Akteure User, Handy, Appliaktion Auslöser Geringe Attributspunkte bei Hunger Beschreibung - Button für Füttern drücken (Bild mit Steak, erste Button von links) - auf dem Display erscheinendes Fleisch auf das virtuelle Haustier ziehen Button füttern drücken verschieben anzeigen View RecordStore anzeigen Steak ok geben Controller Datensatz erhöhen Datensatz auslesen 38 Name und Identifier waschen, UC 2 Ziel Der User das virtuelle Haustier waschen. Kategorie primär Vorbedingung Die Appliaktion muss auf dem Handy instaliert sein und ist am laufen. Nachbedingung Erfolg Die Attribute Sauberkeit, Laune, Gesundheit und Zuneigung wird erhöht. Der Sauberkeitsbalken erhöht sich. Nachbedingung Fehlschlag Die Werte der Attribute bleiben gleich. Beteiligte Akteure User, Handy, Appliaktion Auslöser Geringe Attributspunkte bei Sauberkeit Beschreibung - Button für waschen drücken (Bild mit Schwamm, zweiter Button von links) - auf dem Display erscheint das Badezimmer und vier neue Buttons - Button Bürste drücken - auf dem Bildschirm erscheinende Bürste auf das virtuelle Haustier ziehen und mit dem Finger schrubben Alternative 1 - Button schwamm drücken und mit dem Schwamm das Wesen schrubben Alternative 2 - Button Shampoo drücken und Shampoo auf dem Wesen druch drücken verteilen - Button schwamm drücken und mit dem Schwamm das Wesen schrubben um somit den Schaum weg zu wischen View Button waschen RecordStore anzeigen drücken neue Szenen und GUI drücken verschieben Button Bürste ok geben Bürste Controller erhöhen Leiste Datensatz übergeben Datensatz erhöhen und speichern Datensatz auslesen 39 Package: main 5.2.6. UML 40 41 Package: KI Package: geom 42 6. Ergebnis Im Anschluss möchte ich nun auf die Ergebnisse meiner Arbeit eingehen. Im Bereich Konzept ist eine vollständige Anleitung bezüglich Attribute und ihrer Wirkung bzw. ihre gegenseitige Beeinflussung entstanden. Diese Vorlage gilt für das gesamte Spiel. Der Prototyp von LittleLegends ist begrenzt spielbar. Es gibt einen Charakter als virtuelles Haustier, das der User streicheln, füttern, schlafen legen und waschen kann. Das Spiel besitzt zwei Szenen, das Bad und das Wohnzimmer. Eine interne Datenbank speichert alle Attributwerte und kann diese jederzeit, auch nach Neustart des Spiels abrufen. Die Zeit wird durch einen Thread dargestellt. Der Thread beeinflusst die Attribute, um vergehende Zeit zu erzeugen. Der User kann mit dem virtuellen Haustier einmal mittels Touchscreen agieren, zum anderen die Buttons auf dem Bildschirm benutzen, je nach gewünschter Aktion. 7. Bewertung An diesem Punkt der Dokumentation möchte ich das erzielte Ergebnis des Prototypen diskutieren. Die Frage, wie 3D mit JavaME in Applikationen eingebunden werden kann, konnte ich in dieser Dokumentation weitgehenden erläutern. Wie bereits erwähnt habe ich die M3G API von JavaME genutzt und so fertige 3D-Szenen eingebunden. Dies hat den Vorteil, dass Szenengestaltung und Design unabhängig von der Programmierung entwickelt werden kann. Die Szene und Objekte mit einer Profi-3D-Software wie 3dsMax oder Maya zu entwickeln bietet dem 3DDesigner die Möglichkeit, die ganzen Möglichkeiten des Tools auszunutzen. Somit lassen sich einfach detailierte Szenen mit Licht und Kamera erstellen und diese auch ohne Rechenaufwand ändern. Trotz dieser Freiheit für das 3D-Design gibt es bei diesem Format Einschränkungen die eine flüssige Entwicklung stark behindern. Im Kapitel über den h3t-Exporter habe ich bereits dessen Vor- und Nachteile erläutert. Zusammengefasst muss der Designer die Einschränkungen des Exporters genau kennen und wissen, wie er diese verhindert oder umgeht. Auch die Einbindung der exportieren Dateien unterscheidet sich je nach 3D-Software und Arbeitsweise des Designers. Zusätzlich zeigt JavaME die Szenen und Objekte nicht immer wie gewünscht an. Der Programmierer muss anschließend meistens noch die Szenen in Bezug auf Licht, Kamera und Position anpassen. Somit ist die Einbindung von M3G-Dateien mit hohem Aufwand verbunden. Im Verlauf der Arbeit konnte ich die Performance des Prototypen auf einem Touchhandy, dem Nokia 5800 XPressMusik testen. Im Wesentlichen läuft die Animation und die Szenen werden korrekt dargestellt. Die Animation läuft jedoch mit einer sehr niedrigen Framerate (zwischen 3 und 8 fps) ab. Diese Framerate wird noch schlechter, umso mehr Meshes in die Szene eingefügt werden, weshalb es notwendig ist, die 3D-Szenen so polygonarm wie möglich zu halten. Jedoch auch bei völligem Entfernen des Hintergrundes und Objekten konnte das Handy die Animation nicht flüssig abspielen. Abschließend ist eine 3D-Applikation für ein Handy oder PDA ein Projekt mit hohem Aufwand. Handyspiele sind Casual Games, d.h. Gelegenheitsspiele. Deswegen ist es fragwürdig, ob es sich zurzeit lohnt, solch ein Spiel für die gängigen Handys und PDAs zu entwickeln. Allerdings entwickeln sich die Mobiltelefone rasant weiter. Sobald diese genug Speicherkapazität haben und auch 3D effizient unterstützen werden, werden 3D-Applikationen sinnvoll. Dann müssen sich auch die Tools zum Erstellen dieser 3D-Applikationen verbessern und es lohnt sich für den Designer und Programmierer darin zu investieren. 43 8. Ausblick Als letzten Punkt dieser Dokumentation möchte ich einen Ausblick über das Projekt und den Prototypen werfen. Zunächst wird der Prototyp um die fehlenden Aktionen Spielen, Toilette, Trinken und Lernen erweitert. Beim Spielen soll ein Minispiel entwickelt werden, welches mit Hilfe das Touchscreen gesteuert wird und dem User auch auf längere Zeit nicht langweilt. Bei der Aktion Lernen wäre es sinnvoll, auch den User zu fordern, z.B. in einem Gedächtnisspiel oder Wissensquiz. Weiterhin soll die Möglichkeit gegeben werden das Zimmer des virtuellen Haustieres zu verändern und neu auszustatten, wie z.B. andere Tapete oder neue Gegenstände kaufen. Zur Verbesserung der Spielqualität sollte die KI und Vergebung der Attributpunkte noch genauer überprüft bzw. verfeinert werden. Die Eignung des Spiels sollte danach mit einem Usabilitytest überprüft und gegebenenfalls Fehler entfernt werden. Ebenfalls muss das Menü erweitert werden um eine genaue Hilfeanleitung sowie Einstellungsmöglichkeiten, wie z.B. die Sprache. Bisher fehlt auch Sound. Effekte und Aktionen wie das Duschen brauchen eine Soundunterlegung wie fließendes Wasser. Es wäre auch denkbar, dass das virtuelle Haustier Geräusche macht oder Laute von sich gibt. Im Bereich Effekt wird beim Duschen noch eine Wasseranimation eingefügt. Weitere Effekte und Animationen, um das Haustier realistischer und interessanter zu gestalten sind durchaus anzustreben. Das virtuelle Haustier sollte um weitere mögliche Wesen sowie deren Entwicklungsstufen erweitert werden. Die Fähigkeit des Wesens sich zu einer höheren Lebensform bei bestimmten Voraussetzungen, wie guter Pflege und nach Ablauf einer bestimmten Zeit, zu entwickeln, sollte ebenfalls implementiert werden. Die KI muss dementsprechend erweitert werden, dass das Haustier lernen kann. Dass es lernt, wann es etwas gut gemacht und eine Belohnung erhält, z.B. einen Snack. Wenn das Wesen dies gelernt hat, wird es Sachen, für die es belohnt wurde öfter machen, auch ohne darauffolgende Belohnung. Genauso soll man das Haustier bei schlechtem Verhalten disziplinieren können. Eine geeignete Methode ist das Bestärkende Lernen, wo die KI versucht ein System von Belohnung und Bestrafung für sich zu optimieren. Sobald ein stabiles und userfreundliches Spiel entstanden ist und alle Interaktionsmöglichkeiten implementiert wurden, gibt es weitere Möglichkeiten, das Spiel für die Nutzer auf lange Zeit interessant zu halten. Dazu im Folgenden ein mögliche Erweiterung. Denkbar wäre eine Online-Community, in der der User sein Wesen anderen Handybesitzer, die LittleLegends spielen, vorstellen und diese miteinander vergleichen kann. Möglich wäre eine Art Wettkampf zu entwickeln, in dem die Wesen der User gegeneinander in verschiedenen Disziplinen antreten. Die User könnten online neue Objekte, die neue Interaktionsmöglichleiten bieten, als Preis erhalten oder miteinander tauschen. Die Entwicklung des Wesens nicht nur durch gute Pflege, sondern auch durch das meistern verschiedener Aufgaben, wie bestimmte Spiele gewinnen oder Rätsel lösen ist eine weitere Idee. Hierbei kann auch die Community miteinbezogen werden. 44 9. Glossar 3D Abkürzung für dreidimensional 3dsMax 3D-Software von Autodesk, für 3D-Computergrafik API (für engl. application programming interface) Programmierschnittstelle C, C++ systemnahe Programmiersprachen CLDC (engl. Connected Limited Device Configuration) definiert die kleinstmöglichste Konfiguration einer J2ME-Laufzeitumgebung embedded Game vorinstalliertes Spiel Exporter wandelt Daten in ein gewünschtes Format um, Teil eines Programms Implementierung Umsetzung von Strukturen und Abläufen in einem System mit vorgegebenen Regeln und Zielvorgaben Instanz hier: Objekt, welches zur Laufzeit von einer Klasse erzeugt wird IPhone Smartphone von Apple mit Multi-Touch-Funktionalität Java objektorientierte Programmiersprache JavaME Java Micro Edition, oder auch J2ME, Programmiersprachen für mobile Geräte, basierend auf der Programmiersprache Java JSR-184 Java Specification Requests Nummer 184, Programmbibliothek, zuständig für die 3D-Unterstützung Klasse aus Klassen wird in der objekt-orientierten Programmierung Objekte erstellt Konverter wandelt Daten in ein anderes Format um, eigenständiges Tool 45 LWUIT Lightweight User Interface Toolkit, Programmbibliothek für JavaME für bessere Gestaltung der Benutzerschnittstelle. M3G Mobile 3D Graphics API, JavaME-Sepzifikation für 3D-Grafik M3G Converter Konverter von h3t-Dateien in das M3G-Format M3G-Toolkit Software-Packet von MascotCapsule, enthält den M3G Viewer und den M3G Converter M3G Viewer Programm zu Visualisierung von h3t- und M3G-Dateien Matrix rechteckige Anordnung von mathematischen Objekten Maya 3D-Software von Autodesk, für 3D-Computergrafik Mesh hier: 3D-Objekt aus Polygonen MIDlet in der Programmiersprache Java geschriebene Software für mobile Geräte, muss dem MIDP und CLDC entsprechen MIDP Mobile Information Device Profile, Profil von JavaME Multi-Touch Fähigkeit es Touchscreens, gleichzeitig mehrere Berührungen zu erkennen Nokia Telekommunikationskonzern, bekannt als weltgrößter Mobiltelefon-Hersteller OpenGL Open Graphics Library, Spezifikation für eine Programmierschnittstelle zur Entwicklung von 2Dund 3D-Computergrafik OpenGL ES Open Graphics Library for Embedded Systems, Spezifikation von OpenGL für den einsatz in ‘eingebetteten System’, z.B. Mobiltelefone Prototyp Versuchsmodell, Vorab-Version des geplanten Produktes RecordStore Datenbank eines MIDlets 46 rendern/Rendering Bildsynthese, Erzeugen eines Bildes aus Rohdaten Screen Bildschirm Simulationsspiel Spiele, die realitätsnahe Umgebungen und Verhaltensweisen erzeugen Tamagotchi jap. Elektronikspielzeug mit einem virtuellen Haustier Touchscreen Eingabegerät für PC oder mobile Geräte zum Bedienen durch Berührung des Bildschirms mit den Fingern oder einem Zeigestift Thread Teil eines Prozesses in einem laufenden Programm virtuelles Haustier elektronisches Wesen, um das sich der User kümmern muss ähnlich einem echten Tier Walkcycle Animation eines laufenden Charakters 47 10. Quellenangaben Print Lucka, Thomas: Mobile Games. Spieleprogrammierung für Handys mit JavaME. Hanser, 2008 Breymann Ulrich / Mosemann Heiko: JavaME. Anwendungsentwicklung für Handys, PDA und Co. 2. Auflage. Hanser: 2008 Online [Stand 01.01.2010] zu 4.1.Definition eines virtuellen Haustieres Wikipedia: Definition virtuelles Haustier http://en.wikipedia.org/wiki/Virtual_pets Nintendogs Homepage http://nintendogs.nintendo.de/ Tamagotchi Homepage http://www.tamagotchi.de/, http://www.tamagotchi.com/ Neopets Homepage http://www.neopets.com/ Marapets Homepage http://www.marapets.com/ http://www.marapets.com/marapets.php Mein eigenes Tierheim (PC) http://images.amazon.com/images/G/03/software/features/0DUIbeduerfnissegr.jpg zu 4.2.Bekannte Spiele mit virtuellen Haustieren Wikipedia: Definition Tamagotchi vgl. http://de.wikipedia.org/wiki/Tamagotchi Bilder eines Tamagotchi http://www.timboucher.com/journal/wp-content/uploads/2009/01/tamagotchi.jpg http://www.ubergizmo.com/photos/2008/9/color-tamagotchi.jpg Bilder von IPuppy http://appshopper.com/games/ipuppy-schnauzer http://appshopper.com/games/ipuppy-husky http://appshopper.com/games/ipuppy-2 http://www.iphonediario.com/noticias/303315673screen.jpg http://images.appshopper.com/screenshots/291/068226.jp Nintendogs http://nintendogs.nintendo.de/ http://images.businessweek.com/ss/05/11/miyamoto/image/nintendogs.jpg 48 zu 8.1.1. Methoden M3G Toolkit http://www.mascotcapsule.com/toolkit/m3g/en/index.php zu 8.2.1. Recherche und Vergleich von Methoden Bild: Logo OpenGL ES http://www.khronos.org/opengles/images/opengles_75px.png Wikipedia: Definition OpnegGL ES http://de.wikipedia.org/wiki/OpenGL_ES Wikipedia: Definition Mobile 3D Graphics API http://en.wikipedia.org/wiki/Mobile_3D_Graphics_API zu 8.2.3. KI und Datensicherung Bild: Uhr http://picture.yatego.com/images/3ef727e15b1151.0/eki-clock-uhr-galery.jpg 49 Eidesstattliche Erklärung Hiermit versichere ich, dass ich die vorliegende Arbeit selbstständig verfasst und keine anderen als die angegebenen Quellen und Hilfsmittel verwendet habe und dass die Arbeit in gleicher oder ähnlicher Form noch keiner anderen Prüfungsbehörde vorgelegen hat. Alle Ausführungen, die wörtlich oder sinngemäß übernommen wurden, sind als solche gekennzeichnet. Untermeitingen, den 10.02.2010