Ja. Ihr müsst euch anschauen, was David Kamphausen und sein Team dort produzieren:
Ein Open-Source-3D-Echtzeit-Strategiespiel zum Mitmachen!
Die Grafik des Spiels läuft mit C++, aber die gesamte Spiellogik (Lebewesen, Feinde/Freunde, Regeln, Physik, Interaktion, Level, Scripte, ...) ist in Ruby programmiert und dementsprechend änderbar. Schon jetzt hat das Spiel über 12.000 Zeilen Ruby-Code. Es soll auf Windows, Linux und FreeBSD laufen.
Das hier ist ein Ruby-Blog, und ihr wollt sicher Code sehen. Also schauen wir doch mal, wie so ein Antargis-Schaf eigentlich funktioniert (ant_sheep.rb):
class AntSheep<AntAnimal def eventJobFinished super if @dead newRestJob(30) if @alreadyDead $map.removeEntity(self) end @alreadyDead=true return end # BIRTHRATE is here: if @lastBirth>40 then # make child puts "A SHEEP IS BORN" sheep=AntSheep.new sheep.setPos(getPos2D) $map.insertEntity(sheep) getMap.endChange newRestJob(2) @lastBirth=-rand()*10 elsif rand<0.5 then newMoveJob(0,getTargetPos,0) setMeshState("go") else newRestJob(3) setMeshState("eat") playSound("sheep") end @foodAdd+=1 #puts "FOOOOOD #{@foodAdd}" if @foodAdd>3 and resource.get("food")<10 #puts "RESOURCE: #{resource.get("food")}" resource.add("food",1) #puts "RESOURCE: #{resource.get("food")}" @foodAdd=0 end @lastBirth+=1 end ...
Süß! Schafe können laufen, sterben, Kinder kriegen und fressen. Ein tolles Leben hat so ein Schaf.
Wenn ihr das Leben der Schafe noch interessanter gestalten wollt, zeichnen, musizieren, programmieren, Geschichten erfinden oder testen könnt, dann helft dort mit!
Kommentar schreiben
Kommentare
Bei so einem Spiel würde sich doch eine Ruby eigene DSL eignen. Wo der letzte Artikel gerade auf das Thema zielte. class AntSheep < AntAnimal + :born + :die + :maeee - :fight def maeee playSound("maaaeee") end end Mixins würden hier natürlich auch sinn machen. Von wegen :Tier und :Aggressiv oder :Friedlich. der Daniel
ja, der urheber scheint Ruby noch nicht so gut zu kennen (benennung, style...) und noch nicht voll auszunutzen. umso mehr raum für verbesserungen und mitarbeit!
Der Stil basiert zum großen Teil auf dem der zu grunde liegenden C++-Bibliothek. Aber toll ist er deswegen nicht... Das ist mein erstes größeres Projekt mit Ruby, also bin ich noch nicht so drin in dem Thema. Was mich mal interessieren würde ist, ob man eine Sandbox innerhalb von Ruby aufbauen kann, um unsichere Levelscripts laufen zu lassen.
Hi David, ja das geht. Es gibt ein Security Level in Ruby. Das höchste Level simuliert eine Art Blackbox. Weiterhin kann man bestimmte Objekte als unsicher bzw. als sicher makieren. Darauf aufbauend funktionieren in bestimmten Security Levels dann destruktive Funktionen mit diesen Objekten nicht mehr. der Daniel