Archive for Januar 2010

Roboduel Trading Card Game

Januar 31, 2010

Sammelkartenspiele haben mich schon immer fasziniert. Als langjähriger Magic-Spieler war es schon immer mein Traum, einmal ein eigenes zu entwerfen.

Vor ein paar Jahren wurden wir an der Universität in der Kunst der Assembler-Programmierung unterwiesen und wie es bei Vorlesungen so manchmal ist, schweifen die Gedanken in weite Ferne. Mir kam die Idee, ein Kartenspiel zu machen, bei dem der Kartenstapel jedes Spielers ein Programm darstellt, das im Laufe des Zuges abgearbeitet wird.

Die Programme steuern Roboter, die sich gegenseitig bekriegen, wie beispielsweise beim Roboterfußball.

Eine Roboter-Karte

Ein Roboter hat drei Werte. Links die Box mit dem Blitz ist sein Energievorrat, daneben die Zeit, die ihm pro Runde zur Verfügung steht und rechts seine Panzerung. Sind Energievorrat oder Panzerung erschöpft, so ist das Spiel verloren. Das soll dafür sorgen, dass sich wildes Herumballern nicht lohnt, da die eigene Energie verbraucht ist, bevor man den Gegner erledigt hat.

Wer ich jetzt wundert, welche Zahl A sein soll, dem muss ich zu meiner Schande gestehen, dass Roboduel des Realismus wegen Hexadezimalzahlen verwendet. A ist also 10, B ist 11, …

Jeder Spieler hat also einen Roboter, doch der ist nichts ohne seine Programmierung. Wie programmiert man nun seinen Roboter? Ganz einfach: Es gibt drei Arten von Karten:

  • Befehle, die ein Roboter ausführt (z.B. eine Bewegung)
  • Bedingungen, mittels denen verschiedene Alternativen gewählt werden können
  • Daten, die als Parameter für Befehle und Bedingungen dienen
  • Waffen, um dem Gegner einzuheizen

Ein Befehl

Es gibt zwei Arten von Befehlen, interne und externe. Ein externer Befehl wie der obige ist immer eine Aktion des Roboters. In diesem Fall ein Schritt vorwärts, solange natürlich nichts im Weg steht. Einen Befehl auszuführen benötigt Zeit, die in dem kleinen Fenster unten rechts angegeben ist. Überflüssige Bewegungen sollte man also vermeiden.

Der Sprungbefehl

Im Gegensatz zu externen Befehle brauchen interne keine Zeit, da sie sich sozusagen nur im Gehirn des Roboters abspielen. Der hier abgebildete Befehl ist ein Sprungbefehl, der die nächsten n Befehle überspringt. Er entspricht ein wenig einem GOTO-Befehl, nur, dass er relativ und nicht absolut springt. Allerdings muss natürlich ein Datum folgen.

Ein Datum

Datumskarten gibt es für die Zahlen von 0-F. Als kleinen Bonus enthält die Illustration die Zahl jeweils in Binär- und Hexadezimaldarstellung.

Eine externe Bedingung

Natürlich hilft ein Sprung nicht viel, wenn er immer ausgeführt wird. Dann könnte man sich nämlich einfach die übersprungenen Karten sparen. Deswegen gibt es Bedingungskarten wie die oben abgebildete. Auch hier werden interne und externe Bedingungen unterschieden, wobei die externen wieder Zeit kosten.

Der Text einer Bedingung klingt auf den ersten Blick ein wenig verwunderlich, aber er ist genau das, was man benötigt, um einen bedingten Sprung zu modellieren. Ein Beispiel ist die Kartenfolge „Vor Objekt“, „Sprung“ und „Neun“. Angenommen, unser Roboter befindet sich tatsächlich vor einem Objekt, wird die Bedingung ignoriert und der Sprung um neun Karten wird ausgeführt. Befindet er sich allerdings nicht vor einem Objekt, so wird die Karte „Sprung“ übersprungen, das Datum „Neun“ ignoriert, da es nicht verlangt wurde und das Programm läuft ohne Sprung weiter. Verwirrt? Keine Angst, das ging vielen so.

Eine Waffe

