<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Zeitalter3 - Browsergames Entwicklerblog</title>
	<atom:link href="http://blog.zeitalter3.de/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zeitalter3.de</link>
	<description>Ein Blog über persistente Browsergames und deren Entstehung</description>
	<lastBuildDate>Mon, 08 Mar 2010 06:06:22 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>de</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Datenhaltung mit gamedata.class.php</title>
		<link>http://blog.zeitalter3.de/2010/02/16/datenhaltung-mit-gamedata-class-php/</link>
		<comments>http://blog.zeitalter3.de/2010/02/16/datenhaltung-mit-gamedata-class-php/#comments</comments>
		<pubDate>Tue, 16 Feb 2010 17:49:34 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Zeitgeist-Framework]]></category>
		<category><![CDATA[Entity Systeme]]></category>
		<category><![CDATA[Patterns]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Zeitgeist]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=740</guid>
		<description><![CDATA[In meinem Artikel über das Zeitgeist Gamesystem-Modul habe ich etwas mehr über die Klasse zur Datenhaltung (gamedata.class.php) geschrieben. Diese ist in Zeitgeist angelehnt an die Datenhaltung eines Entity-Systems. In den Kommentaren wurde mir von Gameplorer folgende Frage zu dem Prinzip gestellt:
Wie gut eignet sich das tatsächlich für Browsergames? Durch die component_data_N – Tabellen ist es ja nicht [...]]]></description>
			<content:encoded><![CDATA[<p>In meinem Artikel über das <a href="http://blog.zeitalter3.de/2010/02/13/das-gamesystem-modul" target="_blank">Zeitgeist Gamesystem-Modul</a> habe ich etwas mehr über die Klasse zur Datenhaltung (<a href="http://code.google.com/p/zeitgeist-framework/source/browse/framework/trunk/modules/gamesystem/gamedata.class.php" target="_blank">gamedata.class.php</a>) geschrieben. Diese ist in Zeitgeist angelehnt an die <a href="http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/" target="_blank">Datenhaltung eines Entity-Systems</a>. In den Kommentaren wurde mir von <a href="http://www.gameplorer.de/" target="_blank">Gameplorer</a> folgende Frage zu dem Prinzip gestellt:</p>
<blockquote><p><em>Wie gut eignet sich das tatsächlich für Browsergames? Durch die component_data_N – Tabellen ist es ja nicht mehr möglich, effektiv mit Joins zu arbeiten. Dadurch muss ich aber pro Entity zig Queries absetzen (jede component_data – Tabelle) was auf die Performance schlägt. Für z.B. einen Kampf müssten dann auch noch mehrere Entities geladen werden. Das klingt für mich nach einem absoluten NoGo in einem Browsergame.<br />
Mir kam die Artikelreihe daher eher vor, als wäre ES für Clientbasierte-Spiele ausgelegt.</em></p></blockquote>
<p>Das ist eine gute Frage, da sie auf einem vebreiten Mißverständnis beruht wie Entity Systeme funktionieren. Es werden (wenn richtig implementiert) kaum Joins benötigt, da keine Notwendigkeit besteht die kompletten Entites zu laden (geschweige denn mehrere). Das Missverständnis beruht wohl auf dem Versuch sich Entity Systeme wie klassisch objektorientierte Systeme vorzustellen, in denen das System über die Objektklassen immer (mehr oder weniger direkten) Zugriff auf alle Daten des Objekts hat. Mir ging es nicht anders und ich brauchte einige Anläufe, um mich davon zu lösen.</p>
<p>Hier also mein Versuch zu erklären, wie ich Entity Systeme verstehe und wie sie in Zeitgeist implementiert wurden.</p>
<p><span id="more-740"></span></p>
<p><strong>Ein simples Weltraum-Spiel</strong></p>
<p>Da man anhand von Beispielen immer besser erklären kann, nehmen wir einmal ein einfaches Weltraum-Spiel mit folgenden Eigenschaften:</p>
<ul>
<li>Ein Spieler hat ein oder mehrere Raumschiffe</li>
<li>Es gibt 3 Raumschifftypen: leicht, mittel, schwer</li>
<li>Ein Raumschiff hat eine gewisse Panzerung, entsprechend den Typen: leicht, mittel und schwer (vergleichbar mit Lebenspunkten: wenig, mittel und viel)</li>
<li>Ein Raumschiff hat eine festgelegte Waffe, entsprechend den Typen: leicht, mittel und schwer (vergleichbar Angriffskraft: wenig, mittel und viel)</li>
<li>Ein Raumschiff fliegt durch das Universum</li>
<li>Ein Raumschiff kann gegen ein anderes Raumschiff kämpfen</li>
<li>Ein Raumschiff noch in Raumstationen fliegen, wo es sich reparieren lassen kann</li>
<li>Angedockte Raumschiffe können nicht angegriffen werden</li>
</ul>
<p>Was würde für so ein Spiel also an Daten benötigt? Zunächst einmal die Raumschiff-Daten: Welcher Spieler besitzt welches Raumschiff? An welcher Position befindet sich das Raumschiff? Wie viel Waffenschaden und Panzerung hat es noch und so weiter. Dazu kommen noch die Daten für die Objekte im Raum: Raumstationen und deren Position.</p>
<p>Um die Unterschiede klar zu machen folgt nun eine beispielhafte objektorientierte und komponentenbasierte Umsetzung. Beide Varianten kann (und sollte) man sicherlich auch anders implementieren, aber dies soll nur als Veranschaulichung dienen.</p>
<p><strong>Objektorientierter Ansatz</strong></p>
<p>Der objektorientierte Ansatz sieht die Welt durch eine Ansammlung von Objektklassen, welche jeweils einen Typ von Gegenstand in der Welt repräsentieren. Deren Methoden sind die Aktionen, welche dieser Typ Gegenstand durchführen kann.</p>
<p>In unserem Beispiel gäbe es üblicherweise eine Objektklasse für Raumschiffe. Wie definiert hat ein Raumschiff einen Besitzer, eine Panzerung und Waffe, sowie eine Position im Raum. Außerdem kann es gerade fliegen oder an einer Raumstation angedockt sein. Daneben gäbe es wahrscheinlich eine Klasse für Raumstationen, die jedoch nichts weiter tun, als auf einer Position zu verharren.</p>
<p>Die Daten werden in Tabellen gespeichert, welche mehr oder minder den Objektstrukturen ähneln. In der Realität mag es mehr Streuung durch <a href="http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)" target="_blank">Normalisierung</a> geben, aber im Großen und Ganzen sähen die Tabellen für unser Beispiel so aus:</p>
<ul>
<li>Tabelle 1: Raumschiff (Besitzer, Panzerung, Waffenschaden, Position, Angedockt)</li>
<li>Tabelle 2: Raumstationen (Position)</li>
</ul>
<p>Spieler sind im Besitz eines Raumschiffs, sobald dieses in der Tabelle Raumschiff eingetragen ist.</p>
<p>Die eigentlichen Raumschiffe der Spieler und Raumstationen in der Spielwelt wären Instanzen ihrer entsprechenden Objektklassen. Das System initialisiert die Instanz eines spezifischen Raumschiffs mit den entsprechenden Daten aus der Tabelle.</p>
<p>Neben den Daten verfügt eine Objektklasse über Methoden, welche die Daten der jeweiligen Instanz (und damit des Raumschiffs bzw. der Raumstation) verändern. Als Beispiel für die Raumschiffklasse:</p>
<ul>
<li>Raumschiff.bewegen(x,y,z): verändert die Position des Raumschiffs</li>
<li>Raumschiff.angreifen(RaumschiffID): greift das Raumschiff mit der gegebenen ID an</li>
<li>Raumschiff.andocken(RaumstationID): dockt das Raumschiff an die Raumstation mit der gegebenen ID an</li>
<li>..</li>
</ul>
<p>So weit die kleine Wiederholung von <a href="http://de.wikipedia.org/wiki/Objektorientierte_Programmierung" target="_blank">objektorientierter Programmierung</a>.</p>
<p><strong>Komponentenbasierte Datenhaltung</strong></p>
<p>Der komponentenbasierte Ansatz sieht die Welt durch eine Sammlung von <em>Komponenten</em> und <em>Entitäten</em>. Zunächst einmal die Erklärung, was diese eigentlich sind:</p>
<ul>
<li>Eine Komponente beschreibt eine Eigenschaft, die ein Gegenstand haben kann</li>
<li>Eine Entität repräsentiert einen dedizierten Gegenstand in der Welt</li>
<li>Eine Entität besteht aus einer oder mehreren Komponenten</li>
</ul>
<p>An dem Beispiel können diese Definitionen vielleicht besser veranschaulicht werden. Mit folgenden Komponenten (Eigenschaften) können alle Gegenstände unserer fiktiven Spielwelt abgebildet werden (in Klammern steht jeweils der Wert, mit dem eine Eigenschaft bemessen werden kann):</p>
<ul>
<li>Komponente 1: Ein Gegenstand kann eine Waffe haben (Angriffsschaden)</li>
<li>Komponente 2: Ein Gegenstand kann gepanzert sein (Panzerungswert)</li>
<li>Komponente 3: Ein Gegenstand kann eine Position haben (x/y/z)</li>
<li>Komponente 4: Ein Gegenstand kann einen Besitzer haben (SpielerID)</li>
<li>Komponente 5: Ein Gegenstand kann beweglich sein (j/n)</li>
<li>Komponente 6: Ein Gegenstand kann angreifbar sein (j/n)</li>
<li>Komponente 7: Ein Gegenstand kann andere Gegenstände reparieren (j/n)</li>
</ul>
<p>Nehmen wir nun einmal irgendein Raumschiff. Dieses hätte folgende Komponenten: Waffe, Panzerung, Position, Besitzer, istBeweglich, istAngreifbar. Eine Raumstation hingegen hätte nur folgende Komponenten: Position, kannReparieren. Diese Typen von Entities sind <em>Assemblages </em>- eigentlich nur Sammlungen von Komponenten, die einen bestimmten Typ von Gegenstand ausmachen.</p>
<p>Der nächste Schritt ist leicht &#8211; jede Komponente bekommt eine Tabelle in der Datenbank. Dazu noch eine für die Entities, sowie eine Tabelle, um die Verbindung zwischen einer Entity und ihren Komponenten herzustellen:</p>
<ul>
<li>Tabelle 1: Entities(ID)</li>
<li>Tabelle 2: Entities_zu_Komponenten(Entity, Komponente)</li>
<li>Tabelle 3: Komponente 1 &#8211; Waffe (Angriffsschaden)</li>
<li>Tabelle 4: Komponente 2 &#8211; Panzerung (Panzerungswert)</li>
<li>Tabelle 5: Komponente 3 &#8211; Position (x/y/z)</li>
<li>Tabelle 6: Komponente 4 &#8211; Besitzer (Spieler_ID)</li>
<li>Tabelle 7: Komponente 5 &#8211; istBeweglich (j/n)</li>
<li>Tabelle 8: Komponente 6 &#8211; istAngreifbar (j/n)</li>
<li>Tabelle 8: Komponente 7 &#8211; kannReparieren (j/n)</li>
</ul>
<p>Die Assemblages würden so aussehen:</p>
<ul>
<li>Assemblage 1: Raumschiff (Waffe, Panzerung, Position, Besitzer, istBeweglich, istAngreifbar)</li>
<li>Assemblage 2: Raumstation (Position, kannReparieren)</li>
</ul>
<p>Damit wurden nur Daten beschrieben &#8211; nirgendwo steckt ein Stück Interaktion. Im Gegensatz zum objektorientierten Ansatz, bei dem die Interaktion in den Methoden der Gegenstände selbst steckt, ist eine Entität oder eine Komponente völlig losgelöst von Methoden oder überhaupt Code. Wo also kommt die Interaktivität her?</p>
<p><strong>Entity Systeme</strong></p>
<p>Die Interaktivität kommt von den sogenannten Systemen. Objektorientierung geht davon aus, dass eine Methode für eine Objektklasse sich von den Methoden anderer Objektklassen unterscheidet. Das Komponentenmodell geht im Gegensatz dazu davon aus, dass die Interaktion die auf eine Komponente einwirkt unabhängig vom Gegenstands immer gleich ist. Ein Beispiel wäre die Komponente &#8220;Position&#8221;. Es ist unerheblich welcher Gegenstand eine Position hat, das Prinzip &#8220;Bewegung&#8221; ist für alle Gegenstände gleich: die Position ändert sich. Damit hat sich der Gegenstand bewegt. Dies gilt für Raumschiffe ebenso wie für Rennautos, Flugzeuge oder Fußbälle.</p>
<p>Die Interaktion für Komponenten wird also in einzelnen, in sich abgeschlossenen Systemen gekapselt, die nur ihre jeweils relevante Komponente(n) bearbeiten. Alles andere interessiert sie nicht. Um einen Gegenstand zu bewegen ist es unerheblich wem er gehört oder wie er bewaffnet oder gepanzert ist. Das heißt nicht, dass diese Informationen in diesem Moment gänzlich unwichtig sind, aber dafür ist ein anderes System zuständig. Und deshalb laufen alle Systeme möglichst parallel.</p>
<p><strong>Auswirkung 1: Komponentensicht = Flexibilität</strong></p>
<p>In jedem Browsergame findet der Großteil der Entwicklung nach dem Launch statt. Bugfixing macht davon nur einen kleinen Teil aus. Früher oder später muss man am Balancing nachdrehen und in mehr oder weniger regelmäßigen Abständen wird es Erweiterungen geben: neue Einheiten, neue Regeln, neue Features, neue Dinge zu entdecken.</p>
<p>Nehmen wir unser Beispiel. Angenommen Spieler sollen auch Raumstationen besitzen können. Andere Spieler können diese natürlich zerstören. In einem objektorientierten Umfeld würde ich jetzt anfangen die Klasse der Raumstation zu erweitern. Bei einem Komponentensystem würde ich die Komponente &#8220;Besitzer&#8221; und &#8220;istAngreifbar&#8221; der Assemblage der Raumstation hinzufügen. Done. Keine Codeänderung nötig.</p>
<p>Oder fügen wir die Raumschiffklasse &#8220;Trägerschiff&#8221; hinzu. Es soll eine Art großes Raumschiff sein, was wie eine bewegliche Raumstation agiert und andere Raumschiffe daran andocken können. Also, ich erstelle eine neue Klasse dafür und fange an zu programmieren. Oder aber ich erstelle eine neue Assemblage und füge die entsprechenden Komponenten hinzu (was Datenbankeinträge sind!).</p>
<p>Und jetzt stellen wir uns einen einfachen Einheiten-Editor vor, der einfach nur Assemblages erstellen und mit Komponenten verknüpfen kann.</p>
<p>Wenn ich denn tatsächlich mal eine neue Eigenschaft brauche, muss ich natürlich das entsprechende System entwickeln. Allerdings steht die Eigenschaft damit automatisch auch allen anderen Assemblages zur Verfügung.</p>
<p>Zugegeben, mit Mehrfachvererbung oder Interfaces kann man auch in klassisch objektorientierten Umgebungen so eine Flexibilität versuchen, aber ich würde es nicht empfehlen. Früher oder später läuft alles auf massive Superklassen hinaus, die nicht mehr pflegbar sind.</p>
<p><strong>Auswirkung 2: Kleine Systeme = Wartbarkeit</strong></p>
<p>Wenn jedes System nur eine (oder wenige) Komponente(n) bearbeitet, sind diese per Definition relativ überschaubar. Anstatt über die Klassen verteilt habe ich auch nur an einem dedizierten Punkt meine Logik: in den Systeme selbst. Ich muss auch nicht in jeder Klasse immer wieder die gleiche oder ähnliche Logik unterbringen oder mich mit Vererbung und Interfaces herumschlagen, um den Code aus den Klassen herauszuhalten. Ich habe einen zentralen Punkt, an dem ein abgegrenztes Set von Daten geändert wird.</p>
<p>Durch diese Abgrenzung sind die Systeme außerdem großartig testbar.</p>
<p><strong>Auswirkung 3: Spezialisierte Systeme = Performance</strong></p>
<p>Nehmen wir als Beispiel an in der Queue des Eventhandlers liegen Events zur Bewegung von Schiffen. Es existiert ein System für &#8220;Bewegung&#8221;, dessen Aufgabe die Bearbeitung dieser Events ist. Es schaut also in der Event-Tabelle nach: was muss bewegt werden und wohin?</p>
<p>Klassisch objektorientiert wäre das &#8220;was&#8221; die ID eines Raumschiffs, aus dem dann die Raumschiff-Instanz erzeugt wird. Instinktiv mag man dem &#8220;was&#8221; in einem Entity System die ID der Entity zuweisen. In diesem Fall müsste das System jedoch erst einmal die Entity-ID finden, dann die Zwischentabelle befragen wo in der Komponententabelle &#8220;Position&#8221; denn der dazugehörige Eintrag liegt. Und da sind wir wieder bei der eigentlichen Frage von Gameplorer: &#8220;Sind diese Joins nicht unperformant?&#8221; Antwort: ja, aber warum sollte ich sie überhaupt machen? Wieso wird nicht einfach die ID des Komponenteneintrags als &#8220;was&#8221; genutzt? Sobald das passiert ist reduziert sich die Aufgabe des Systems auf einfache Updates.</p>
<p>Und noch besser: wer sagt, dass ein System in meiner Applikation leben muss? Letztendlich fragt es die Datenbank ab (Event-Tabelle), um mit den Ergebnissen eine andere Tabelle zu aktualisieren (Conponent_Data_Position). Das alles kann man bequem in einer Stored Procedure erledigen.</p>
<p><strong>Auswirkung 4: Parallele Systeme = Skalierung</strong></p>
<p>Angenommen ich habe alle Systeme ausgelagert. Weiter angenommen ich merke, dass ein System viele Ressourcen frisst, wohingegen andere recht genügsam sind. Was hintert mich daran das anspruchsvolle System einfach auf einen eigenen Server zu verlegen? Solange es Zugang zur Datenbank hat ist alles fein.</p>
<p><strong>Was jetzt noch bleibt</strong></p>
<p>Neben den Systemen bleibt noch der Logik-Server. Dies ist der Haupt-Gameserver, den die Clients ansprechen. Etwas muss ja auch dafür sorgen, dass sich Nutzer anmelden können, die Spielregeln implementiert sind und der Eventhandler befüllt wird. Dadurch dass aber alle Vorgänge innerhalb der Spielwelt nun losgelöst sind beschränkt sich dieser aber auch auf diese Aufgaben, wird deutlich schlanker und dadurch auch performanter.</p>
<p>So, der Artikel is jetzt lang genug. Ich hoffe ich habe euch meine Vorstellung von Entity Systemen etwas näher erklären können. Wie <a href="http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/" target="_blank">schon erwähnt</a> gibt es viele Arten von Entity Systemen. Es würde mich freuen von euch zu hören, falls ihr eine Meinung zu dem Modell habt.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2010/02/16/datenhaltung-mit-gamedata-class-php/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Das Gamesystem-Modul</title>
		<link>http://blog.zeitalter3.de/2010/02/13/das-gamesystem-modul/</link>
		<comments>http://blog.zeitalter3.de/2010/02/13/das-gamesystem-modul/#comments</comments>
		<pubDate>Sat, 13 Feb 2010 10:22:46 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Zeitgeist-Framework]]></category>
		<category><![CDATA[Entity Systeme]]></category>
		<category><![CDATA[Gamestates]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[Zeitgeist]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=712</guid>
		<description><![CDATA[Zeitgeist hatte, obwohl als Framework für Spiele konzipiert, lange Zeit keine eigenen Funktionalitäten die speziell für Spiele ausgelegt sind. Wenn man genauer nachdenkt sind viele Anforderungen an ein PBBG genau die Selben wie für alle anderen Webanwendungen:

Verwaltung der Nutzer und deren Daten
Ein Eventhandler zur Ablaufsteuerung
Konfigurationsmanagement für die Applikation, Sprachen usw.
Sicherheit und Fehlerbehandlung

Doch welche Eigenschaften und [...]]]></description>
			<content:encoded><![CDATA[<p>Zeitgeist hatte, obwohl als Framework für Spiele konzipiert, lange Zeit keine eigenen Funktionalitäten die speziell für Spiele ausgelegt sind. Wenn man genauer nachdenkt sind viele Anforderungen an ein PBBG genau die Selben wie für alle anderen Webanwendungen:</p>
<ul>
<li>Verwaltung der Nutzer und deren Daten</li>
<li>Ein Eventhandler zur Ablaufsteuerung</li>
<li>Konfigurationsmanagement für die Applikation, Sprachen usw.</li>
<li>Sicherheit und Fehlerbehandlung</li>
</ul>
<p>Doch welche Eigenschaften und Funktionalitäten brauchen Spiele, die sich nicht aus einem allgemeinen Framework für Webapplikationen ergeben?</p>
<p><span id="more-712"></span></p>
<p><strong>Auf der Suche</strong></p>
<p>Am Anfang stand die Idee, dass Zeitgeist ein Framework speziell für Spiele sein sollte. Mit der Zeit wandelte es sich zu einem allgemeinen Framework für Webanwendungen und alle Abläufe für Spiele musste das Spiel selbst liefern. Nach 3 Spiele-Prototypen stellte ich jedoch fest, dass es Elemente gab, die in jedem Spiel vorkommen und somit genauso gut in ein generisches Modul für Spiele ausgelagert werden könnten.</p>
<p>Um zu bestimmen, was ein solches Spielsystem eigentlich können soll, muss man sich darüber im Klaren sein, was ein Spiel aus Sicht einer Applikation eigentlich ist. Ich habe lange hin und her gestrichen und kam schließlich auf folgende Definitionen:</p>
<ul>
<li>Jeder Benutzer mit einer Session ist ein potentieller Spieler</li>
<li>Jede Instanz der Applikation ist ein potentielles Spiel (<a href="http://www.raphkoster.com/2009/01/08/database-sharding-came-from-uo/" target="_blank">Sharding</a>)</li>
<li>Jedes Spiel hat Spieler</li>
<li>Jeder Spieler hat Metadaten, die seinen Zustand im Spiel beschreiben</li>
<li>Das Spiel an sich hat ebenfalls Metadaten, welche die Spielwelt definieren</li>
<li>Spieler agieren mit anderen Spielern und der Spielwelt durch das Spiel</li>
<li>Jede Interaktion mit dem Spiel wird durch eine Aktion abgebildet</li>
<li>Aktionen verändern die Metadaten der Spieler und der Spielwelt</li>
<li>Aktionen können sich unmittelbar oder zukünftig auswirken</li>
</ul>
<p>Das ergibt folgende Komponenten:</p>
<ul>
<li><strong>Aktionsverwaltung</strong>: Ein Eventhandler, der alle Aktionen verwaltet, die ein Spieler (oder Spiel) ausführen kann</li>
<li><strong>Datenhaltung</strong>: Ein System, welches alle Daten verwaltet, die einen Spieler oder die Spielwelt betreffen können</li>
</ul>
<p>Nun, auf den ersten Blick deckt sich die Aktionsverwaltung des Spiels mit der Ablaufsteuerung einer Webapplikation und die Datenhaltung ebenfalls. Brauchen wir wirklich alles nochmal, obwohl das Framework alles schon mitbringt?</p>
<p>Kurze Antwort: ja.</p>
<p><strong>Der Gamehandler</strong></p>
<p>Der Gamehandler besteht im Wesentlichen aus 2 Komponenten: einem Eventhandler, der hereinlaufende Aktionen verwaltet und einem Gamehandler, der die Aktionen auf die Logik mappt.</p>
<p>Eine Aktion des Eventhandlers hat folgende Parameter:</p>
<ul>
<li>Aktion: Eine ID für eine Aktion, die auf ein Stück Code gemapped werden kann</li>
<li>Parameter: Ein Parameter-Objekt, welches dem Aktionscode mitgegeben wird</li>
<li>Ausführungszeit: Der Zeitpunkt im Spiel, an dem die Aktion relevant wird</li>
<li>Spieler: Der Spieler, der die Aktion ausgeführt hat</li>
<li>Shard: Die ID des Shards, auf dem die Aktion ausgeführt wird</li>
<li>Zeitpunkt: Der Zeitpunkt, an dem die Aktion ausgeführt wurde</li>
</ul>
<p>Durch die Angabe des Shards wird ermöglicht, dass mehrere Spiele in einer Datenbank abgelegt werden können. Dies ist unabhängig davon, ob die Spiele selbst auf einem oder mehreren Servern laufen. In einem typischen Aufbau-Strategie-PBBG ist es meistens so, dass viele Mitspieler in einem Spiel (bzw. einer Spielwelt) agieren. Bei Spielen mit einer kleinen, abgegrenzten Anzahl von Spielern pro Spiel (Bsp. Tic Tac Toe) laufen viele Spiele gleichzeitig nebeneinander. Solange für jeden Spieler die ID seines eigenen Spiels mitgegeben wird, lassen sich die Daten sauber trennen.</p>
<p>Der Gamehandler mappt die vom Eventhandler aufgenommenen Aktionen auf Klassenobjekte. Jede Aktion steht also für eine externe Klasse, welche für die eigentliche Logik hinter der Aktion sorgt. Was dort dann genau passiert ist nicht mehr Sache des Gamehandlers. Er reicht nur alle relevanten Aktionen für einen gegebenen Zeitpunkt, einen gegebenen Spieler und ein gegebenen Shard weiter.</p>
<p>Alternativ zu dem Gamehandler kann natürlich auch ein permanent laufender Application Server eingesetzt werden, der andauernd die Eventliste abarbeitet.</p>
<p><strong>Datenhaltung</strong></p>
<p>Die Datenhaltung muss für alle Spiele und alle Spieltypen passen. In der Theorie müsste sie also die Daten eines typischen Aufbau-Strategie-PBBG genauso gut verwalten können, wie die einer Tic Tac Toe Plattform.</p>
<p>Das ist natürlich Unsinn. Eine spezialisierte Datenhaltung, die genau auf das Projekt zugeschnitten ist wird immer performanter, aber vor allem auch lesbarer sein, als eine generische. Aber: eine solche spezialisierte Datenhaltung zu entwickeln kostet Zeit. Bei einem Tic Tac Toe mag der Zeitaufwand sehr gering sein, aber man wird schnell an die Grenze stoßen, wo man überlegen muss, ob es sich tatsächlich lohnt sofort auf eine performante Datenhaltung zu optimieren, oder ob nicht erst einmal eine generische genügt.</p>
<p>Aber gibt es Datenstrukturen bzw. Ansätze, mit denen man so unterschiedliche Anforderungen abdecken kann? Antwort: ja, gibt es. Es ist nicht so, als hätte die Spieleindustrie nicht schon lange an dem Problem zu knabbern. Deren Antwort lautet: <a href="http://t-machine.org/index.php/2007/09/03/entity-systems-are-the-future-of-mmog-development-part-1/" target="_blank">Entity Systeme</a>.</p>
<p>Die Gamedata-Klasse nimmt sich die <a href="http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/" target="_blank">Datenhaltung eines Entity Systems</a> zum Vorbild und implementiert diese in PHP. Für Details und Erklärungen der Funktionsweise verweise ich auf den <a href="http://t-machine.org/index.php/2009/10/26/entity-systems-are-the-future-of-mmos-part-5/" target="_blank">Artikel</a>, der das so wie so viel besser erklärt, als ich hier in Kürze könnte.</p>
<p>Im Einzelfall muss aber jeder selbst entscheiden, ob er diese nutzt, oder ob es sinnvoller ist die Datenhaltung speziell für das Spiel zu entwickeln.</p>
<p><strong>In Aktion</strong></p>
<p>Die letzten beiden Versionen der Spiele-Prototypen wurden mit dem <a href="http://code.google.com/p/zeitgeist-framework/source/browse/#svn/framework/trunk/modules/gamesystem" target="_blank">neuen System</a> umgesetzt und ich bin ziemlich zufrieden. Ich werde mich bemühen in den kommenden Wochen ein kleines Spielchen damit (möglichst sauber) zu entwickeln und als Beispiel ins SVN aufzunehmen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2010/02/13/das-gamesystem-modul/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Zeitgeist-Update</title>
		<link>http://blog.zeitalter3.de/2010/02/09/zeitgeist-update/</link>
		<comments>http://blog.zeitalter3.de/2010/02/09/zeitgeist-update/#comments</comments>
		<pubDate>Tue, 09 Feb 2010 15:56:05 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Zeitgeist-Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[projekte]]></category>
		<category><![CDATA[Zeitgeist]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=731</guid>
		<description><![CDATA[Die Arbeiten an der Dokumentation von Zeitgeist gehen weiter. Wichtiger jedoch: inzwischen gibt es einfache Downloads von den Beispielen inklusive des Frameworks, so dass ein Hin- und Herkopieren von Dateien (das auch nicht besonders gut beschrieben wurde bisher) entfällt.
Kurz: die Downloads runterladen, der Readme folgen, schon hat man funktionierende Zeitgeist-Beispiele.
]]></description>
			<content:encoded><![CDATA[<p>Die Arbeiten an der Dokumentation von Zeitgeist gehen weiter. Wichtiger jedoch: inzwischen gibt es einfache Downloads von den Beispielen inklusive des Frameworks, so dass ein Hin- und Herkopieren von Dateien (das auch nicht besonders gut beschrieben wurde bisher) entfällt.</p>
<p>Kurz: die <a href="http://code.google.com/p/zeitgeist-framework/downloads/list">Downloads</a> runterladen, der Readme folgen, schon hat man funktionierende Zeitgeist-Beispiele.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2010/02/09/zeitgeist-update/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Zeitgeist ist da</title>
		<link>http://blog.zeitalter3.de/2010/02/05/zeitgeist-ist-da/</link>
		<comments>http://blog.zeitalter3.de/2010/02/05/zeitgeist-ist-da/#comments</comments>
		<pubDate>Fri, 05 Feb 2010 21:32:16 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Programmierung]]></category>
		<category><![CDATA[Zeitgeist-Framework]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[projekte]]></category>
		<category><![CDATA[Zeitgeist]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=718</guid>
		<description><![CDATA[Also eigentlich missfällt es mir ein unfert..
Ein berühmtes Zitat von Reid Hoffman, dem Gründer von LinkedIn, lautet:
If you are not embarrassed by the first version of your product, you’ve launched too late.
Entsprechend dieser Regel veröffentlichen wir hiermit das Zeitgeist Framework.
Gehostet wird das Projekt von Google Code und ist unter folgenden URLs zu erreichen:

http://zeitgeist-framework.googlecode.com/
http://www.zeitgeist-framework.com/

Wie gesagt ist [...]]]></description>
			<content:encoded><![CDATA[<p><del datetime="2010-02-05T21:28:05+00:00">Also eigentlich missfällt es mir ein unfert..</del></p>
<p>Ein berühmtes Zitat von Reid Hoffman, dem Gründer von LinkedIn, lautet:</p>
<blockquote><p><em>If you are not embarrassed by the first version of your product, you’ve launched too late.</em></p></blockquote>
<p>Entsprechend dieser Regel <strong>veröffentlichen wir hiermit das Zeitgeist Framework</strong>.</p>
<p>Gehostet wird das Projekt von <a href="http://code.google.com/intl/de-DE/" target="_blank">Google Code</a> und ist unter folgenden URLs zu erreichen:</p>
<ul>
<li><a href="http://zeitgeist-framework.googlecode.com/" target="_blank">http://zeitgeist-framework.googlecode.com/</a></li>
<li><a href="http://www.zeitgeist-framework.com/" target="_blank">http://www.zeitgeist-framework.com/</a></li>
</ul>
<p>Wie gesagt ist das Framework nicht wirklich vollständig: es hat noch Fehler, einige Module sind noch nicht mit drin, die Tests laufen gerade mal wieder nicht durch, die Dokumentation ist löchrig,.. aber es funktioniert. Und das ist genau die richtige Zeit es zu veröffentlichen. Alles andere wird sich mit der Zeit schon ergeben.</p>
<p>Happy coding!</p>
<p>p.s. Wer in den Revisions ein wenig stöbert, könnte ganz interessante Dinge finden: Testprojekte, Prototypen, Konzepte und anderes unfertiges Zeug. Seht diese als spezielle Achievements an.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2010/02/05/zeitgeist-ist-da/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Vorsätze für 2010</title>
		<link>http://blog.zeitalter3.de/2010/01/03/vorsatze-fur-2010/</link>
		<comments>http://blog.zeitalter3.de/2010/01/03/vorsatze-fur-2010/#comments</comments>
		<pubDate>Sun, 03 Jan 2010 17:38:14 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Allgemein]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=696</guid>
		<description><![CDATA[Frohes neues Jahr 2010! 2009 war ein interessantes Jahr mit vielen tollen Entwicklungen, Technologien und erschienenen Spielen.Lasst uns 2010 zu einem noch besseren machen!
2010 beginnt mit einem lange überfälligem Redesign. Der Blog verliert nun auch optisch den Zusammenhang mit dem ursprünglich geplanten Spiel, welches wir Anfang 2008 jedoch auf Eis gelegt haben. Einzig der Titel [...]]]></description>
			<content:encoded><![CDATA[<p>Frohes neues Jahr 2010! 2009 war ein interessantes Jahr mit vielen tollen Entwicklungen, Technologien und erschienenen Spielen.Lasst uns 2010 zu einem noch besseren machen!</p>
<p>2010 beginnt mit einem lange überfälligem Redesign. Der Blog verliert nun auch optisch den Zusammenhang mit dem ursprünglich geplanten Spiel, welches wir Anfang 2008 jedoch <a href="http://blog.zeitalter3.de/2008/01/16/die-grenze-des-moglichen/" target="_self">auf Eis gelegt haben</a>. Einzig der Titel bleibt noch.</p>
<p>Natürlich bleibt auch der Inhalt &#8211; das Thema sind immer noch &#8220;Online-Spiele&#8221; und verwandte Themen: persistente browserbasierte Spiele, Game Design, Communitymanagement, Spieleentwicklung und deren Technologien.</p>
<p><strong>Vorsätze für 2009</strong></p>
<p>Zunächst einmal die <a href="http://blog.zeitalter3.de/2009/01/02/vorsatze-fur-2009/" target="_self">Vorsätze für 2009</a> unter der Lupe:</p>
<blockquote><p>Regelmäßiger Links mit interessanten Themen, die zur Zeit relevant sind (“kurz gebloggt”)</p></blockquote>
<ul>
<li>Die Rubrik &#8220;kurz gebloggt&#8221; wurde in den <a href="http://blog.zeitalter3.de/2009/02/04/kurz-gebloggt-ab-jetzt-in-tumblr/" target="_self">Zeitalter3 Tumblelog</a> überführt und ihr geht es seitdem prächtig. Daumen hoch.</li>
</ul>
<blockquote><p>Gelegentlich externe Inhalte einbinden, um für mehr Abwechslung zu sorgen (Interviews, Gastautoren, etc.)</p></blockquote>
<ul>
<li>Das ist leider nicht passiert. Kein Cookie.</li>
</ul>
<blockquote><p>Die Themen “Marketing” und “Mobiles” sollen mehr Aufmerksamkeit bekommen als bisher</p></blockquote>
<ul>
<li>Ein halber Daumen. Auch wenn hier wenig über Marketing und Mobile gesprochen wurde, hat sich <a href="http://dirk.songuer.de/" target="_blank">mein eigener Blog</a> in diese Richtung entwickelt. Das Gleiche gilt für das in den Kommentaren angesprochene Spielehilfe.</li>
</ul>
<p><strong>Vorsätze für 2010</strong></p>
<p>Hier die Vorsätze für das kommende Jahr:</p>
<ul>
<li>Nochmal: externe Inhalte einbinden, um für mehr Abwechslung zu sorgen (Interviews, Gastautoren, etc.). Ich denke es werden interessante Sachen dabei herauskommen.</li>
<li>Mehr Spielekonzepte veröffentlichen. Es macht Spaß sie zu entwickeln und euer Feedback ist immer interessant.</li>
<li>Das Zeitgeist-Framework vollständig veröffentlichen.</li>
<li>Das erstes Spiel basierend auf Zeitgeist veröffentlichen.</li>
</ul>
<p>Und auch dieses Jahr wieder die Aufforderung: Was denkt ihr? Vermisst ihr etwas oder habt ihr Themen, die ihr gerne aufgenommen sehen würdet? Habt ihr sonst etwas auf dem Herzen den Blog betreffend oder fühlt ihr euch sofort als Gastautor angesprochen? Lasst es uns in den Kommentaren wissen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2010/01/03/vorsatze-fur-2010/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Fröhliche Weihnachten!</title>
		<link>http://blog.zeitalter3.de/2009/12/24/frohliche-weihnachten/</link>
		<comments>http://blog.zeitalter3.de/2009/12/24/frohliche-weihnachten/#comments</comments>
		<pubDate>Thu, 24 Dec 2009 14:19:36 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Links]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[spiele]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=685</guid>
		<description><![CDATA[Fröhliche Weihnachten allerseits, frohe Feiertage für euch und eure Liebsten!

Und damit euch über die Feiertage nicht zu langweilig wird, hier einige alte und neue Perlen für den Zeitvertreib:

Achievement Unlocked &#8211; Ding, du hast es geschafft! Teil der Elefanten-Serie von jmtb02.
This is the Only Level &#8211; Es gibt nur ein Level, ok? Teil der Elefanten-Serie von jmtb02.
Obey [...]]]></description>
			<content:encoded><![CDATA[<p>Fröhliche Weihnachten allerseits, frohe Feiertage für euch und eure Liebsten!</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="500" height="404" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/uzpCodZsSGw&amp;hl=de_DE&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="500" height="404" src="http://www.youtube.com/v/uzpCodZsSGw&amp;hl=de_DE&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Und damit euch über die Feiertage nicht zu langweilig wird, hier einige alte und neue Perlen für den Zeitvertreib:</p>
<ul>
<li><a href="http://jmtb02.com/achievementunlocked/" target="_blank">Achievement Unlocked</a> &#8211; Ding, du hast es geschafft! Teil der Elefanten-Serie von <a href="http://jmtb02.com/games/" target="_blank">jmtb02</a>.</li>
<li><a href="http://armorgames.com/play/4309/this-is-the-only-level" target="_blank">This is the Only Level</a> &#8211; Es gibt nur ein Level, ok? Teil der Elefanten-Serie von <a href="http://jmtb02.com/games/" target="_blank">jmtb02</a>.</li>
<li><a href="http://armorgames.com/play/4987/obey-the-game" target="_blank">Obey the Game</a> &#8211; Gehorche, Mensch! Teil der Elefanten-Serie von <a href="http://jmtb02.com/games/" target="_blank">jmtb02</a>.</li>
<li><a href="http://www.rrrrthats5rs.com/games/dont-shoot-the-puppy/" target="_blank">Don&#8217;t shoot the Puppy</a> &#8211; So großartig, ooooh so großartig. Eine Lektion in Geduld und Vorsicht, vermengt mit einer Tonne Frustration.</li>
<li><a href="http://www.kongregate.com/games/Eggy/the-unfair-platformer" target="_blank">Unfair Platformer</a> &#8211; Einfach nur unfair. Das ideale Multiplayer-Spiel.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2009/12/24/frohliche-weihnachten/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Konzept: This Lovely City</title>
		<link>http://blog.zeitalter3.de/2009/11/15/konzept-this-lovely-city/</link>
		<comments>http://blog.zeitalter3.de/2009/11/15/konzept-this-lovely-city/#comments</comments>
		<pubDate>Sun, 15 Nov 2009 21:30:59 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Mobiles]]></category>
		<category><![CDATA[konzepte]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[multiplayer]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=682</guid>
		<description><![CDATA[Hier mal wieder ein high-level Konzept für ein Spiel, oder in diesem Fall: eine spielerische Plattform. Das Prinzip ist einfach: Man nehme Geocaching, füge ein Löffel voll Geotagging hinzu und verpacke das Ganze als soziales Spiel: fertig ist &#8220;This Lovely City&#8221;. Zugegeben, der Name wurde wurde von meiner aktuellen Playlist inspiriert.

Kurzvorstellung
Spieler können mit ihrem (GPS-fähigem) [...]]]></description>
			<content:encoded><![CDATA[<p>Hier mal wieder ein high-level Konzept für ein Spiel, oder in diesem Fall: eine spielerische Plattform. Das Prinzip ist einfach: Man nehme Geocaching, füge ein Löffel voll Geotagging hinzu und verpacke das Ganze als soziales Spiel: fertig ist &#8220;This Lovely City&#8221;. Zugegeben, der Name wurde wurde von meiner aktuellen <a href="http://www.lastfm.de/music/Fedde+le+Grand/_/Put+Your+Hands+Up+4+Detroit" target="_blank">Playlist inspiriert</a>.</p>
<p><span id="more-682"></span></p>
<p><strong>Kurzvorstellung</strong></p>
<p>Spieler können mit ihrem (GPS-fähigem) Mobiltelefon Fotos von markanten Orten aufnehmen. Zum Beispiel:</p>
<p><img class="alignnone" style="border: 1px solid black;" title="Irgendwo in Darmstadt" src="http://farm3.static.flickr.com/2484/3867454635_13c468a4c1.jpg" alt="" width="500" height="375" /></p>
<p>Anschließend laden sie das Foto mit den dazugehörigen Geokoordinaten zu This Lovely City hoch. Die Aufgabe der Mitspieler ist nun den abgebildeten Ort zu finden.</p>
<p><strong>Etwas ausführlicher</strong></p>
<p>This Lovely City besteht aus einer Webplattform, sowie einem mobilen Client. Spieler erstellen sich ein Profil, entweder auf der Webplattform oder direkt über den mobilen Client. Anschließend können sie sich auf die Suche nach Orten machen oder selbst Orte einstellen.</p>
<p>Die Webplattform dient nur zum Verwalten des Profils oder zur Pflege seiner getaggten Orte. Gespielt selbst wird mit dem mobilen Client auf dem Mobiltelefon.</p>
<p><strong>Orte suchen</strong></p>
<p>Der Spieler öffnet die App und kann sich &#8220;Orte in deiner Stadt&#8221; anzeigen lassen. Er sieht eine Liste mit Thumbnails, die alle Orte in der Stadt auflistet. Diese Liste kann er nach gewissen Kriterien filtern: Aktualität, Schwierigkeit, Tags, meist gefunden, meist kommentiert und so weiter.</p>
<p>Der Spieler kann einzelne Bilder auswählen und sieht diese dann in voller Auflösung. Dazu kann er sich die jeweiligen Tags und Kommentare anzeigen lassen.</p>
<p>Der Spieler hat als einziges Interface zu einem Ort einen &#8220;Bin ich schon da?!&#8221;-Button. Wenn der Spieler diesen betätigt, prüft die Applikation die aktuelle Position des Spielers gegen die des Ortes. Ist der Spieler an dem gesuchten Ort erhält er Glückwünsche und Punkte. Ist er nicht an dem gesuchten Ort erhält er je nach Entfernung eine Meldung: näher als 1km: &#8220;Warm!&#8221;, zwischen 1km und 3km: &#8220;Lau!&#8221;, weiter als 3km: &#8220;Kalt!&#8221;.</p>
<p>Ein Spieler erhält nur je einmal für einen Ort Punkte und auch nur, wenn er den Ort nicht selbst eingestellt hat.</p>
<p>Spieler können nur an dem jeweiligen Ort neue Kommentare und Tags dazu eintragen.</p>
<p><strong>Orte eintragen</strong></p>
<p>Spieler können innerhalb der Applikation Fotos machen. Diese Fotos können mit Hilfe einer Eingabemaske mit weiteren Metadaten versehen werden: Titel, Schwierigkeitsgrad, Tags und ein Kommentar. Die Geokoordinaten zieht sich die Applikation automatisch. Die Informationen lädt die Applikation zu This Lovely City hoch und der Ort kann ab da von anderen Spielern gesucht werden.</p>
<p>Jedes Mal, wenn der Ort von anderen Spielern gefunden wird, erhält der Spieler Punkte. Für hinterlassene Kommentare gibt es Extrapunkte.</p>
<p><strong>Metadaten von Orten</strong></p>
<ul>
<li>Titel, welcher von dem Ersteller für den Ort vergeben werden kann</li>
<li>Geokoordinaten, die von der mobilen Applikation selbst gezogen werden</li>
<li>Schwierigkeitsgrad, der von dem Einsteller und von anderen Spielern vergeben werden kann</li>
<li>Tags, die von dem Einsteller, wie auch von anderen Spielern eingetragen werden</li>
<li>Kommentare von Spielern</li>
</ul>
<p>Kommentare und Tags können von anderen Spielern als &#8220;Spoiler&#8221; markiert werden. Diese werden dann nur auf Nachfrage angezeigt.</p>
<p><strong>Spielerprofile</strong></p>
<p>Die Profile der Spieler zeigen sein Profil, seine eingestellten und besuchten Orte, sowie seine Punktzahl an.</p>
<p><strong>Mashups</strong></p>
<p>Der Spieler kann per Twitter und Facebook connect automatisch verkünden, wenn er einen Ort gefunden oder einen neuen Ort eingestellt hat.</p>
<p><strong>That&#8217;s it!</strong></p>
<p>Das ist es auch schon. Anregungen? Ideen? Lust das Ding umzusetzen? Schreibt es in die Kommentare.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2009/11/15/konzept-this-lovely-city/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Transmedia Gaming</title>
		<link>http://blog.zeitalter3.de/2009/11/02/transmedia-gaming/</link>
		<comments>http://blog.zeitalter3.de/2009/11/02/transmedia-gaming/#comments</comments>
		<pubDate>Mon, 02 Nov 2009 16:50:45 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Spieldesign]]></category>
		<category><![CDATA[Gaming]]></category>
		<category><![CDATA[konzepte]]></category>
		<category><![CDATA[transmedia]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=680</guid>
		<description><![CDATA[Wir gewöhnen uns langsam daran, dass es zu AAA Spielen als &#8220;Aufwärmer&#8221; manchmal kleine Flash-Spiele gibt. Aktuelles Beispiel aus dieser Reihe: Dragon Age Journeys. (Meines Wissens nach) Neu ist, dass man durch das Flash-Spiel Items in dem jetzt erscheinenden Dragon Age:Origins freischalten kann. Super!
Oder vielmehr: &#8220;Super, wieso nicht gleich so?&#8221;
Eigentlich eher: &#8220;Super, wieso funktioniert das [...]]]></description>
			<content:encoded><![CDATA[<p>Wir gewöhnen uns langsam daran, dass es zu AAA Spielen als &#8220;Aufwärmer&#8221; manchmal kleine Flash-Spiele gibt. Aktuelles Beispiel aus dieser Reihe: <a href="http://www.dragonagejourneys.com/" target="_blank">Dragon Age Journeys</a>. (Meines Wissens nach) Neu ist, dass man durch das Flash-Spiel Items in dem jetzt erscheinenden <a href="http://dragonage.bioware.com/" target="_blank">Dragon Age:Origins</a> freischalten kann. Super!</p>
<p>Oder vielmehr: &#8220;Super, wieso nicht gleich so?&#8221;</p>
<p>Eigentlich eher: &#8220;Super, wieso funktioniert das nicht in beide Richtungen? Und wieso gibt es nicht mehr Kanäle?&#8221;</p>
<p>In Wirklichkeit will ich nur mehr Zugänge in die Welt des Spiels: die Hyper Hooper Grafik-Erlebnisschlacht auf meiner PS3/XBOX360, eine nette Abwechslung und der übliche Grind im Browser und die üblichen Besorgungsquests für unterwegs auf meinem Mobiltelefon. Echtes <a href="http://portal.acm.org/citation.cfm?id=1255047.1255141&amp;coll=GUIDE&amp;dl=&amp;type=series&amp;idx=1255047&amp;part=Proceedings&amp;WantType=Proceedings&amp;title=ACM%20International%20Conference%20Proceeding%20Series" target="_blank">Transmedia Gaming</a> eben.</p>
<p>Es muss ja noch nicht mal Out of Context sein. Wieso kann ich den (realen) Gang ins Fitnessstudio nicht mit dem Training meines (virtuellen) Chars verbinden</p>
<p>Und warum kann ich die auf der PS3 mit meinem Charakter freigeschalteten Fähigkeiten nicht in dem Facebook-Spiel einsetzen? Wieso werden die Credits (Gold/Mühlsteine/..), die ich in dem Flashgame verdiene nicht meinem Char in dem AAA Game gutgeschrieben? Wieso gibt es überhaupt mehrere Chars und nicht nur einen? Es ist doch schließlich egal, auf welche Datenbank das Spiel nun zugreift.</p>
<p><em>Ich will einen Char in einer Welt und verschiedene Zugänge, die mir, je nach den Fähigkeiten des Zugangsmediums, sinnvolle Interaktionen mit der Spielwelt zu Verfügung stellen.</em></p>
<p><em></em>Noch Fragen?</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2009/11/02/transmedia-gaming/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Game Design &#8211; Konzeption eines fiktiven Strategiespiels</title>
		<link>http://blog.zeitalter3.de/2009/10/12/game-design-konzeption-eines-fiktiven-strategiespiels/</link>
		<comments>http://blog.zeitalter3.de/2009/10/12/game-design-konzeption-eines-fiktiven-strategiespiels/#comments</comments>
		<pubDate>Mon, 12 Oct 2009 17:08:09 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Literatur]]></category>
		<category><![CDATA[konzepte]]></category>
		<category><![CDATA[Spieldesign]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=664</guid>
		<description><![CDATA[Bei dem Buch handelt es sich laut Amazon-Beschreibung um eine &#8220;Seminararbeit aus dem Fachbereich Informatik &#8211; Sonstiges, Benotung: 1,0, Hochschule Offenburg (Medien und Informationswesen), Veranstaltung: Konzeption von Computerspielen&#8220;. Was man bekommt sind 29 Seiten mit Text, Tabellen und Illustrationen. Ich streiche hiermit &#8220;Buch&#8221; und setze &#8220;Heft&#8221;.
Das Heft beschreibt das Konzept für ein Strategiespiel, basierend auf [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft size-full wp-image-665" style="margin-top: 0px; margin-bottom: 0px; margin-left: 5px; margin-right: 5px; border: 1px solid black;" title="gd_konzeption_fiktives_strategiespiel" src="http://blog.zeitalter3.de/wp-content/uploads/2009/10/gd_konzeption_fiktives_strategiespiel.jpg" alt="gd_konzeption_fiktives_strategiespiel" width="147" height="208" />Bei dem <a href="http://www.amazon.de/gp/product/3638648893" target="_blank">Buch</a> handelt es sich laut Amazon-Beschreibung um eine &#8220;<em>Seminararbeit aus dem Fachbereich Informatik &#8211; Sonstiges, Benotung: 1,0, Hochschule Offenburg (Medien und Informationswesen), Veranstaltung: Konzeption von Computerspielen</em>&#8220;. Was man bekommt sind 29 Seiten mit Text, Tabellen und Illustrationen. Ich streiche hiermit &#8220;Buch&#8221; und setze &#8220;Heft&#8221;.</p>
<p>Das Heft beschreibt das Konzept für ein Strategiespiel, basierend auf Hexgrids oder &#8220;Wabenstrategiespiel&#8221; wie es der Autor nennt. Als Vorbild wird <a href="http://de.wikipedia.org/wiki/Battle_Isle" target="_blank">Battle Isle</a> genannt. Das Spiel soll allerdings rundenbasierte Wabenstrategie mit Echtzeitstrategie verbinden: &#8220;<em>Eine sinnvolle Kombination von Waben- und Echtzeitstrategie bietet daher einen vielversprechenden Ansatz für ein Strategiespiel</em>.&#8221;</p>
<p>Ein bischen schade ist, dass der Autor anscheinend kaum Recherchen betrieben hat. Zunächst einmal ist Battle Isle mitnichten der Begründer des Hexgrid-Genres, wie im Heft behauptet. Darüber hinaus erfreut sich die beschriebene Kombination aus rundenbasierter und Echtzeitstrategie schon seit mindestens 2000 großer Beliebtheit &#8211; in Form der populären <a href="http://de.wikipedia.org/wiki/Total_War" target="_blank">&#8220;Total War&#8221;-Serie</a>.</p>
<p>Davon abgesehen folgt ein kurz gehaltenes, aber umfangreiches Spielkonzept. Ablauf, Setting und Spielelemente werden verständlich erklärt. Die Illustrationen sind Marke &#8220;Bleistiftgekritzel&#8221;, erfüllen aber ihren Zweck.</p>
<p>Die spannende Frage bei allen Spielekonzepten lautet: könnte ich das Spiel nach dem Durchlesen bauen? Antwort: <a href="http://de.wikipedia.org/wiki/Radio_Eriwan" target="_blank">im Prinzip ja</a>. Ich hätte mir aber gewünscht, dass die Startbedingungen des strategischen und taktischen Modus, sowie deren spielmechanischen Abläufe etwas ausführlicher beschrieben wären. Das Verhalten der Spielelemente war zwar beschrieben, allerdings selten bemessen. Eine Auflistung der einzelnen Attribute der Spielelemente wäre ebenfalls hilfreich gewesen.</p>
<p>Fazit: das Heft enthält ein nettes, ausbaufähiges Konzept. Meiner Meinung nach sind 14,99€ für das Gebotene aber etwas zu hoch gegriffen. Insbesondere da genug freie Alternativen (z.B. bei <a href="http://www.gametheory.ch/index.jsp?positionId=40385" target="_blank">Gametheory</a>) im Netz verfügbar sind.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2009/10/12/game-design-konzeption-eines-fiktiven-strategiespiels/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Theory of Fun: Treppen</title>
		<link>http://blog.zeitalter3.de/2009/10/09/theory-of-fun-treppen/</link>
		<comments>http://blog.zeitalter3.de/2009/10/09/theory-of-fun-treppen/#comments</comments>
		<pubDate>Fri, 09 Oct 2009 05:26:03 +0000</pubDate>
		<dc:creator>Dirk</dc:creator>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Spieldesign]]></category>
		<category><![CDATA[konzepte]]></category>

		<guid isPermaLink="false">http://blog.zeitalter3.de/?p=659</guid>
		<description><![CDATA[Da hat wohl jemand das Buch von Raph Koster gelesen:

Tolle Idee und tolle Umsetzung. Da vergesse ich mal zu fragen wie viel Tage sich das Verhältnis Treppe zu Rolltreppe geändert hat und gebe statt dessen ein doppeltes Daumen hoch. Wir brauchen mehr ambiente Spiele in unserem Leben!
]]></description>
			<content:encoded><![CDATA[<p>Da hat wohl jemand <a href="http://www.amazon.de/dp/1932111972" target="_blank">das Buch</a> von <a href="http://www.raphkoster.com/" target="_blank">Raph Koster</a> gelesen:</p>
<p><object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" width="560" height="340" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="allowFullScreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="src" value="http://www.youtube.com/v/2lXh2n0aPyw&amp;hl=de&amp;fs=1&amp;" /><param name="allowfullscreen" value="true" /><embed type="application/x-shockwave-flash" width="560" height="340" src="http://www.youtube.com/v/2lXh2n0aPyw&amp;hl=de&amp;fs=1&amp;" allowscriptaccess="always" allowfullscreen="true"></embed></object></p>
<p>Tolle Idee und tolle Umsetzung. Da vergesse ich mal zu fragen wie viel Tage sich das Verhältnis Treppe zu Rolltreppe geändert hat und gebe statt dessen ein doppeltes Daumen hoch. Wir brauchen mehr ambiente Spiele in unserem Leben!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zeitalter3.de/2009/10/09/theory-of-fun-treppen/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
