Archiv für Juli 2008

Kleine BodyLabs-Demo

Donnerstag, 31. Juli 2008

Ich habe jetzt mal ein klitzekleines Video “gedreht”, in dem die Physikengine BodyLabs zum Einsatz kommt. Ich habe es auf die Schnelle erstellt; die Qualität ist nicht die beste. Zu meinem Pech führt das dazu, dass einige Stellen nicht ganz sauber und korrekt rüberkommen. Ziemlich in der Mitte des Videos flippt der Würfel am rechten Rand recht eigenartig rum. Ich sollte möglichst bald ein besseres Video erstellen, damit ihr seht, dass das wirklich nur am Video liegt, denn eigentlich sind die Berechnungen sehr überzeugend.

Get the Flash Player to see the wordTube Media Player.

Zu Testzwecken habe ich mir eine OpenGL-Anwendung erstellt, um die Objekte zu visualisieren. Die bunten Quader und Kugeln in dem Video entsprechen natürlich nicht den Objekten im Spiel. Die OpenGL-Anwendung ist nur zum Testen der Physikengine, die sich bisher übrigens auf 2D-Objekte beschränkt. Es werden zwar 3D-Objekte dargestellt, die Berechnung findet aber nicht auf Quadern und Kugeln, sondern auf Rechtecken und Kreisen statt.

Der Builder

Montag, 28. Juli 2008

So, der Builder ist fertig. Eigentlich schon seit ein paar Tagen, aber ich hatte bisher keine gute Gelegenheit, darüber zu berichten. Viel zu sagen gibt es da eigentlich auch gar nicht. Wie erwartet gab es keine Probleme. Das war ein Klacks. Ist aber auch nicht verwunderlich, schließlich muss für die Bytecode-Generierung, was ja Aufgabe des Builders ist, lediglich der zuvor erzeugte Syntaxbaum traversiert werden. Dabei wird für jeden Knoten im Baum der entsprechende Bytecode in einen Puffer geschrieben. Der Code eines einzelnen Knotens ist dabei absolut unabhängig von anderen Knoten, was die ganze Sache schön einfach hält.

Der tatsächliche Bytecode ist jetzt wahrscheinlich weniger interessant. Selbst für mich macht es wohl erst Sinn, mir den generierten Bytecode reinzuziehen, wenn ich den Interpreter baue. Daher gibt der Builder bisher einfach nur die Opcode-Kürzel der jeweiligen Instruktionen aus. Diese Debug-Ausgaben passen im vorliegenden Fall ganz wunderbar zum Syntaxbaum von letzter Woche. Das ist auch gut so, schließlich repräsentieren die Opcode-Kürzel dort links denselben Skriptcode zur Berechnung der Quadratwurzel, für den der Syntaxbaum erzeugt wurde.

Hier noch mal der beispielhafte Skriptcode:

z := 1;
while ( abs( z*z - x ) >= mu )
{
  z := z - ( z*z - x ) / 2*z;
}

Syntaxbaum

Donnerstag, 24. Juli 2008

Der Parser des Scripting-Systems ist schon fertig. Das ging schnell und hat weniger Probleme bereitet, als ich zunächst befürchtet hatte. Ok, ich hatte zwar vorher schon mal einen Parser geschrieben, jedoch hat der lediglich Klammerausdrücke analysiert. Nichts Wildes. Die dabei gesammelten Erfahrungen haben mir jetzt eigentlich nicht geholfen. Umso überraschter bin ich.

Der Parser analysiert den Skriptcode und baut einen so genannten Syntaxbaum auf. Auf Basis dieses Syntaxbaums soll dann der Bytecode generiert werden, der letztlich zur Laufzeit ausgeführt wird. Bisher ist aber nur der Parser fertig. Der Builder und der Interpreter müssen noch programmiert werden. Das mache ich als nächstes. Aber der Parser funktioniert schon hervorragend. Das möchte ich kurz an einem Beispiel demonstrieren.

z := 1;
while ( abs( z*z - x ) >= mu )
{
  z := z - ( z*z - x ) / 2*z;
}

