On arrive doucement vers la fin et on se rapproche d’un jeu complet en ajoutant un score et des vies.

Score

Ça a beau être du DragonRuby, on peut quand même utiliser nos bonnes vieilles variables d’objet. À priori une variable @score pour un objet Game a du sens :

    @score = 0

Il faut bien sûr l’afficher :

    outputs.labels << {
      x: 900,
      y: 10,
      size_px: 55,
      alignment_enum: 2,
      vertical_alignment_enum: 0,
      text: @score,
      r: 255,
      g: 255,
      b: 255,
    }

Et on augmente le score au bon moment :

    state.aliens.each do |alien|
      if alien.dead
        @score += 100
        # ...
      end
      # ...
    end

Vies

Pour les vies ce sera la même mécanique. D’abord une variable et un affichage :

    @lives = 3

    @lives.times do |i|
      outputs.sprites << {
        x: 1_000 + i * 80,
        y: 50,
        w: 7 * 3,
        h: 17 * 3,
        path: 'sprites/hero-flying-0.png'
      }
    end

Puis une mise à jour quand on est touché par un alien. J’ai aussi ajouté du son :

  def calc_alien_collision
    if a = Geometry.find_intersect_rect(state.hero, state.aliens)
      @lives -= 1
      if @lives == 0
        @game_over = true
        audio[:game_over] = { input: "sounds/game-over.wav" }
        return
      end
      audio[:live_down] = { input: "sounds/life-lost.wav" }
      state.hero.x = 120
      state.hero.y = 700
    end
  end

Références

  1. Vous trouverez le code de Jetpack Hero sur github
  2. Documentation de DragonRuby


/ / / / / / / / / /


Cet article fait partie d’une série :

  1. Jetpack Hero
  2. Partie II
  3. Une platforme, des collisions
  4. Première animation du personnage
  5. Ajouter des platformes
  6. Du carburant pour le jetpack
  7. Collecte de minerai
  8. Effets sonores
  9. Du rangement avec la classe Game
  10. Apparition des aliens
  11. Tir du personnage
  12. On dégomme de l’alien
  13. GAME OVER
  14. Les aliens bougent enfin
  15. Plusieurs petites animations
  16. Un score et des vies