Portierungen in andere Programmiersprachen
Nach einem kurzen Aufruf im Forum haben einige Leser begonnen, das Beispiel in andere Programmiersprachen zu übersetzen. Vielen Dank dafür! Hier ist der richtige Ort, die Portierungen allen zur Verfügung zu stellen. Fragen dazu bitte nur im Forum stellen, wo die Autoren sicherlich mitlesen werden. Weitere Erklärungen dürfen die Autoren hier gerne selbst ergänzen.
Wer hier Codebeispiele zur Verfügung stellt, stimmt zu, dass andere Teilnehmer sich daraus nach Belieben bedienen dürfen. Es gilt also das Gleiche wie für die von Harald Bögeholz ursprünglich bereitgestellte C++-Implementierung. Niemand wird disqualifiziert, weil er ein paar Zeilen Code aus einem der Beispiele übernommen hat.
Das Folgende ist alphabetisch (und dann chronologisch) nach Programmiersprachen sortiert.
AutoHotKey
Portierung des Beispiels nach AutoHotKey in der Datei Asteroid_AHK.rar. Gebraucht wird die aktuelle Version 1.0.47.06.
C
Portierung des Beispiels nach C in der Datei csample.zip. Lässt sich unter Windows mit gcc (Cygwin) mit dem makefile bauen, sollte aber auch unter Linux gehen. Das exe setzt ein installiertes Cygwin voraus.
C++
Stark erweitertes Framework von Matthias Fuchs in Asteroids-C++.zip. Der Vorteil dieser Version liegt darin, dass die ganze Netzwerkverbindungsimplementierung und die Spielverwaltung in einer eigenen Klasse Connection bzw. Game ausgelagert wurde. Gerade für Anfänger sollte das von Vorteil sein, weil sie diese Klassen vollkommen links liegen lassen können. Lediglich die Methode "MakeTurn" des Players muss ausgetauscht werden bzw. die ganze Klasse ersetzt werden. Projektdateien liegen vor für Visual Studio 2008, Borland Studio 2006, CodeBlock 8.0 mit Gnu und eine einfache Make-Datei. Getestet unter Windows, Linux und Mac sollten aber auch gehen. Big-Endian hoffentlich überall beachtet.
Weitere Merkmale:
- kann auch ohne Parameter aufgerufen werden und geht dann von localhost (127.0.0.1) aus.
- gibt die Punkte für jedes Objekt an
- gibt den Socket wieder frei (auch im Fehlerfall)
- besitzt gekapselte Ausgaberoutinen und eine Methode zum Test auf LittleEndian
- Startknopf-Unterstützung bei aktualisierter Mame
- Auslagerung allgemeiner Funktionen für Spieler in eigenem Modul, dadurch MakeTurn übersichtlicher
- Erkennung von Level, Leben und Score (mit Überlauf)
- Erkennung von Explosionen
- Zustände des Spiels werden erkannt, Ereignisse (z.B. Asteroid zerstört) generiert
- Kürzel des Spielers wird automatisch in Highscore eingetragen
- Kein so starkes busy-wait mehr, dadurch Mame auch auf Single-Core-Prozessoren debugbar
- ExtGameState kann verwendet werden um geometrische Informationen bereitzustellen (z.B. Richtung und Geschwindigkeit von Objekten)
C#
C#-Portierung von Patrick Mortara in Asteroid-C#.zip.
D
D-Portierung von Vladimir Panteleev in Asteroids-D.zip
Delphi
Delphi Portierung von Joe Merten in Asteroids-Delphi.zip Mit Grafikanzeige, auslesen der Scores usw. Getestet mit D5 und D7. FPK + Lazarus sehe ich mir demnaechst vielleicht auch noch an. Feedback willkommen.
Delphi (2) und FPC
Delphi und FPC Portierung von Benjamin Rosseaux in Asteroids-DelphiFPC-VCLLess.zip Kommt ohne VCL/FCL/LCL aus.
FreeBasic
FreeBasic-Portierung des C-Beispiels in FBAsteroids.zip, von Rocco Lavella. FreeBasic ist QBasic sehr ähnlich, aber mit der Funktionalität von C, z.B. Pointer, Operator Overloading, Multithreading usw. wovon das Beispiel auch Gebrauch macht.
Java
In der Datei asteroid-control-java-src.zip finden Sie eine Java-Version des Beispielcodes von Bernhard Haumacher.
Der Java-Code folgt direkt der C++-Lösung. Insbesondere werden Objekte für Spielfeld und Asteroiden nicht dynamisch angelegt sondern bei Programmstart vorinitialisiert. Damit gibt es feste Obergrenzen für die Menge der Objekte des Spielfeldes und der Code sieht recht Java-untypisch aus. Im Vergleich zu der C++-Lösung mussten nur eine Konvertierung der Nachrichten aus der Netzwerkrepräsentation in die Objektdarstellung und zurück ergänzt werden. Die C++-Lösung verlässt sich hier darauf, dass die interne Repräsentation der Datenstrukturen im Speicher mit den Netzwerkpaketen des Simulators übereinstimmt.
Java (2)
In der Datei asteroids_java_0.9.zip finden Sie eine Java-Version des Beispielcodes, die stärker objektorientiert ist.
Die Funktionalität folgt der C++-Lösung. Aber die Konvertierung geht noch einige Schritte weiter Richtung Java. Achtung: JDK 5 nötig!
Java (3)
Und noch eine Java-Implemtierung, inklusive grafischer Darstellung und der Möglichkeit, die Kommunikation mitzuschneiden und später komfortabel zu analysieren, zu finden auf einer eigenen Webseite.
Da das Programm auch als Bridge zwischen MAME und ein anderes Programm eingeschleift werden kann, können grafische Darstellung sowie Dump und Analyse auch von anderen Programmen (unabhängig von der Programmiersprache) verwendet werden, allerdings können dann natürlich Timingprobleme entstehen.
Der eingebundene grafische Analysator versteht neben den eigenen Dumpfiles auch die Dumpfiles vom c't-MAME in Version 1 und 2 dient daher als Basis für das auf der Games-Seite eingebundene Applet (dessen Quellen sind natürlich ebenfalls enthalten).
Seit Version 0.77 kann man mit diesem Programm auch von Hand Asteroids übers Internet spielen, zum Beispiel gegen den bei c't laufenden Asteroids-Server.
Aktuell ist Version 0.77.
LabView
Einfache Portierung des C++-Samplecodes. Das ZIP-File enthält die LabView 8.0-Version - leider kann ich keine LabView 6.1-Version (kompatibel zur Heise-LabView-Distribution) anbieten... Asteroids_LabView80.zip
OCaml
Keine Portierung, sondern der C++-Code wird angebunden. Ganz simples Beispiel in main.ml. Unter Windows getestet. ocaml-bindings.tar.gz
Python
Spielt nur per Zufall, gibt aber zum Weiterbearbeiten den Bildschirminhalt lesbar aus. Datei Asteroid-Python.tar.gz. (Eine Portierung fuer Python 2.4 ist in Asteroid-Python-2.4.tar.gz zu finden).
Python (2)
Straight-forward Portierung des Beispiels von Thomas Pani. Download asteroids.py.
Ruby
in der Datei asteroid.rb ist eine sehr schnelle Portierung auf Ruby.
Visual Basic 2005
und in vb2005-AsteroidsSpieler.zip eine auf Visual Basic 2005.
Attachments
-
asteroid-control-java-src.zip
(15.7 KB) - added by hwb
4 years ago.
-
asteroids_java_0.9.zip
(11.1 KB) - added by IHateCoffeeButLikeJava
4 years ago.
-
asteroid.rb
(2.4 KB) - added by adler24
4 years ago.
-
Asteroid-C#.zip
(14.1 KB) - added by hwb
4 years ago.
C#-Portierung von Patrick Mortara
-
csample.zip
(10.0 KB) - added by Thor
4 years ago.
-
Asteroids-Delph-iExe.zip
(206.5 KB) - added by JoeMerten
4 years ago.
-
Asteroids-DelphiFPC-VCLLess.zip
(20.1 KB) - added by BeRo
4 years ago.
-
java-port-3-screenshot.png
(1.2 KB) - added by Rammi
4 years ago.
Etwas kleiner, damit es nicht so protzt
-
vb2005-AsteroidsSpieler.zip
(85.7 KB) - added by Jaer
4 years ago.
Eine Portierung des Beispiels nach Visual Basic 2005
-
Asteroids-C++.2.zip
(8.7 KB) - added by AstroDefender
4 years ago.
-
Asteroids-Delphi.zip
(13.8 KB) - added by JoeMerten
4 years ago.
-
Asteroid-Python.tar.gz
(2.7 KB) - added by Whitie2008
4 years ago.
-
Asteroid-Python-2.4.tar.gz
(2.7 KB) - added by LiuBei
4 years ago.
Portierung auf Python 2.4
-
asteroids.py
(6.2 KB) - added by thpani
4 years ago.
-
Asteroid_AHK.rar
(6.4 KB) - added by Gfy
4 years ago.
-
ocaml-bindings.tar.gz
(8.2 KB) - added by CBauer
4 years ago.
OCaml Bindings
-
Asteroids-D.zip
(3.7 KB) - added by CyberShadow
4 years ago.
D-Portierung von Vladimir Panteleev
-
FBAsteroids.zip
(121.6 KB) - added by RockTheSchock
4 years ago.
-
Asteroids-C++.zip
(29.0 KB) - added by AstroDefender
4 years ago.
-
Asteroids_LabView80.zip
(201.5 KB) - added by GerdW
4 years ago.
LabView-Portierung des Samplecodes