Hat man zu guter Letzt seinen Roboter positioniert, ist es an der Zeit, seinen Gegner in Stücke zu schießen. Dazu benötigt man eine Waffenkarte. Die wird genau wie ein Befehl in den Kartenstapel getan und abgefeuert, sobald sie aufgedeckt wird. Dabei gibt es einen Energieverbrauch (Mitte links) und den beim Gegner verursachten Schaden (Mitte rechts). Die Waffen unterscheiden sich allerdings in der Reichweite, so schießt der Laser z.B. in einer geraden Linie.

Das waren so weit alle Kartentypen, jetzt noch kurz der Spielablauf:

  1. Beide Spieler positionieren ihre Roboter in einer quadratischen Arena, die von Mauern umgeben ist (z.B. mit einem Blatt Karopapier).
  2. Per Münzwurf wird entschieden, wer beginnt.
  3. Die Spieler führen abwechselnd ihre Programme aus, bis die jeweilige Zeit pro Runde für ihren Roboter abgelaufen ist. Reicht die Zeit nicht, den letzten Befehl auszuführen, so wird vorher abgebrochen.
  4. Verloren hat, wessen Roboter keine Energie oder Panzerung mehr hat. Außerdem ist das Spiel verloren, wenn der Speicher überläuft (man hat alle Karten aufgedeckt und keine weiteren Befehle mehr).
  5. Eine Endlosschleife bedeutet unentschieden. Das ist allerdings nicht so ohne Weiteres herauszufinden.

Klingt spannend? Dann empfehle ich, sich einen leidensfähigen Freund zu schnappen und das ganze auszuprobieren. Mehr als ein halbes Dutzend Partien Roboduel wurden bisher nämlich noch nicht gespielt. Der Grund dafür ist einfach: Menschen sind keine Computer. Ist das Spiel begonnen, so ist nämlich bereits entschieden und es liegt nun an den Spielern, ihre Algorithmen auszuführen: Bis zum bitteren Ende. Und obwohl ein Rechenknecht so etwas ohne Anstand in Sekundenbruchteilen erledigt, ist das für ein menschliches Gehirn nicht sonderlich spaßig.

Was allerdings Spaß macht, ist das „Programmieren“ mittels Kartenzusammenstellung. Wer sich mit dem Assemblerlernen ein wenig schwertut, kann es ja mal mit Roboduel versuchen. Nach ein paar Partien hat man auf jeden Fall verstanden, wie so ein Assemblerprogramm funktioniert. Roboduel gibt er hier als druckfertiges PDF.

Tja, leider leider hat es mit Roboduel nicht so ganz geklappt, aber nichtsdestotrotz hat das Design und die grafische Gestaltung jede Menge Spaß gemacht. Aber es war weder das erste selbstgemachte Kartenspiel, noch soll es das letzte bleiben. doch dazu ein andermal mehr…

Ein Datum

Advertisements

Gratistipps: Rob Costlow – Contemporary Piano

Januar 31, 2010

Eine weitere Perle, über die ich auf Jamendo gestopert bin ist Rob Costlow, ein Pianist, der drei seiner Alben kostenlos online gestellt hat. Seine Musik erinnert mich ein wenig an Filmsoundtracks, bevor nach Herr der Ringe jeder mit dem Symphonieorchester angerückt ist, wie z.B. den von „Die geheime Welt der Amelie“. Ein wenig melancholisch, aber einfach schön.

Hier geht’s zum Download. Anspieltipp: Semester Days.

Relegatia: Heimkehr

Januar 18, 2010

Seit heute morgen gibt es eine neue Geschichte aus Relegatia zu lesen.

Heimkehr berichtet von einem Helden, der seine Aufgabe erfüllt hat und in seine Heimatstadt zurückkehrt. Dort findet er allerdings nicht das, was er sich auf seiner langen Reise erträumt hat…

Heimkehr ist das, was ich gerne eine „Konzeptgeschichte“ nenne. Statt Charakteren und Einzelheiten stehen Erzählmotive im Vordergrund. Wer die Rollen letztendlich füllt, ist zweitrangig. Diese Geschichte handelt im Kern davon, was passieren kann, wenn eine Lebensaufgabe endet und ein Triumph nicht das hält, was man sich davon versprochen hat…

Viel Spaß beim Lesen!

Gratistipps: Chat Noir

Januar 17, 2010

