Un space invaders avec Opal.rb - partie 11
Je continue le refactoring de la méthode update
:
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:
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:
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
:
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:
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.
/ / / / / / / / / /