Xavier Nayrac

Rubyiste accro au TDD, serial blogger, apprenti data scientist, heureux utilisateur de Vim, accordéoniste.
Si vous vous sentez particulièrement généreux, suivez moi sur Twitter.

Un space invaders avec Opal.rb - partie 11

| Comments

Niveau : intermédiaire

Je continue le refactoring de la méthode update:

1
2
3
4
5
6
7
8
9
10
  def update
    @enemies.each do |e|
      if e.x <= 10 || e.x + e.w >= 690
        change_enemies_direction
        enemies_down
        break
      end
    end
    @enemies.map {|enemy| enemy.move(@direction) }
  end

Je n’aime pas la condition multiple après le if. Je préfère:

1
2
3
4
5
6
7
8
9
10
  def update
    @enemies.each do |enemy|
      if side?(enemy)
        change_enemies_direction
        enemies_down
        break
      end
    end
    @enemies.map {|enemy| enemy.move(@direction) }
  end

C’est bien mieux. La définition de la méthode side? pourrait être:

1
2
3
4
5
  private

  def side?(enemy)
    enemy.x <= 10 || enemy.x + enemy.w >= 690
  end

Mais il reste des nombres magiques. En particulier le nombre 690, qui signifie 10 pixel avant la largeur du canvas. J’ai donc besoin d’ajouter ces notions à la classe Enemies:

1
2
3
4
5
6
7
8
9
10
class Enemies
  include Enumerable
  ENEMIES_PER_ROW = 10
  SIDE_MARGIN = 10

  def initialize(world_width)
    @world_width = world_width
    .
    .
    .

La méthode side? devient donc:

1
2
3
  def side?(enemy)
    enemy.x <= SIDE_MARGIN || enemy.x + enemy.w >= @world_width - SIDE_MARGIN
  end

C’est pas encore le top, mais ça ira pour l’instant. On voir pouvoir ajouter quelques nouvelles fonctionnalités.

À demain.

Articles connexes

Commentaires