Dgame – pygame für die D Programming Language, Preview

Für die bisher im weiten Spektrum der Spieleprogrammierer recht unbekannte Sprache D Programming Language, welche im Grunde eine weiterentwickelte Form von C++ ist und so gut wie alle, wenn nicht alle, Vorzüge aus C++ besitzt, existieren zur Zeit leider noch recht wenige Lib’s und Frameworks. Dabei weist D viel weniger Mängel & Komplexität auf und ist dazu weniger überladen & wesentlich einfacher zu erlernen, laut meiner bescheidenen Meinung jedenfalls. Dazu kommt, dass die meisten Features und Weiterentwicklungen vom neuen aber noch auf sich warten lassenden Standard von C++ (C++0x) bereits implementiert sind und D somit eine Art modernes C++ darstellt.
Darüber hinaus ist die gesamte C Bibliothek fester Bestandteil und somit ist C Kompatibilität absolut gewährleistet.
Allerdings ist D viel zu neu, als das so viele Frameworks wie für C++, welche ja schon seit anno ’79 auf der Welt ist (D seit 2007, Quelle zu C++, Quelle zu D), existieren könnten. Durch das Projekt Derelict existiert allerdings ein Binding für einige C++ Bibliotheken (darunter SDL & OpenGL bspw.) und auch Allegro existiert bereits in D.

Als alter Python und Pygame Fan vermisste ich allerdings die Einfacheit und vorallen die Objekt-orientierte Benutzung einer solchen Lib., denn sowohl die SDL als auch OpenGL sind beinahe (mir fällt im Moment kein Objekt-orientiertes Beispiel ein) komplett funktional, und das liegt nicht an dem D – Binding, denn auch in der offiziellen Dokumentation zur Erklärung von SDL ansich und dessen Funktionsweise finden sich nur Funktionen, keine Klassen.
Die einzige Grafik Bibliothek in C++ die mir daher gefiel war SFML, da sie völlig Objekt-orientiert funktioniert.
SFML gibt es bereits für Python (PySFML) und auch für D existiert ein Binding (DSFML). Allerdings wird, auf Grund der bis dato mangelnden Verbreitung und Neuheit der Sprache, bisher eher zögerlich an DSFML gearbeitet, weswegen die aktuellste Version auf der 1.3′er Version von SFML beruht, wobei SFML für C++ bereits bei der 2′er Version angelangt ist (Quelle).
Deswegen entschied ich mich letzlich für Derelict. Auch dort existiert zwar ein Binding für SFML, doch dieses wird von Derelict (bislang?!) leider nur Funktional angeboten, was den ganzen Effekt zunichte macht.
Also setzte ich mich daran, einen solchen OOP Wrapper auch für D zu schreiben, welcher, wie Pygame, auf der SDL aufbaut.
» weiter lesen…

SDL_gfx unter D(erelict)

In diesem Artikel möchte ich mich noch einmal herzlich in meiner Muttersprache ( ;) ) bei aldacron und vor allem michaelp aus dem dsource forum bedanken.
Letzteren gelang schon vor einiger Zeit die Portierung von SDL_gfx in Derelict (Wer SDL_gfx nicht kennt: SDL_gfx stellt unter anderem Rotations- und Zoom Funktionen bereit, um ein Bild dementsprechend zu modifizieren. Bisher und wohl auch in naher Zukunft ist allerdings keine offizielle Portierung bzw. Aufnahme von SDL_gfx in Derelict vorgesehen. Quelle) und er half mir bei der Code Übernahme und sämtlichen Installations Problemen. Hier nochmal mein Thread diesbezüglich. Dort kann man den gesamten Gesprächsverlauf (allerdings in Englisch) und ebenso wertvolle Tipps bzw. Hilfe bei einer möglichen Installation nachlesen. Vorallen bei der Erstellung der .lib und der .dll Datei gab es eine Menge Probleme.
Um letztere dann zu finden musste ich das gesamte Internet durchforsten, aber letzlich wieder auf michaelp’s Hilfe hoffen. Er fand in den Tiefen des Netzes einen passenden Beitrag mit Projekt Code zur Erstellung der .dll und, sofern dies nicht klappt, wie in meinem Fall, die bereits fertige SDL_gfx.dll.

Ich will hier nun alles in einem Paket zum Download anbieten: SDL_gfx.dll, sdlgfx.lib sowie sdlgfx.d und sdlgfxfont.d, zum Download.

P.S: Mancher mag sich fragen, weswegen ich nicht einfach auf OpenGL zurückgegriffen habe (so auch ponce in den verlinkten Thread). Hierzu kann ich nur sagen, dass mir zwar schon klar ist, dass OpenGL Hadware beschleunigt arbeitet, aber mir gefiel der Gedanke nicht mich nun auch noch mit OpenGL unter Derelict auseinanderzusetzen, noch SDL mit OpenGL so stark miteinander zu vermischen.

