![]()
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 LES RÈGLES
QUELQUES CONSEILS
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). 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. DOCUMENTATION PYXEL
|