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) }
endJe 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) }
endC’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
endMais 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
endC’est pas encore le top, mais ça ira pour l’instant. On voir pouvoir ajouter quelques nouvelles fonctionnalités.
À demain.
/ / / / / / / / / /