ruby-mine

exploring the mine

Ein 3D-Spiel in Ruby???

von murphy am 17.05.2006 (20 Uhr)

Ja. Ihr müsst euch anschauen, was David Kamphausen und sein Team dort produzieren:

Battles of Antargis - Logo

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

Name (notwendig)

Mail (wird nicht veröffentlicht)

Webseite


Kommentare

  1. Bovi schrieb am 17.05.2006 (22 Uhr)

    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

  2. Murphy schrieb am 18.05.2006 (00 Uhr)

    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!

  3. David Kamphausen schrieb am 22.05.2006 (20 Uhr)

    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.

  4. Bovi schrieb am 25.05.2006 (03 Uhr)

    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