Nichts desto trotz hier nochmal ein besonderes Danke an michaelp für sein Durchhaltevermögen mir gegenüber und seiner ruhigen Art, mir alles verständnisvoll zu erklären, sowie auch an aldacron für das gesamte Derelict Projekt.

Sprites

Da bin ich wieder. Leider hat es diesmal etwas länger gedauert, ich war abgelenkt von diversen Projekten, die wohl auch in den nächsten Tagen hier gepostet werden.
Zum einen bin ich aktuell dabei für D eine pygame ähnliche Engine Struktur zu schaffen, da mir der ganze funktionale Code von SDL, statt Objekt Orientiertierung, wie ich es eben von pygame und generell von Python gewohnt bin, mächtig auf den Nerv geht.
Zum anderen haben ein paar Kollegen und ich beschlossen, ein Adventure Spiel zu entwickeln, wahrscheinlich in Python.

Aber in diesem Artikel möchte ich erklären, wie man Sprites auf die dazugehörige Karte zeichnet, so wie angekündigt.
Das mag für den einen ganz einfach klingen, ein Sprite ist ja nur eine Spielerfigur, sprich eine Grafik, also laden und an verschiedene Positionen blitten … oder doch nicht?
» weiter lesen…

Tile-Engine mit XML und D

In diesem Beitrag werde ich zeigen, wie im letzten Artikel schon angedeutet, wie man mit D und XML eine kleine Tile-Engine bastelt um eine auf Tiles basierende Spielkarte zu erstellen.
Ich werde hierbei mit Tiled arbeiten (Download) um daraus mithilfe dieses Tilesets (Achtung groß)

Zeige Tileset »

Tileset

eine Karte zu erstellen und im XML Format abzuspeichern.
Danach werden wir mit Hilfe des XML Parsers und der Image Klasse das Tileset laden, in 16 * 16 Pixel große Kacheln zerschneiden, abspeichern, die mit Tiled erstellte und in XML abgespeicherte Karte laden, und daraus dann ein Bild zu erstellen, welches wir in das Fenster zeichnen lassen.

Ich setze vorraus, dass D auf eurem System installiert ist und ihr die einfache Handhabung kennt, Derelict nutzt und eine passende IDE besitzt, ansonsten empfehle ich vorerst die Tutorials auf http://d.whosme.de/, von Einführung ins D Programmieren bis Code::Blocks: Konfigurieren für Derelict, wobei es Geschmackssache ist, ob ihr später mit Code::Blocks oder mit Eclipse/Descent arbeitet; ich arbeite mit Code::Blocks, da man dort die Keywords manuell hinzufügen kann, da einige dem Editor nicht bekannt sind (Beispiele wären “string” & “invariant”) und ich keine Erweiterung brauche, wie Eclipse z.B. Descent benötigt.
Ersteres ist bei Eclipse nicht der Fall, aber das ist, wie bereits angemerkt, reine Geschmackssache.

Viele Worte, wenige Taten … bisher ;)
» weiter lesen…

Von C(++) über Python zu D

Mein erster Eintrag auf meinem neuen Blog.
Während der erste vielmehr den Kampf gegen Formularspam gewidmet war, und eine viel Zahl an Captcha’s oder anderen Maßnahmen dagegen, wird es sich hier eher um Programmiersprachen, Tutorials und kleinen Hilfestellungen drehen, näheres dazu hier.

Zum eigentlichen Thema.
Wie vielleicht noch einige wissen, begann ich im Sommer 2009 mit C++, nachdem ich Jahrelang mit Webdesign und den dazugehörigen Sprachen wie HTML, CSS und PHP gearbeitet hatte.
C++ gefiel mir von Anfang an nicht wirklich, oder vielmehr: ich wurde damit einfach nicht warm.
Mein Hauptantrieb eine so Systemnahe Programmiersprache zu lernen, war, weg von der Konsolenprogrammierung und hin zur Fenster- und damit Spieleprogramierung zu kommen, und im wesentlichen ist C/C++ auch heute noch die “gefragteste” Sprache dafür.
Nach einer Vielzahl an GUI’s, von DirectX über Allegro hin zu SDL und SFML, wurd’ es mir wohl durch das anhaltende Trauma ( ;) ) von DirectX zu bunt und ich sah mich nach anderen Sprachen um.
So kam ich schließlich zu Python, welche mir von Anfang an sehr gut gefiel, und womit sich die Spieleprogrammierung mittels Pygame auch als verblüffend simpel herraustellte.
So gelang es mir relativ schnell einen einfachen Nachbau von Pokémon in Python zu programmieren, wenn auch Kämpfe und Einkäufe, wie man sie aus dem Spiel in seiner Kindheit vielleicht noch kennt, noch nicht fertig gestellt waren.
» weiter lesen…