SS 2.0, März - Juni 2010

Peter Rautek, Tutor: Michael Hanzl (send mail)

Ablauf

Im Rahmen des Übungsteils soll in 2er Gruppen ein Level für ein gemeinsames Computerspiel implementiert werden. Die Implementierung läuft in drei Phasen ab:
  • Phase I - Entwurf und Setup: Sie setzen die Entwicklungsumgebung auf, entwerfen ihr Level und integrieren eine Kurzanleitung Ihres Spiels in das gemeinsame Framework. Am Ende dieser Phase haben Sie einfache Kenntnisse über Android Entwicklung gewonnen, sich mit dem VL Framework vertraut gemacht und haben ein Skelett Ihres Levels integriert. Die erste Abgabe schließt die Phase I ab und dient gleichzeitig als Anmeldung.
  • Phase II - Implementierung: Sie implementieren ihr Level und setzen das entworfene Gameplay mit rudimentärer Graphik um. Am Ende dieser Phase ist ihr Level bereits spielbar (aber noch nicht unbedingt ansprechend gestaltet). Sie besprechen ihr Level im Rahmen eines Zwischengesprächs mit der Übungsleitung.
  • Phase III - Polishing & Testing: Sie verbessern ihr Level im Hinblick auf Graphik und Sound und testen es. Tests sollen auch mit Bekannten und Freunden durchgeführt werden. Am Ende dieser Phase haben Sie ein nettes kleines Level implementiert, das gut spielbar ist und nahtlos in das VL Framework integriert ist. Die dritte (und letzte) Abgabe wird in einem Abgabegespräch evaluiert.

Aufgabenstellung

Im Rahmen der VL sollen Sie in 2er Gruppen ein Level für ein gemeinsames Spiel entwerfen, implementieren, testen und in das VL Framework integrieren. Die Mindestanforderungen an Ihre Abgabe sind:
  • Einfachheit: Ihr Level ist selbsterklärend und kann ohne Vorwissen gespielt werden.
  • OpenGL ES: Ihr Level verwendet für das gesamte oder zumindest den wesentlichsten Teil des Gameplay OpenGL ES
  • Integration in das Gameplay: Ihr Level dauert ein bis maximal zwei Minuten und gibt, wenn es beendet wurde, den Fortschritt, den der Spieler erzielt hat zurück (1-100).
  • Integration in das VL Framework: Das Level arbeitet korrekt mit dem VL Framework zusammen
  • Integration in das Android Framework: Das Level implementiert korrektes Lifecycle Management
  • Creative Commons: Alle verwendeten Komponenten (Musik, Texturen, 3D Modelle, etc.) Ihres Levels sind selbst erstellt, stehen unter der CC Lizenz oder werden erlaubterweise (vom Autor ausdrücklich und nachweislich erlaubt) verwendet.

Das Spiel

Das Spiel trägt den kurzen wie einprägsamen Arbeitstitel "The Big Incredibly Funny Inverse Treasure Hunt 2.0 with 30% more Fun - For Free" (kurz werden wir es "Das Spiel" nennen) und ist wie nicht schwer zu erraten ist eine "inverse Schatzsuche" (also ein Spiel, bei dem man an unvorhergesehenen Orten oder bei seltsamen Gelegenheit Schätze/Gold verlieren, verlegen, ausgeben, etc. muss). Ziel des Spiels ist es also einen Schatz zu verlieren (Besitz beschränkt ja bekanntlich). Der Spieler muss sich dazu durch sechs Levels spielen, die auf einer Landkarte eingezeichnet sind. Am Anfang kann nur ein Level gespielt werden. Durch Punkte, die in diesem Level (durch das Verlieren von Gold) erworben werden, kann sich der Spieler auf der Karte fortbewegen und nach und nach neue Levels freispielen. Ein einmal freigespieltes Level kann beliebig oft gespielt werden, um weitere Punkte zu bekommen. Jedes Level sollte nur ein bis maximal zwei Minuten dauern. Das Spiel ist zu Ende, wenn der Spieler sich durch die Landkarte gespielt hat und all sein Gold verloren hat.