Wie man eine Katze fängtManchmal sind es die einfachsten Dinge, die die größte Freude bereiten. So auch bei Chat Noir, bei dem es darum geht, eine schwarze Katze zu fangen. Obwohl, ganz so einfach ist das doch nicht …

Dieses Flashgame ist ein schönes Beispiel dafür, wie man mit einfachen Mitteln und einer guten Idee ein Spiel erschafft, das mitunter mehr Spaß macht als die neuesten Grafikorgien.

Überarbeitete Relegatia-Homepage

Januar 11, 2010

Was lange währt, wird endlich gut. Ab heute ist die überarbeitete Relegatia-Homepage online.

Neben ein paar kleineren Layout-Überarbeitungen gibt es einige neue Geschichten und verlorene Momente zu entdecken. Die vier Jahreszeiten erzählen die Vergangenheit von Athariel und Ithymia, Der Weg nach Titania bereitet auf den nächsten Roman vor und mit der Geschichte von den Jägern gibt es noch etwas zum Schmunzeln.

Die weiteren Neuerungen betreffen hauptsächlich die Anordnung der Geschichten:

In einigen Geschichten gab es Passwörter, mit denen man zustäzliche Inhalte freischalten konnte.Dahinter standen zwei Ziele:Erstens, treue Leser mit Boni zu belohnen, zweitens, durch das Verstecken von Geschichten eine gewisse Lesereihenfolge zu erzwingen.In der Praxis hatte das Ganze leider andere Effekte:

  • Nervige, an sich unnötige Passworteingaben
  • Chaotische und unübersichtliche Navigation, da jedes einzelne Passwort einen zusätzlichen Menüpunkt hinzufügt
  • Eine sehr leer wirkende Seite, da sich ein Großteil der Geschichten hinter Passwörtern versteckt

Um das zu lösen, gab es letzten Endes nur einen Schritt: Weg mit allen Passwörtern und die Inhalte zurück ans Tageslicht. Das heißt konkret, dass beispielsweise Geschichten wie Meabella, Frühling und Der Weg nach Titania direkt verfügbar sind.

Für die Lesereihenfolge gibt es eine neue Unterscheidung: Geschichten und verlorene Momente. Dabei sind Geschichten in sich abgeschlossen und benötigen kein „Insiderwissen“, während verlorene Momente einem erfahrenen Leser noch tiefere Einblicke in Relegatia ermöglichen. Um dem Leser die Wahl der Geschichte zu erleichtern, gibt es nun zu jeder Geschichte eine Liste von Vorgängern, verbundenen Geschichten und Nachfolgern, mittels der man sich seinen eigenen Weg durch Relegatia suchen kann.

Hier geht es zur neuen Relegatia-Homepage.

Gratistipps: 8-bit lagerfeuer

Januar 10, 2010

Das Internet, unendliche Weiten …

Ein guter Freund sagte einmal, dass es im Internet alles gibt, man muss es nur finden. Das mag stimmen, doch leider gibt es da noch einen anderen Faktor: Sturgeon’s Law besagt, dass 90 % aller Dinge Schrott sind. In dieser Rubrik geht es allerdings um die anderen 10 %. Und wie ein weiteres Sprichwort lautet: Die schönsten Dinge im Leben sind umsonst.

Unsere heutige Perle ist ein Album der Band Pornophonique. Wer jetzt schon die Augen verdreht, dem sei versichert, dass es sich dabei weder um Gangsterrap noch um sonstige Geschmacklosigkeiten handelt. Der Name des Albums ist 8-bit lagerfeuer und ist Programm:

8-bit Lagerfeuer. Gameboy, Gitarre und Gesang. Acht Songs über traurige Roboter, die Einsamkeit im Computerdungeon und andere herzergreifende Szenarien.

Nicht nur für Leute, denen das Tetris-Lied noch immer im Kopf rumspukt, auf jeden Fall einen Download wert.

Anspieltipps: sad robot und rock’n’roll hall of fame.

Gratistipps: Cave Story

Januar 10, 2010

Ich selbst bin ein Nostalgiker und kann niedrigauflösender Pixelgrafik oft mehr abgewinnen als den photorealistischen 3D-Spektakeln der aktuellen Spielegeneration. Mein Blütezeit als Spieler war die Ära des Super-Nintendo. Spiele wie Zelda 3, Super Metroid und Terranigma haben noch immer ein ganz besonderen Platz in meinem Herzen.

