Um was geht's?
Ich habe heute offiziell mit meinem privaten Hobby-Projekt "Marble Theory" abgeschlossen und stelle es daher auch hier mal kurz vor.
Marble Theory ist ein Remake und eine Erweiterung eines alten DOS-Klassikers, welches ich in meinen jüngeren Jahren sehr intensiv und gern gespielt habe. Es handelt sich dabei um einen Mischmasch aus Puzzle-Spiel, Geschicklichkeitsspiel kombiniert mit ein wenig nachdenken und merken.
Was macht man da?
Das Spielprinzip ist denkbar einfach. Während von oben immer neue farbige Kugeln in das Level kommen, muss man diese durch die Gänge navigieren und je 4 von einer Farbe in einem Rad sammeln, damit dieses als erledigt markiert wird. Sind alle Räder markiert worden, ist das Level geschafft. Um das etwas schwieriger zu gestalten, gibt es diverse Elemente, die den Spielfluss steuern. So werden Bälle umgelenkt, teleportiert, ihre Farbe geändert, gewisse Farben blockiert, nur eine gewisse Anzahl durchgelassen oder ähnliches. Die späteren Level sind zudem auch noch "schwarz". Das heißt nur in der Umgebung eines Balls wird das Level beleuchtet, sodass man zunächst erst einmal wissen muss, was wo ist, sich das merken und auch Änderungen des Levels im Kopf behalten muss.
Wie wurde es gemacht?
Umgesetzt habe ich das ganze mit einer eigenen Engine geschrieben in C#. Eigentlich war die Engine mal gedacht für mein Spiel "Space'n'Roll", welches ich wegen Datenverlust aber weiter nach hinten verschoben habe. Sehr praktisch war die Engine für mich dennoch und speziell der Editor für die Sprites, Texturen und Animationen, sowie die gesamte GUI war sehr hilfreich. Der eigentliche Code des Spiels ist daher relativ gering. Sehr umfänglich hingegen war der Editor für Marble-Theory, welchen ich als Plugin in den Editor der Engine eingebunden habe. Dort konnte ich dann alle Skins für die Level festlegen, die Beschreibungen und Highscore-Berechnung integrieren, sowie die Level natürlich auch zusammenklicken und testen.
Performance-technisch bin ich von C# sehr erstaunt. Sicherlich stellt das Spiel auch keine großen Anforderungen, daher nicht so sehr verwunderlich. Solange aber mein Lüfter am Laptop nicht angeht, ist das allemal freundlich.
Wie funktioniert das intern?
Das Spiel ist deterministisch. Ich arbeite also nicht mit inkrementellen Zeit-Differenzen, sondern mit Absolut-Werten. Der Vorteil liegt für mich darin, dass Verlangsamung des Spiels ausgeschlossen ist, was einen unfairen Vorteil verhindert. Unterbricht man das Spiel also irgendwie extern für eine Zeit X, so ist nach Fortsetzung des Spiels der Zustand genau dort, wo er auch ohne Unterbrechung gewesen wäre. Für diese Art Spiel ist die Umsetzung dafür ziemlich trivial, weil nur die Zeitpunkte für neue Aktionen betrachtet werden müssen und diese sehr überschaubar sind. Für andere Spiele wäre das sicher ungeeignet.
Ich will haben!
Hier der direkte Link zum Download der deutschen Version.
Wie sieht das aus?
Und dynamisch?
[youtube]LFke5E97llk[/youtube]
Weiterführende Seiten
Auf meiner Homepage gibt es eine knappe englische Zusammenfassung, sowie einen Download für eine deutsche, als auch für eine englische Version: http://www.game-coding.de/project.php?pid=7
Vielen Dank für Feedback und Fragen, ich bin für alles offen.