Projet à rendre : Premier Jeu rétro 2D en Python¶
Le projet est un projet de groupe, il doit être réalisé IMPERATIVEMENT par des groupes de 2 ou 3 élèves.
Aucun projet réalisé par un seul élève ne sera accepté.
ATTENTION : Seules les techniques et méthodes abordées en cours ou précisées dans ce document peuvent être utilisées. Tout ce qui n'a pas été vu en cours ou qui n'est pas abordé dans ce document est donc INTERDIT, en particulier l'utilisation de types construits ou encore la programmation objet ne sont pas autorisés.
La note dépendra de la qualité du jeu (jouabilité, prise de risque, originalité...) mais éventuellement aussi d'une évaluation orale sur le projet.
Le but du projet est de créer un jeu vidéo 2D rétro en Python en utilisant IMPERATIVEMENT le module pyxel, module que nous avons commencé à voir à travers les différents TD.
Chaque groupe doit créer un petit jeu de son choix, faites preuve d'originalité !

Le projet - l'application pyxelstudio.¶
Pour utiliser pyxel, vous pouvez soit installer le module pyxel sur une machine (pip install pyxel) soit coder directement en ligne à l'adresse : https://www.pyxelstudio.net.
Dans le cadre de ce projet, il est demandé d'utiliser l'application en ligne : pyxelstudio.net (le projet sera rendu en donnant cette url.)
Même si ce n'est pas obligatoire pour utiliser pyxelstudio, je recommande fortement de vous enregistrer.
ATTENTION : Ne surtout pas perdre l'url donnée par pyxelstudio si vous n'êtes pas enregistrés, sinon tout le projet est perdu.
L'interface est simple et intuitive, elle ne devrait pas poser de problème.
Il y a 2 blocs de 4 boutons.
Les 4 premiers boutons (de gauche à droite) permettent de :
Télécharger et importer des fichiers pour le jeu (par défaut app.py le fichier python et res.pyxres le fichier qui contient les images.
Pensez à faire des sauvegardes régulières de ces 2 fichiers, en cas de problème sur le serveur, tout serait perdu sans ces sauvegardes !!
Éditer le code Python du jeu. Pensez à cliquer sur l'icône en forme de disquette pour sauvegarder (et à la fin sauvegarder sur votre dd ou clé usb avec la 1ère icône).
Éditer le fichier res.pyxres, c'est là que vous allez pouvoir faire tout ce qui concerne le graphisme de votre jeu
Lancer le jeu en ligne. Le jeu le lance mais vous avez aussi la possibilité d'ouvrir une console (ce qui vous permettra par exemple d'afficher des résultats de variables pour faire des tests avec la fonction print())
Les 4 suivants permettent de :
Ajouter une description et des commentaires. Ces 2 parties devront être complétées à la fin pour rendre le projet.
Ajouter des modules. Ce bouton ne servira pas.
Modifier l'affichage de la fenêtre.
Afficher une petite documentation avec toutes les fonctions pyxel.
Compléments pyxel.¶
Gérer des collisions.¶
Dans le cadre d'un petit jeu, vous risquez d'avoir à gérer des collisions. Ce n'est pas simple avec le peu d'outils dont on dispose en ce début d'année (et ce n'est d'ailleurs jamais simple avec pyxel), je vous donne ci-dessous une possibilité :
Une méthode pour détecter des collisions consiste à tester la couleur du fond autour d'un objet avec la fonction pget qui permet de récupérer la couleur aux coordonnées (x, y) : pyxel.pget(x, y). Elle renvoie un entier compris entre 0 et 15. Si le fond est, par exemple, noir, la couleur renvoyée doit être 0, si ce n'est pas le cas, c'est qu'il y a une collision. Attention, il faut tester la couleur tout autour de l'objet qu'on dirige pour voir s'il est toujours sur un fond noir.
Pour rendre le projet plus esthétique, on peut dessiner des sprites au lieu d'utiliser uniquement des rectangles ou des disques.
Utiliser des images.¶
Avec pyxel, on peut dessiner ses propres objets au lieu de se contenter de rectangles et de disques. Pour cela, il faut utiliser un petit éditeur d'image qui est inclu dans pyxel. On peut ouvrir l'éditeur d'image depuis la console système (cmd sous Windows, Terminal sous MacOS) en saisissant pyxel edit, mais comme le projet sera fait avec pyxelstudio, je ne vais pas détailler ce principe.
Vous utiliserez l'éditeur intégré à pyxelstudio en cliquant sur l'icône en forme de crayon.
Pensez à sauvegarder vos images en cliquant sur la sorte de flêche en haut à droite de l'éditeur ! L'éditeur met à jour le fichier res.pyxres (vous pouvez aussi y accéder en affichant la liste des fichiers).
ATTENTION : pour que vos images puissent être utilisées, il faut ajouter la ligne dans le code de votre jeu : pyxel.load("res.pyxres"). Vous pouvez l'ajouter avant la dernière ligne qui est : pyxel.run(update, draw)

Une fois les images réalisées (en pixels) et sauvegardées, on peut utiliser la fonction blt du module pyxel : pyxel.blt(x, y, image, u, v, w, h). Elle permet de copier la zone de l'éditeur débutant aux coordonnées (u, v) et de dimensions (w, h) (pour width et height) de la banque d'images image (entier de 0 à 2, voir le numéro en bas à droite de l'éditeur) aux coordonnées de la fenêtre (x, y). Quand vous déplacez le curseur vous pouvez voir les coordonnées s'afficher en haut de la fenêtre.
Par exemple pour afficher le vaisseau de l'image précédente dans la fenêtre aux coordonnées (100, 50), on écrira : pyxel.blt(100, 50, 0, 0, 0, 8, 8)
Vous pouvez dessiner aussi bien un décors complet (128 pixels par 128) que des sprites pour des personnages ou des objets.
Bien que pyxel permette aussi d'ajouter de la musique, il n'est pas demandé de le faire dans le cadre de ce projet.
Le but est de faire un petit jeu "qui tourne" et si possible, en plus, qui soit "joli". Une idée originale sera la bienvenue !
Pensez à faire des sauvegardes régulières sur différents supports !
Pour rendre le projet, il suffira m'envoyer l'adresse du projet. J'aurai alors accès à tout le projet directement avec cette url.
À vous de jouer (ou plutôt de travailler)...¶
Note : Vous pouvez retrouver toutes les informations sur le module pyxel à l'adresse : github pyxel