PYXEL STUDIO
lien à conserver: www.nuitducode.net/pyxel/studio/8u3lxb5g

Durant l'épreuve de la Nuit du Code, vous disposerez de 6 heures pour créer un jeu avec Python / Pyxel. Pour cela, vous pouvez utiliser les ressources (fichiers .pyxres) mises à votre disposition ou partir de zéro avec le fichier res.pyres.

LES RÈGLES
  • La taille de l'écran du jeu doit être de 128x128 pixels: pyxel.init(128, 128, title="Nuit du Code 2022").
  • Plusieurs ressources graphiques (fichiers .pyxres) seront proposées. Cependant, vous n'êtes pas obligés de les utiliser. Vous pouvez créer vos propres images avec l'éditeur Pyxel. Vous pouvez aussi créer un jeu sans images, en utilisant seulement les formes géométriques.
  • Il n'est pas autorisé de regarder ou copier/coller du code trouvé sur internet ou votre ordinateur.
  • Il n'est pas autorisé d'aller chercher des tutoriels (vidéos ou autres) durant l'épreuve. Le code doit venir de vous.
  • Vous devez écrire une courte description et documentation (ou mode d'emploi) de votre jeu (cliquer sur le bouton ). La documentation fait partie de l'évaluation du jeu.
  • Vous êtes totalement libre de créer le jeu que vous voulez. Soyez créatif!
  • Vous avez le droit de demander de l'aide aux professeurs qui encadrent l'épreuve. Ils ne vous donneront pas un code complet, mais certainement de bons conseils pour avancer. Soyez patients: lorsque vous avez travaillé pendant plusieurs heures sur un projet, il est très difficile pour quelqu'un qui le découvre de répondre rapidement à une question.
  • Vous avez le droit de demander de l'aide à vos camarades des autres équipes participantes. La Nuit du Code est un événement festif et l'entraide est fortement recommandée.
QUELQUES CONSEILS
  • Avant de vous lancer dans le code, prenez le temps d'imaginer votre jeu. Passez en revue les ressources. Prévoyez de réaliser rapidement une version simple, mais jouable de votre jeu. Puis, si vous en avez le temps, rajoutez au fur et à mesure des éléments de complexité: niveaux de difficulté, scores, son, etc.
  • Vous travaillez à deux ou trois: organisez-vous pour être les plus efficaces possible.
  • Pensez à télécharger régulièrement vos fichiers .py et .pyxres (si vous l'utilisez) en leur donnant des numéros de version (un problème technique peut toujours survenir)
  • N'oubliez pas de faire des pauses, d'aller voir ce que font les autres, de boire et de manger !
  • Et puis surtout, rappelez-vous: c'est un jeu ! Amusez-vous !
  • ndc.py
  • 1.pyxres
  • 2.pyxres
  • resperso.pyxres
ndc.py
import pyxel from random import randint ### VARIABLES COMMUNES ### SOL = 200 PLAFOND = 50 H_OBSTACLE = 30 L_OBSTACLE = H_OBSTACLE / 2 H_JOUEUR = 32 # taille réelle du sprite (animation) class Player: def __init__(self, x, y, vy=0, mode='run', sur_sol=True): self.x = x self.y = y self.vy = vy self.mode = mode self.sur_sol = sur_sol #kyllian: initialisation pour l'animation du joueur self.frame_index = 0 self.frame_delay = 3 # délai entre les frames (15 FPS => toutes les 3 frames) self.frames = [ # liste des frames (u, w) => coordonnées de l'image dans la sprite sheet (72, 31), (104, 31), (136, 23), (160, 31), (192, 31), (224, 32) ] def mouvement(self): if self.mode == 'vol': # modalité vol if pyxel.btn(pyxel.KEY_W): self.y -= 2 if pyxel.btn(pyxel.KEY_S): self.y += 2 else: # modalité sol if self.sur_sol and pyxel.btn(pyxel.KEY_SPACE): self.vy = -10 # saut self.sur_sol = False # Gravité (constamment appliquée) self.vy += 0.7 self.y += self.vy # Ground collision if self.y >= SOL - H_JOUEUR: self.y = SOL - H_JOUEUR self.vy = 0 self.sur_sol = True def update(self): self.mouvement() #kyllian: mise à jour de l'animation toutes les frame_delay images if pyxel.frame_count % self.frame_delay == 0: self.frame_index = (self.frame_index + 1) % len(self.frames) def draw(self): #kyllian: affichage du sprite animé ou sprite de saut selon sur_sol u, w = self.frames[self.frame_index] if not self.sur_sol: pyxel.blt(self.x, self.y, img=0, u=160, v=0, w=31, h=40, colkey=10) # sprite de saut else: pyxel.blt(self.x, self.y, img=0, u=u, v=0, w=w, h=40, colkey=10) # sprite courant class Obstacle: def __init__(self): self.x = 256 self.y = SOL - H_OBSTACLE self.vx = 2 def mouvement(self): self.x -= self.vx #déplacement continu de l'obstacle def update(self): self.mouvement() def draw(self): pyxel.rect(self.x, self.y, L_OBSTACLE, H_OBSTACLE, 6) class Game: def __init__(self): pyxel.init(256, 256, title="Run and Fly", fps=15) #kyllian: chargement des ressources pour les sprites pyxel.load("resperso.pyxres") self.player = Player(70, SOL) self.obstacle1 = Obstacle() #kyllian: lance une musique de fond pyxel.playm(0, loop=True) pyxel.run(self.update, self.draw) def collisions(self): #gère collisions entre itérations de classes if self.obstacle1.x <= (self.player.x + H_JOUEUR * (3 / 4)) <= (self.obstacle1.x + L_OBSTACLE) and self.obstacle1.y <= (self.player.y + H_JOUEUR / 2) <= (self.obstacle1.y + H_OBSTACLE): pyxel.quit() #rajouter ici mort @Evan def update(self): self.player.update() self.obstacle1.update() self.collisions() def draw(self): pyxel.cls(0) # fond noir #kyllian: affichage d’un fond image à la position du sol pyxel.blt(0, SOL, img=1, u=0, v=8, w=255, h=16, colkey=0) self.player.draw() self.obstacle1.draw() # Lancer le jeu Game()
Documentation
BIBLIOTHÈQUES

Si vous utilisez des bibliothèques tierces pour votre projet (c'est-à-dire de bibliothèques qui ne sont pas des bibliothèques standard de Python), indiquez-les ci-dessous (noms séparés par des virgules).
Voir la liste des bibliothèques tierces disponibles.

Exemple: numpy,pandas

Remarque: ne déclarer que des bibliothèques tierces, pas des bibliothèques standard de Python. Par exemple, random est une bibliothèque standard, pas une bibliothèque tierce.

cliquer sur pour lancer le jeu