Der oben stehende Skriptcode zur Berechnung der Quadratwurzel wird vom Parser korrekt zerlegt und in einen Syntaxbaum transformiert. Die vielleicht etwas unübersichtliche Visualisierung des Syntaxbaums müsst Ihr mir verzeihen, aber das ist ein Ausschnitt aus dem Log-Text der Engine. Es handelt sich dabei um Debug-Ausgaben des Parsers. Ich habe also nicht gemogelt, um es schöner aussehen zu lassen, sondern das ist tatsächlich das, was der Parser im Hintergrund anstellt und entsprechend ausgibt. Ein kleiner Beweis, dass es zumindest für das vorliegende Beispiel funktioniert.

Schön zu sehen ist vor allem, dass die Punkt-vor-Strich-Rechnung korrekt umgesetzt wird, aber nur sofern durch Klammersetzung nichts anderes “befohlen” wird. Die räumliche Trennung einiger Teilausdrücke und so dienen lediglich der Übersicht, denn Leerzeichen etc. werden schon vor dem Parser von einem Präprozessor weggewixt.

Ich denke, den Builder zu programmieren, wird kein großes Problem sein. Mehr “Angst” habe ich da schon vor dem Interpreter, der die einzelnen Laufzeitumgebungen verwalten muss etc. Mal sehen…

Grammatik der Skriptsprache

Sonntag, 20. Juli 2008

Obwohl das Wochenende noch deutlich merkbar in meinem Körper wohnt, habe ich nun angefangen, das Scripting-System der Engine zu programmieren. Hierfür hatte ich am Freitagabend bereits die zugrunde liegende Grammatik skizziert, die ich heute noch ein wenig korrigiert habe. Und das alles, obwohl mein Freund Tamer heute Geburtstag hat, den zu besuchen ich zu schwach bin. Aber Proggen und vergleichbares Zeug geht bei mir immer. Das findet Tamer genauso geil, das weiß ich.

Grammatik

Während ich die Grammatik beim Fernsehkucken auf einen Zettel geschmiert habe, hat mich meine Freundin Anna gefragt, ob ich denn an einem Freitagabend da wohl Bock drauf hätte. “Auch nicht weniger als sonst.”, war meine Antwort. “Also hast du tierisch Bock drauf!”, schloss Anna daraus. Geil! Naja, in Wirklichkeit gibt es natürlich Besseres, womit ich mich beschäftigen kann, vor allem an einem Freitagabend. Mal abgesehen davon, dass ich mir gar nicht sicher bin, ob die Grammatik so optimal ist. Insbesondere, weil bisher nur Fließkommawerte unterstützt werden. Integers und Strings werden bisher nicht unterstützt. Sie sind aber eigentlich ganz nützlich, insofern werde ich sie wahrscheinlich doch noch einbauen. Mal sehen. Ich glaube aber, dass ich das problemlos nachträglich noch machen kann. Ich baue von vornherein die Komponenten des Scripting-Systems entsprechend generisch auf.

Ein kleiner Auszug aus der Story

Donnerstag, 10. Juli 2008

Viele werden wahrscheinlich schon wissen, worum es geht, warum Cyber E-Razor so sauer ist und in der kompletten Galaxis “herumrockt”! Klar, seine Schwester Elsa wurde entführt! Und jetzt gibt es Senge für die Entführer! Das könnt Ihr nun hier nachlesen. Viel Spaß dabei! Ich habe übrigens noch keinen Namen für die Rasse der Aliens, die Elsa entführt haben.

Mit Jens Lehmann studiert

Dienstag, 01. Juli 2008

Ich habe letztens übrigens von meinem Freund Patti erfahren, dass ich mit Jens Lehmann, unserem nationalen Torwart, gemeinsame Vorlesungen besucht habe. Jens studierte ja sieben Jahre lang VWL in Münster. Das habe ich damals nur noch nicht gewusst. Ist aber eigentlich auch egal, denn ich bin ja ohnehin kaum zu den Vorlesungen gegangen. Aber wahrscheinlich haben wir dann auch die ein oder andere Klausur zusammen geschrieben. Wer weiß. Wen’s interessiert…