Dem Minecraft-Spieler und YouTuber Sethbling ist es gelungen, die Programmiersprache BASIC in den Sandbox-Hit zu integrieren, ohne dabei Modifikationen oder Plugins zu benutzen. Dazu verwendet er Banner für die Darstellung des Quelltextes und eine Menge Command Blocks zum Interpretieren der Befehle. Zusätzlich enthält das Projekt eine im spielinternen Chat umgesetzte Onscreen-Tastatur zur leichteren Eingabe des Codes und fünf Speicherstände für fertige Programme.
Die BASIC-Umsetzung beherrscht nicht nur verschiedene Rechenoperationen, sondern kann auch direkt in die Spielwelt eingreifen. Sethbling zeigt dies anhand einer sogenannten "Mining Turtle" aus der Mod ComputerCraft, die automatisch Blöcke abbauen kann und hier mit einem selbst geschriebenen Programm erzeugt und gesteuert wird. Da die Redstone- und Command-Block-Logik von Minecraft nur 20 Operationen pro Sekunde ausführen kann, laufen Anwendungen allerdings recht langsam.
Das nachfolgende Video zeigt euch den Interpreter in Aktion. Falls ihr das Projekt selbst ausprobieren möchtet, findet ihr auf der Homepage von Sethbling die entsprechende Welt als Download. Auch die Minecraft-Entwickler zeigten sich von der Leistung beeindruckt: Game Designer Michael "Searge" Stoyke kommentierte die Umsetzung via Twitter mit einem begeisterten "*mind blown*".
Na wenn das nicht mal ein sinnvolles Beispiel ist welches man in einer Compilerbau Vorlesung bringen kann. Respekt :)
Compilerbau bleibt on der Kategorie "Arkane Künste" ;-)
Ich hatte bisher immer erwartet, daß sich Skynet und unsere zukünftigen Terminator-bauenden AI-Overlords aus einer ganz anderen Ecke heraus entwickeln würden – andererseits verwundert es mich nicht wirklich, daß fooking Minecraft mal irgendwann für den Untergang der Menschheit verantwortlich sein würde... Schnell, zieh irgendjemand den Stecker, bevor es zu spät ist! ;-)
Mit BASIC und 20 Operationen pro Sekunde? Da überschätzt du das Potenzial der ganzen Geschichte gewaltig. ;-)
Und genau so hat Skynet begonnen! ;-)
10 PRINT "MINECRAFT"
20 GOTO 10
RUN
Warte auf den ersten, der minecraft in minecraft nachbaut...
https://www.youtube.com/watch?v=GwHBaSySHmo
Ach ja Zeit müsste man haben... Hab ein ähnliches Projekt nie zuende geführt, allerdings war das ein externer Compiler der von einem Lua-Dialect nach Command-Blöcken compiliert hat. Einen ganzen Interpreter in Minecraft zu bauen nötigt mir dann doch Respekt ab.
Hmmm... der Code oben im Teaser sieht eigentlich eher nach Pascal aus, nicht Basic. Da fehlen mir allein schon die basictypischen Laufnummern im Listing. Es sei denn, man hat sie ausgeblendet? Natuerlich koennte ich mich auch irren, weil ich nur wenige Basic Versionen gesehen/programmiert habe (CPC-Amstrad Locomotive Basic, Q-Basic...) und diese hier vielleicht ein Hybrid ist, der sich an Pascal oder C orientiert.
BASIC gibt es in ziemlich vielen Variationen und Zeilennummern hatten glaube ich eh nur die wenigsten Dialekte wie zB. Microsoft BASIC vom C64.
Kann natuerlich sein. Allerdings sieht die auf Prozeduren basierende Architektur auch verdaechtig nach Pascal aus. Und den Funktionsbefehl kenne ich in Basic ueberhaupt nicht. - Naja, ist aber auch Korinthenkackerei, denn die werden heute eh alle nicht mehr benutzt. ;)
Pascal sah glaube ich so aus (schon ewig her, daß ich das mal benutzt habe):
PROCEDURE MachWas():
BEGIN
tu_was();
noch_was();
END;
Und:
FUNCTION MagDasHinkommen():
BEGIN
MagDasHinkommen := TRUE;
END;
Oder so in der Art, wenn ich mich recht entsinne.
Stimmt, da waren immer so total aus der Mode gekommene Semikolons nach jeder Zeile. Schon schlimm, was der Herr Pascal sich da ausgedacht hatte... ^^
Basic setzt schon siet den frühen 90ern keine Zeilennummern emhr voraus (QBasic von MS bspw.).
Das Function-Statement ist Teil der Subroutinen in den Basic-Dialekten der 90er. Basic kann funktional.
Edit: falsche gedrückt. Sollte an Toxe dran.
Die ; sollten die Lesbarkeit erhöhen, da man ja Befehle auch über mehrere Zeilen schreiben kann.
Mal den Code verbessert basierent auf Borland:
PROCEDURE MachWas;
BEGIN
tu_was; // wenn man keine Parameter übergibt kommen keine () hin.
noch_was;
END;
Und:
FUNCTION MagDasHinkommen: Boolean
BEGIN
result := TRUE;
END;
Also doch Pascal??
Nö, definitiv BASIC (s. o.). Habe selber damals zu Beginn der 90er schon in solch einem "moderneren" BASIC Programmieren gelernt. Da geht einiges, was die Strukturieren der Programme mit SUBS und Funktionen angeht. War dann final Quickbasic 7.1, da ging einiges. :D
Na Gott sei Dank. Ich fand die Zeilennummern damals schon immer affig. ;)
Beeindruckend.
Kann ich ja mal endlich meinen Fahrstuhl aus der Schule nachbauen, mit GWBasic :-D :-D :-D :-D