Framework

Das Framework stellt einfache Funktionen zur Verfügung, die die Koordination der einzelnen Levels übernehmen. Am Anfang werden aus dem Pool von vorhandenen Levels sechs Stück ausgewählt, die der Spieler durchspielen muss um das Spiel zu gewinnen. Das Framework startet die einzelnen Levels mittels eines (in Android gebräuchlichen Konzepts, dem) Intent. Jedes Level kann beliebig oft gespielt werden und muss als Ergebnis immer eine Zahl zwischen 0 und 100 an das Framework zurückliefern. Pro 100 Punkten wird ein neues Level freigeschaltet, welches ab dann ebenfalls beliebig oft gespielt werden kann.
Das Framework stellt außerdem noch Hilfe, Credits, und andere Menüpunkte zur Verfügung.

Anleitung Phase I

  1. Setzen Sie Ihre Entwicklungsumgebung auf (Einzelaufgabe):
    Sie können sowohl auf Linux, Mac, als auch Windows entwickeln.
    • Machen Sie sich mit Android vertraut: Schauen Sie sich dazu die Informationen auf der Android Developer Seite an.
    • Installieren Sie Android: Ein guter Ausgangspunkt dafür ist Google's Installationsseite. Wir empfehlen sehr die Eclipse Entwicklungsumgebung zu verwenden. Bitte achten Sie ganz genau auf die Version von Java, Eclipse und Android, die Sie (laut Google's Installationsanweisung) installieren sollen.
  2. Laden Sie den Source Code von "Treasure Hunt" herunter und probieren Sie das Framework aus (Einzelaufgabe):
    • Wenn Sie mit Version Control (hier im speziellen SVN) nicht vertraut sind, machen Sie sich damit kurz vertraut. SVN übernimmt alle Aufgaben, um die gemeinsame und gleichzeitige Entwicklung an unserem Spiel für alle Gruppen zu ermöglichen. Sie werden SVN verwenden, um den Source-Code des Frameworks herunterzuladen und dann ihr integriertes Level wieder hochzuladen.
    • Installieren Sie einen für ihr System passenden SVN client. Hier ein paar hilfreiche Links dazu:
    • Machen Sie ein SVN checkout von: http://cgmd2010.googlecode.com/svn/trunk/
    • Starten Sie das Framework im Emulator und machen Sie sich mit dem Source Code vertraut.
  3. Werden Sie Mitglied des Entwicklerteams von "Treasure Hunt" (Einzelaufgabe):
    • Legen Sie einen Google Account an und senden Sie Ihren Namen, Matrikelnummer, Studienkennzahl, Emailaddresse (Gmail) und den Namen ihres Gruppenkollegen an rautek#cg.tuwien.ac.at. Sie werden anschließend zu dem Projekt hinzugefügt und können dann den Source Code bearbeiten. Diese Email gilt noch nicht als Anmeldung zur VL! Um sich anzumelden müssen Sie alle Schritte der Phase I durchlaufen!
    • Wenn Sie zu der Gruppe der Entwickler hinzugefügt wurden, machen Sie erneut ein SVN checkout; diesmal von: https://cgmd2010.googlecode.com/svn/trunk
      Beachten Sie bitte, dass Ihr Google Code Passwort nicht Ihr Gmail Passwort ist. Sie finden Ihr Google Code Passwort im "Settings"-Tab Ihrer Profilseite.
  4. Entwerfen Sie ihr Level und beachten Sie dabei die folgenden Punkte (Gruppenaufgabe):
    • Ihr Level soll auf witzige Art und Weise dem Spieler die Möglichkeit geben einen Schatz/Gold zu verlieren. Der Spieler sollte in der Lage sein in ein bis zwei Minuten bei gutem Erfolg 100 Punkte zu machen. Der Spieler muss aber auch bei schlechterem Erfolg etwas Geld verlieren können. Ihr Level sollte also nicht nur die Zustände geschafft/versagt kennen, sondern auch einen teilweisen Erfolg kennen.
    • Das Level sollte nicht zu komplex sein. Erstens soll der Spieler es in sehr kurzer Zeit verstehen können und zweitens sollten Sie in kurzer Zeit in der Lage sein das Level zu implementieren. Einfaches aber witziges Gameplay ist also gefragt.
    • Sie sollten alle Ressourcen besitzen um das Level umzusetzen. Planen Sie nicht ein voll animiertes 3D Model, aufwendigen Sound, komplexe Modelle und Texturen, etc. wenn Sie dafür nicht die Ressourcen haben dieses umzusetzen. Halten Sie alle integralen Bestandteile Ihres Levels einfach!
    • Erstellen Sie eine Beschreibung von Ihrem Level. Die Beschreibung soll ausführlich sein, einen Überblick geben worum es in Ihrem Level geht und alle Details (Aufgabe, Gameplay, Interaktion, etc.) des Levels genau beschreiben. Beim Durchlesen der Beschreibung sollte klar werden wie und warum in Ihrem Level Gold verloren werden kann und wie die Bedienung und Interaktion funktioniert.
  5. Integrieren Sie ihr Level in das Framework (Gruppenaufgabe):
    • Holen Sie sich Ihre Level/Group ID: Um ihr Level im Framework zu integrieren ohne es mit anderen Gruppen kollidieren zu lassen brauchen Sie Ihre ID. Sie bekommen Ihre ID, wenn Sie Mitglied des Entwicklerteams (siehe voriger Punkt) geworden sind. Sollten Sie Ihre ID noch nicht haben senden Sie bitte eine Email an rautek#cg.tuwien.ac.at.
      Diese ID müssen Sie bei den Namen von Ressourcen (wie z.B., Bilder, Soundfiles, usw.), Layoutfiles, Values, etc. verwenden, in denen es ansonsten zu Konflikten kommen könnte (siehe "Beachten Sie Naming Conventions").
    • Legen Sie im Projekt ein neues Package mit dem Namen at.ac.tuwien.cg.cgmd.bifth2010.levelXX an, wobei XX für Ihre ID steht.
    • Legen Sie in Ihrem Package eine Activity namens HelpActivity an, die sich von der Activity Klasse ableitet.
    • Fügen Sie ein Layoutfile für Ihre HelpActivity hinzu. Beachten Sie dabei die Naming Conventions (siehe unten)! Integrieren Sie die Beschreibung Ihres Levels in die HelpActivity. Fügen Sie dazu nötige Layouts, TextViews, ImageViews, etc. in ihr Layoutfile hinzu.
    • Deklarieren Sie Ihre HelpActivity im AndroidManifest.xml file.
    • Beachten Sie die Naming Conventions: Android organisiert gewisse Files in einer vorgegebenen Ordnerstruktur. Da in der VL alle Gruppen an einem Projekt arbeiten, müssen wir eine Naming Convention einführen. Also wenn Sie zB. ein File icon.png für ihr Level benötigen müssen Sie es vorher umbenennen, da ansonsten jemand anders ebenfalls ein File namens icon.png verwenden könnte und ihr File dadurch überschreiben würde. Die Lösung für dieses Problem ist das Einhalten der folgenden Naming Convention: Sie müssen Ihre Files, Ressources, Ids, etc. mit lID_ ("kleines L" + Ihre Level/Gruppen ID + Unterstrich) prefixen (zB. l99_icon.png für das icon.png File der Gruppe 99). Beachten Sie, dass es nicht nötig ist Ihre Klassen, Methoden, Variablen, etc. umzubenennen (da diese bereits durch ihr Package eindeutig sind), sondern nur Ressourcen, die in gemeinsamen Strukturen existieren.
    • Machen Sie ein SVN commit damit alle anderen ihr Level sehen und ausprobieren können. Durch das commit wird ihr Code auch für die VL Leitung sichtbar und Sie gelten als angemeldet!

