You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
EnoxX-FiRe 8579c8e0ff Transférer les fichiers vers 'projet' 2 months ago
projet Transférer les fichiers vers 'projet' 2 months ago
README.md Mise à jour de 'README.md' 2 months ago

README.md

##PYTHON## ''' 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

#Déclaration des classes
"""Classe intégrant la gestion du Modèle et de la Vue relative au Perenoel du joueur."""
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 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)
        print("bonjour")
        # (..., 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(256, 256, title="Nuit du c0de")
        pyxel.load("lorenzoxxxDark.pyxres")
    
        # Initialisation des données du jeu
        self.perenoel = Perenoel()
        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_DOWN):
            self.perenoel.set_y(1)
        if pyxel.btn(pyxel.KEY_UP):
            self.perenoel.set_y(-1)
        
    def afficher(self:'Jeu') -> None:
        pyxel.cls(4)
        self.perenoel.afficher()
j = Jeu()