Course Website
Cours : Jeudi 8h15–9h00, CM 1 4
Exercices : Jeudi 9h15–11h, INF 3, BC 07-08
Cette semaine, nous complexifions deux aspects de notre jeu. Nous ajoutons une nouvelle arme, l’épée, ainsi qu’un nouveau monstre, la chauve-souris.
Répartissez-vous les tâches de manière à pouvoir travailler indépendemment et en parallèle.
Pour l’instant, votre joueur n’a qu’un boomerang à sa disposition. Nous allons lui ajouter une épée. Lorsque le joueur appuie sur la touche R du clavier, il change d’arme active. Par défaut, l’arme active est le boomerang. Lors de l’appui sur la touche D, c’est l’arme active qui est utilisée, dans la direction actuelle du joueur.
Ajoutez une icône en haut à gauche de l’écran qui montre en tous temps quelle est l’arme active.
L’animation d’attaque à l’épée dépend de la direction actuelle du joueur, en suivant le modèle "assets/Top_Down_Adventure_Pack_v.1.0/Char_Sprites/char_attack48_{dir}_anim_strip_6.png".
Ces animations comportent 6 frames de 50 ms chacune.
Attention, les frames ont une taille de 48x48 pixels et non les 16x16 habituels.
Utilisez le paramètre tile_size de _load_animation_strip pour charger la bonne taille.
Si l’épée est active lors de l’appui sur D, les événéments suivants doivent se produire :
Optionnel : pendant que l’épée est active, bloquez les déplacements du joueur et cachez son sprite. Vous aurez alors un meilleur rendu graphique.
Optionnel : pendant qu’une arme est active (épée ou boomerang), bloquez l’effet de la touche R aussi.
L’épée n’interagit pas avec les autres sprites sur le jeu (comme les buissons). Elle passe à travers.
Si un monstre attaque le joueur “par derrière” pendant que l’épée est active, que devrait-il se passer ? Est-ce que votre implémentation a le comportement attendu ?
Question de design : Comment gérez-vous le fait que vous avez maintenant deux types d’armes, avec des comportements différents ? Pensez-vous que vous pourriez ajouter une troisième arme sans tout refaire ?
Les chauves-souris sont un nouveau type de monstre, pour déjouer les plans du joueur.
Comme les spinners, si le joueur touche une chauve-souris, il perd. De même, si l’épée ou le boomerange touche une chauve-souris, celle-ci est tuée et retirée du jeu.
L’animation pour la chauve-souris est disponible dans "assets/Top_Down_Adventure_Pack_v.1.0/Enemies_Sprites/Pinkbat_Sprites/pinkbat_idle_left_anim_strip_5.png" (5 frames).
On place une chauve-souris sur la carte avec un nouveau caractère : v.
Sa position de départ définit un “champ d’action” dans laquelle elle est autorisée à voler.
À vous de définir ce champ d’action : cela peut être un disque centré sur la position de départ, ou un rectangle, etc.
Le champ d’action de chaque chauve-souris est défini au chargement de la carte, et ne change plus après.
Le comportement de la chauve-souris est erratique et aléatoire. Mais on ne veut pas non plus qu’elle soit trop aléatoire. Il faut faire en sorte que son mouvement ait l’air plus ou moins naturel.
Voici d’abord quelques règles strictes à respecter :
Nous ne prescrivons pas de formule précise pour leurs mouvements. Voici en revanche quelques “idées” qui peuvent vous lancer :
Pour générer des nombres aléatoires en Python, consultez la documentation sur les distributions à valeurs réelles du module random.
Pour vos tests, vous voudrez peut-être que le comportement des chauves-souris reste exactement le même d’une fois à l’autre (tout en suivant l’algorithme “aléatoire” que vous avez écrit).
Pour cela, vous pouvez créer une instance de random.Random(seed) où seed est une constante entière, toujours la même.
Pour le jeu normal (hors tests), utilisez une instance créée avec None comme seed (afin que chaque nouvelle partie soit différente).
Question de design : Comment gérez-vous le fait que vous avez maintenant deux types de monstres, avec des comportements différents ? Pensez-vous que vous pourriez ajouter un troisième monstre sans tout refaire ?
N’oubliez pas de compléter votre fichier LOG.md.