Jumping Engineer: Nächste Schritte mit microStudio

microStudio
Spieleprogrammierung
Autor:in

Jörg Kantel

Veröffentlichungsdatum

9. März 2024

Ich habe über den gestrigen Feiertag wie angekündigt dafür genutzt, meine Experimente mit microStudio, der kleinen, meiner Meinung nach völlig unterschätzten Game Engine, fortzusetzen. Dafür habe ich eines der mitgelieferten Tutorien gekapert und es nach meinen Bedürfnissen aufgemotzt.

Herausgekommen ist dabei ein kleines, tatsächlich spielbares Plattform-Game:

init = function()
  hero = object
    y = 0
    vy = 0
    w = 32
    h = 32
    im = "hero_idle"
  end
  blades = [400, 600, 800]
  passed = [0, 0, 0]
  gameover = 0
  running = 0
  score = 0
  position = 0
  speed = 2
  acc = 0.001
end

update = function()
  if gameover > 0 then
    gameover += 1
    if gameover > 300 then
      init()
    end
  elsif running then
    hero.im = "hero_running"
    position += speed
    speed += acc
    if keyboard.UP and hero.y == 0 then
      hero.vy = 9
    end
    hero.vy -= 0.3
    hero.y = max(0, hero.y + hero.vy)
    for i=0 to blades.length - 1
      if blades[i] < position - 120 then
        blades[i] = position + 360 + random.next()*200
        passed[i] = 0
      end
      if abs(position - blades[i]) < 16 then
        if hero.y < 10 then
          running = 0
          gameover = 1
        elsif not passed[i] then
          passed[i] = 1
          score += 1
        end
      end
    end
    else
      if touch.touching then
        running = 1
      end
  end
end

draw = function()
  screen.fillRect(0,0,screen.width,screen.height,"rgb(49,147,81)")
  screen.drawSprite(hero.im,-80,-44 + hero.y, hero.w)
  for i=-6 to 6 by 1
    screen.drawSprite("wall", i*40 - position % 40, -80, 40)
  end
  for i=0 to blades.length-1
    screen.drawSprite("blade", blades[i]-position - 80, -54, 40)
  end
  screen.drawText(score, 120, 80, 20, "rgb(250, 25, 25")
  if gameover then
    hero.im = "hero_idle"
    screen.fillRect(0, 0, screen.width, screen.height, "rgba(255, 0, 0, 0.5")
    screen.drawText("GAME OVER", 0, 0, 50, "rgb(250, 250, 250")
  end
end

Ich habe dafür auch nur wenig mehr als 70 Zeilen Code gebraucht, denn die Animation des Player-Sprites übernahm die Engine komplett für mich. Das Spiel erfüllt all das, was man von einem Plattformer erwartet, Ihr könnt es selber testen:

Ein Mausklick startet das Spiel, mit der UP-Taste wird der kleine Ingenieur zum Hüpfen gebracht.

Auch wenn es einfach aussieht, es spielt sich gar nicht so leicht. Ich jedenfalls bin bisher noch nicht weit über 25 Punkte hinausgekommen.

Die Beschäftigung mit diesem Tutorial hat mir auch den Zusammenhang zwischen den Bildschirm- und den Game-Koordinaten klargemacht. Das war zu Beginn für mich doch ein wenig verwirrend. In einem späteren Beitrag werde ich diesen Zusammenhang ausführlicher erläutern.

Die Sprites sind dieses Mal ausnahmsweise nicht von Kenney, sondern entstammen dem freien (CC-BY 4.0) DawnLike-Tileset des Users DragonDePlatino. Mit dem wollte ich ebenfalls schon lange mal wieder etwas anstellen. Die Lizenz schreibt vor, daß man auch DawnBringer als Schöpfer und Ideengeber erwähnt. Dem bin ich hiermit nachgekommen.