Du rangement avec la classe Game (Jetpack Hero)
Quand on commence l’écriture d’un jeu avec DragonRuby il est d’usage de tout mettre dans la
méthode tick
.
def tick(args)
# Tout le jeu
end
C’est le niveau zéro de la structuration (il n’y en a pas) mais c’est idéal pour commencer rapidement et sans prise de tête. Bien sûr ça devient assez vite le fouillis…
Niveau 1
Quand ça devient le cas, le pattern à suivre est de séparer le code en 4 méthodes :
def tick(args)
defaults(args)
render(args)
input(args)
calc(args)
end
def defaults(args)
# Code pour l'initialisation
end
def render(args)
# Code dédié à l'affichage
end
def input(args)
# Gestion du clavier, des manettes, etc
end
def calc(args)
# Tout les calculs
end
Passer du niveau zéro au niveau 1 est très rapide et on gagne tout de suite en clarté, mais immanquablement il arrive là aussi un moment où le contenu de ces méthodes devient incontrôlable.
Niveau 2
Il est alors d’usage d’exploser le contenu en plusieurs méthodes,
chacune gérant sa propre affaire (on dirait concern en anglais). Par exemple
la méthode calc
de notre jeu pourrait ressembler à ceci si on la remaniait de
cette manière :
def calc(args)
calc_init(args)
calc_hero_location_y(args)
calc_direction(args)
calc_platform_collisions(args)
calc_picking_fuel(args)
calc_picking_ore(args)
calc_collecting_ore(args)
end
Mais je n’aime pas faire cette étape. D’un côté c’est évidemment mieux que sans, car il
est préférable d’avoir dix méthodes de dix lignes qu’une seule de cent lignes.
D’un autre côté le passage en argument de args
dans toutes les méthodes ne
fait que souligner ce qu’il manque : une classe.
Niveau 3
C’est pourquoi on va passer directement au niveau supérieur :
class Game
attr_gtk
def tick
defaults
render
input
calc
end
def defaults
# ...
end
# ...
end
$game = Game.new
def tick(args)
$game.args = args
$game.tick
end
attr_gtk
nous fournit magiquement @args
et des méthodes comme outputs
ou inputs
qui nous permettent de se passer d’écrire args
partout.
Références
- Vous trouverez le code de Jetpack Hero sur github
- Documentation de DragonRuby
Cet article fait partie d’une série :
- Jetpack Hero
- Partie II
- Une platforme, des collisions
- Première animation du personnage
- Ajouter des platformes
- Du carburant pour le jetpack
- Collecte de minerai
- Effets sonores
- Du rangement avec la classe Game
- Apparition des aliens
- Tir du personnage
- On dégomme de l’alien
- GAME OVER
- Les aliens bougent enfin
Commentaires
Pas encore trouvé de solution simple et non-invasive pour avoir des commentaires sur le blog. En attendant vous pouvez laisser votre Commentaire sur mastodon@lkdjiin