Cave Story fühlt sich an wie ein Super-Nintendo-Spiel und ich wage die These aufzustellen, dass es, wenn es zu dessen Lebzeiten erschienen wäre, als einer der besten Plattformer des Systems gelten würde. Das Spiel, das den Autor wohl fünf Jahre Entwicklungszeit gekostet hat, spielt sich wie eine Mischung aus Metroid und Contra (Probotector für uns Europäer). Für die weniger Versierten hier eine kurze Beschreibung: Der Protagonist erwacht in einem weitläufigen Höhlensystem, das er im Laufe des Spiels Stück für Stück erforscht. Dabei trifft er freundliche Wesen und Monster, bekämpft Bosse und sammelt neue Waffen und Gegenstände. Der Schwierigkeitsgrad ist anfangs sanft, doch er steigt stetig und stellt den Spieler so vor ständig neue Herausforderungen.

Ein Video sagt mehr als tausend Worte:

Wer jetzt Lust hat, das Spiel auszuprobieren, gelangt hier zum Download. Ich empfehle das „Deluxe Package“. Das Spiel läuft auf allen größeren Betriebsystemen (Windows, Linux, Mac) und die Hardwareanforderungen dürften wohl kaum ein Hindernis sein.

Hello World…

Januar 10, 2010

Juchhu, noch ein Blog! Darauf hat die Welt gewartet…

Naja, aber da das Bloggen ja inzwischen wieder unmodern ist und man schon fleißig die nächste Sau durch’s Web 2.0 treibt, kann ich ja beruhigt der „Blogosphere“ beitreten, ohne das Gefühl zu haben, dem Hype erlegen zu sein.

Keine Angst, ich werde meine geneigten Leser nicht mit meinen letzten Urlaubsfotos nerven, sondern stattdessen über meine verschiedenen Projekte (hört hört!) berichten und einige Fundstücke aus dem Internet sammeln, die ich für interessant halte.

Insofern: Viel Spaß beim Lesen und Entdecken!

ParGM

Januar 10, 2010

ParGM steht für Paralleler Gittermanager und ist ein Projekt, an dem ich im Rahmen meines Studiums mitarbeite. Leute, die eine Abneigung zu Mathematik haben, sollten jetzt besser nicht weiterlesen!

ParGM wird zur numerischen Lösung partieller Differentialgleichungen verwendet und dient hierbei als Gitter

Ein Gitter

Ein Gitter - allerdings keines von ParGM

Aus Programmierersicht interessant ist die Umsetzung in C++, für die sogenanntes Template Metaprogramming verwendet wird.Template Metaprogramming ist eine Technik für statischen Polymorphismus, bei dem zur Compile-Zeit Parameter übergeben werden. Das minimiert den Overhead zur Laufzeit und spart so Performance. Im Falle des Gittermanagers wird das hauptsächlich verwendet, um zwischen verschiedenen Fällen zu differenzieren, z.B. ob das verwaltete Gitter eine, zwei oder drei Dimensionen hat. Abhängig davon werden dann z.B. Arraygrößen festgelegt und Varianten von Algorithmen ausgewählt.

In der Praxis hat Template Metaprogramming allerdings noch einen weiteren Effekt und das ist Frustration der Entwickler. Das Denkmuster ist einem von Java verwöhnten Programmierer nicht auf Anhieb einsichtig und auch die Vorzüge moderner IDEs schwinden schnell, wenn Template-Code ins Spiel kommt. An Code-Completion mit Eclipse war nicht mehr zu denken (letztendlich blieb nur noch Syntax-Highlighting und eine sehr simple Variante des Syntaxchecks übrig) und auch unsere Werkzeuge für Code-Coverage und zyklomatische Komplexität lieferten falsche interessante Ergebnisse. Compilerfehler sind auch schon einmal gut 1000 Zeichen lang, weil jeder Template-Parameter im Detail aufgelistet wird.

So, falls es noch einen Leser gibt, der bis jetzt nicht eingeschlafen ist, findet ihr weitere Informationen und den Quelltext unter pargm.org.