Écrire un jeu en 2d avec Ruby et Gosu - partie 7
Ça fait plus de 2 mois que je dois terminer ce jeu et cette série d’article, alors au boulot !
Pour cette nouvelle version je voudrais ajouter une musique différente pour le game over. Et aussi pouvoir enfin recommencer une nouvelle partie après un game over.
La totalité des articles:
- Installation de Gosu, affichage d’images statiques
- Déplacer le joueur et pluie de smileys
- Beep, fonte et collecte des smileys
- On s’occupe des vies
- Musique et game over
- Affichage selon un angle
- Plusieurs musiques et reset de la partie
Plusieurs musiques
Nous allons devoir gérer plusieurs musiques. Donnons leur des noms plus simple à manipuler que leurs paths :
Et avec quoi écoute-t-on de la musique ? Avec un song player :
Dans la classe Window
on remplace l’ancienne manière de jouer une musique :
par notre nouvelle abstraction :
N’oubliez pas d’ajouter les require qui vont bien dans le fichier main.rb
:
Trouver un bon endroit où mettre le code pour changer la musique après un
game over n’est pas si
évident que ça. Le moment où l’on capte que le jeu est dans l’état game over est
la méthode update_player
:
Et il semblerait vraiment bizarre de modifier la musique alors qu’on est sensé mettre à jour le joueur. Autrement dit, le code suivant ne me plait pas :
À bien y réfléchir, le problème vient d’avant. On ne devrait pas changer l’état
de @game_over
ici, mais plutôt dans la méthode update
:
Changer la musique se fera donc de cette manière :
Après extraction d’une nouvelle méthode, nous obtenons un code plus clair :
Nouvelle partie
Ok, il est temps maintenant de pouvoir jouer une nouvelle partie après un game over. Pour cela, il faut regarder si le joueur appuie sur la touche espace pendant l’état game over, et dans ce cas faire un reset :
On peut tout de suite extraire une méthode new_game?
:
On peut maintenant réfléchir à la méthode reset
, qui a son tour appellera
la méthode reset
du joueur. Ces deux méthodes sont évidentes :
Pour terminer cette version, on va ajouter un message «press space to start» qui bouge pour attirer l’attention. Pour ça, on varie régulièrement d’une petite quantité la coordonnée y du message.
Pour finir, voici le contenu du jeu pour l’instant:
$ tree
.
├── assets
│ ├── fonts
│ │ └── VT323
│ │ ├── OFL.txt
│ │ └── VT323-Regular.ttf
│ ├── images
│ │ ├── background.png
│ │ ├── heart.gif
│ │ ├── player.png
│ │ ├── smiley-green.png
│ │ └── smiley-yellow.png
│ ├── songs
│ │ ├── Around the Bend.ogg
│ │ └── In early time.ogg
│ └── sound
│ ├── collect.wav
│ └── life-lost.wav
├── button.rb
├── main.rb
├── player.rb
├── smiley.rb
├── song_player.rb
├── song.rb
├── ui.rb
├── window.rb
└── z_order.rb
Le code et les assets se trouvent sur Github. La version précise pour cet article est la version 0.7.0.