Anleitung Phase II

  1. Targeting und Localization: Das Spiel und damit auch Ihr Level wird mit dem Google Nexus One getestet und soll auf diesem problemlos laufen. Weiters wollen wir auch ältere Geräte unterstützen (für die sie aber nicht auf Hardware testen müssen). Als Konsequenz daraus müssen alle Levels für unterschiedliche Bildschirmauflösungen und Sprachen implementiert werden und mit den Android Versionen 1.6 und 2.1 getestet werden. Die default Auflösung wird 480x320 sein, die default Sprache Englisch! 
    • Android Version: Testen sie ihr Level zumindest für die Android Versionen 1.6 und 2.1. Um zwischen den Versionen in Eclipse umzuschalten können sie in ihrer Working Copy im Kontextmenü unter "Properties-Android-Project Build Target" die entsprechende Version einstellen.
    • Bildschirmauflösung: Ihr Level muss mindestens für die Auflösungen 800x480 und 480x320 funktionieren. Beachten Sie das bei der Implementierung Ihres Levels von Anfang an, um spätere Schwierigkeiten zu vermeiden! Drawables können in zwei verschiedenen Auflösungen bereitgestellt werden. Niedrigere Auflösung im Ordner res/drawables, höhere Auflösung im Ordner res/drawables-hdpi.
      Weitere Informationen dazu finden Sie auch im Android Developer Guide.
    • Sprache: Das Spiel soll auf Englisch und Deutsch veröffentlicht werden. Daher müssen Sie alle Texte (also Strings), Grafiken die Texte enthalten und Sounds die Sprache enthalten doppelt erstellen. Externalisieren Sie daher alle Strings (keine Strings im Source Code) und stellen sie die Strings in zwei Varianten zur Verfügung. Englisch (default) im Ordner res/values, Deutsch im Ordner res/values-de. Mehr Details über Localization unter Android können sie in der SDK Dokumentation finden (siehe hier und hier).
  2. Implementieren Sie einen Platzhalter für Ihr Level
    • LevelActivity: Ihre LevelActivity ist der Anknüpfungspunkt, der vom Framework aus gestartet wird. Sie müssen dazu Ihre Activity im AndroidManifest.xml File deklarieren (analog zu Level00 im Framework).
    • GLSurfaceView: Um 3D Grafik darstellen zu können, müssen Sie einen GLSurfaceView zu Ihrem Layout hinzufügen und einen Renderer implementieren.
    • Renderer: Implementieren Sie einen einfachen Renderer, der ein Dreieck oder etwas ähnlich einfaches darstellt. Diesen Renderer können Sie als Ausgangsbasis für die weitere Implementierung Ihres Levels verwenden.
  3. Mit dem Framework Interagieren
    • Icon: Erstellen Sie ein Icon, das Ihr Level repräsentiert. Das Icon muss in zwei Varianten (66x66 Pixel und 40x40 Pixel) abgegeben werden und nach den schon aus Phase I bekannten Naming Conventions mit lXX_icon.png (wobei XX für ihre Gruppen ID steht) benannt sein. Kopieren Sie das Icon mit der niedrigeren Auflösung in den "res/drawable" Ordner und das icon mit höherer Auflösung in den "res/drawable-hdpi" Ordner.
    • Return Werte: Um dem Framework Werte zu übergeben, die den Fortschritt des Benutzers anzeigen, sollten Sie die dafür vorgesehene Klasse SessionState verwenden (in der LevelActivity von Level 00 können Sie dazu ein Beispiel sehen).
    • Verwenden Sie die DebugActivity (EntryPoint), um Ihr Level und Ihre HelpActivtiy zu debuggen.
    • Dokumentation: Verwenden sie JavaDoc Kommentare! Das Spiel wird am Ende des Semesters OpenSource veröffentlicht. Eine Veröffentlichung macht allerdings nur Sinn, wenn der Code auch Dokumentiert ist! Die Dokumentation zählt zur Integration in das Framework und wird auch als solches in die Beurteilung einfließen.
  4. Implementieren Sie das Level
    • Funktionalität: Bis zum Ende von Phase II müssen Sie Ihr Level in einer Rohversion implementiert haben. Achten Sie dabei auf korrekte Zusammenarbeit mit dem VL-Framework und mit dem Android Framework (Persistence, LifeCycle, etc.) sowie auf die Funktionalität Ihres Levels.
    • Hardwaretests: Probieren Sie Ihr Level auf echter Hardware aus, um Inkonsistenzen von Anfang an zu vermeiden.
    • Zwischengespräch: Das Ende von Phase II bildet das Zwischengespräch. Hier bekommen Sie Feedback zu Ihrem Level und der Implementierung.
  5. Hardwaretests

