''' Programme pyxel inspiré d ' un tutoriel en ligne de " la Nuit du Code " https://nuit-du-code.forge.apps.education.fr/DOCUMENTATION/PYTHON/01-presentation/ https://www.cahiernum.net/KV8H5B Licence GNU (https://github.com/nuitducode/DOCUMENTATION/blob/main/LICENSE)
Module basé sur une architecture MVC ( modèle - vue - controleur ) globale et également intégrée aux objets .
'''
#Importation
import pyxel
import random
#Constantes
COULEUR_PERE_NOEL = 1
COULEUR_TIR = 10
COULEUR_ENNEMI = 8
X1_SAPIN = 25
Y1_SAPIN = 46
X2_SAPIN = 38
Y2_SAPIN = 19
X1_CADEAU1 = 14
Y1_CADEAU1 = 110
X2_CADEAU1 = 22
Y2_CADEAU1 = 115
#Déclaration des classes
""" Classe intégrant la gestion du Modèle et de la Vue relative au Perenoel du joueur. """
class Objet :
def __init__ ( self ) - > None :
self . x = 115 # coordonnée x du coin haut à gauche du carré
self . y = 0 # coordonnée y du coin haut à gauche du carré
def afficher ( self : ' Objet ' , x1 , y1 , x2 , y2 ) - > None :
""" Affichage des objets """
pyxel . blt ( self . x , self . y , 0 , x1 , y1 , x2 , y2 )
#Co :25,46,38,19
class Perenoel :
def __init__ ( self , couleur : int = COULEUR_PERE_NOEL ) - > None :
self . x = 60 # coordonnée x du coin haut à gauche du carré
self . y = 60 # coordonnée y du coin haut à gauche du carré
self . couleur = couleur # couleur du vaisseau à l'écran
def set_x ( self : ' Perenoel ' , dx : int ) - > None :
""" Déplace le Perenoel à gauche si dx positif, à droite si négatif """
self . x = self . x + dx
if self . x < 0 :
self . x = 0
elif self . x > = 120 :
self . x = 120
def set_y ( self : ' Perenoel ' , dy : int ) - > None :
""" Déplace le Perenoel en bas si dy positif, en haut si négatif """
self . y = self . y + dy
if self . y < 0 :
self . y = 0
elif self . y > = 120 :
self . y = 120
def saut ( self : ' Perenoel ' ) :
for i in range ( 1 ) :
if i < 5 :
self . set_y ( - 1 )
else :
self . set_y ( 1 )
def gravite ( self : ' Perenoel ' ) :
if self . y < 30 :
self . set_y ( 1 )
def get_coord ( self : ' Perenoel ' ) - > tuple [ int , int ] :
""" Renvoie le couple (x, y) qui contient les coordonnées (du coin haut gauche) du Perenoel """
return ( self . x , self . y )
def afficher ( self : ' Perenoel ' ) - > None :
""" Affiche le Perenoel """
pyxel . blt ( self . x , self . y , 0 , 23 , 68 , 16 , 25 )
# (..., 0, 0, 0, 8, 8) car Image 0 à partir de (0;0) de taille 8*8)
""" Classe intégrant la gestion du Modèle relative au joueur. """
class Joueur :
def __init__ ( self , perenoel : ' Perenoel ' , vies : int ) - > None :
self . vies = vies # A 0, le joueur a perdu
self . perenoel = perenoel # L'instance de Vaisseau du joueur
def est_vivant ( self : ' Joueur ' ) - > bool :
""" Prédicat qui renvoie vrai si le joueur a encore des vies """
return self . vies > 0
def get_vies ( self : ' Joueur ' ) - > int :
""" Renvoie le nombre de vies du joueur """
return self . vies
def perd_une_vie ( self : ' Joueur ' ) - > None :
""" Fait perdre une vie au joueur mais en imposant un minimum de 0 """
self . vies = self . vies - 1
if self . vies < 0 :
self . vies = 0
""" Classe intégrant la gestion du jeu. """
class Jeu :
def __init__ ( self ) - > None :
# Création de la fenêtre graphique
pyxel . init ( 128 , 128 , title = " Nuit du c0de " )
pyxel . load ( " lorenzoxxxDark.pyxres " )
# Initialisation des données du jeu
self . perenoel = Perenoel ( )
self . objet = Objet ( )
self . joueur = Joueur ( self . perenoel , 4 )
self . tirs = [ ] # Tableau des tirs
self . ennemis = [ ] # Tableau des ennemis présents
self . explosions = [ ] # Tableau des explosions
# Lancement de l'alternance 30x par seconde entre controleur et vue
pyxel . run ( self . controler , self . afficher )
def controler ( self ) :
if pyxel . btn ( pyxel . KEY_RIGHT ) :
self . perenoel . set_x ( 1 )
if pyxel . btn ( pyxel . KEY_LEFT ) :
self . perenoel . set_x ( - 1 )
if pyxel . btn ( pyxel . KEY_UP ) :
self . perenoel . saut ( )
def afficher ( self : ' Jeu ' ) - > None :
pyxel . cls ( 4 )
self . perenoel . afficher ( )
#self.perenoel.gravite()
#self.objet.afficher(X1_SAPIN, Y1_SAPIN, X2_SAPIN, Y2_SAPIN)
self . objet . afficher ( X1_CADEAU1 , Y1_CADEAU1 , X2_CADEAU1 , Y2_CADEAU1 )
j = Jeu ( )