From 5c13d89a1aa5ca54da1a99f24f70bf3c623cdf42 Mon Sep 17 00:00:00 2001 From: CutieSad Date: Thu, 5 Dec 2024 14:26:15 +0100 Subject: [PATCH] Sapin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Création d'une class Objet - Apparition du sapin - la gravité est pour l'instant en commentaire. --- projetv2/projet.py | 231 +++++++++++++++++++++++---------------------- 1 file changed, 120 insertions(+), 111 deletions(-) diff --git a/projetv2/projet.py b/projetv2/projet.py index b24b12b..d4de1e0 100644 --- a/projetv2/projet.py +++ b/projetv2/projet.py @@ -1,112 +1,121 @@ -''' 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 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<80: - 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) - 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(128, 128, 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_UP): - self.perenoel.saut() - - def afficher(self:'Jeu') -> None: - pyxel.cls(4) - self.perenoel.afficher() - self.perenoel.gravite() +''' 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 Objet: + def __init__(self) -> None: + self.x = 80 # coordonnée x du coin haut à gauche du carré + self.y = 80 # coordonnée y du coin haut à gauche du carré + def afficher(self:'Objet') -> None: + """Affiche le Sapin""" + pyxel.blt(self.x, self.y, 0, 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() j = Jeu() \ No newline at end of file