Anleitung Phase III

In Phase III sollen sie Ihr Level optisch ansprechender gestalten und besser spielbar machen. Nachdem bessere Spielbarkeit nur erreicht werden kann, indem man so viele Leute wie möglich testen lässt, wird in Phase III der Fokus auf den Ablauf von Tests gelegt.
  1. Tests Vorbereiten
    Werten sie Ihr Level optisch und akkustisch auf. Wenn sie Ihr Level testen lassen wird viel Augenmerk auf die optische Umsetztung gelegt werden. Kleine Soundeffekte geben dem Benutzer/Tester zusaetzliches Feedback und erhöhen dadurch die Spielbarkeit und den Spielspass. Bis zum 2. FAQ Event haben sie Zeit ihr Level zu verbessern und auf Tests vorzubereiten. Ab dem FAQ Event wird Ihr Level von anderen Gruppen getestet um Ihnen wertvolles Feedback zukommen zu lassen. Lassen sie in dieser Zeit auch andere Personen (Freunde, Bekannte, und Verwandte) Ihr Level testen.
  2. Peer Reviewing (Einzelarbeit)
    Entnehmen sie bitte der Tabelle zur Zuweisung eines Levels, welches Level sie zu testen haben. Ab dem 2. FAQ Event können sie das Ihnen zugewiesene Level auschecken und testen. Bitte geben sie ausschließlich konstruktives Feedback. Benutzen sie das vorgegebene Review Formular und legen sie eine Kopie davon an. Sie haben eine Woche Zeit zum Testen und das Review Formular auszufüllen. Geben sie das ausgefüllte Review Formular dann entweder öffentlich frei oder "sharen" sie es mit der Übungsleitung! Senden sie in jedem Fall zusätzlich eine Email an die Übungsleitung die den Link zum freigegebenen Formular beinhaltet.
  3. Umsetzen der Kommentare
    Nutzen sie die verbleibende Zeit um auf das erhaltene Feedback zu reagieren und letzte Änderungen durchzuführen.
  4. Finishing und Abgabe
    • Beachten sie alle angegebenen Vorraussetzungen zur Abgabe (Internationalization, Screen Redolution, Android Versions 1.6 und 2.1, etc.)
    • Entfernen sie unnötige files (log files, backup files, andere unnötige files) aus dem Applikationsprojekt.
    • Entfernen oder deaktivieren sie alle Log messages!
    • Finalisieren sie die Dokumentation des Source Code.
  5. Präsentation und CGMD-Contest
    • Bereiten sie einige Folien zu ihrem Level vor. Sie haben genau 3 Minuten Zeit um das Level so ansprechend wie möglich zu präsentieren. Erklären sie die Story ihres Levels und wie es gespielt wird. Berichten sie über Ideen und Features die in ihrem Level stecken (und solche die es nicht in die Endversion geschafft haben).
    • Bereiten sie zusätzlich zur Präsentation einen Screenshot ihres Levels vor Um die Screenshots mit dem Android Market kompatibel zu machen müssen sie folgenden Ansprüchen genügen: 320w x 480h or 480w x 854h 24 bit PNG or JPEG (no alpha), no border, (Landscape thumbnails are cropped!).
    • Senden sie bis am Tag der Präsentation 8:00 (in der Früh), die Präsentationen und den Screenshot unter Angabe ihrer Gruppennummer an rautek#cg.tuwien.ac.at.
    • Nach den Präsentationen kann jeder Teilnehmer Punkte für die besten 6 Levels abgeben. Aus allen Votings werden dann die Sieger des CGMD-Contests ermittelt.