EnoxX-FiRe
3 days ago
1 changed files with 102 additions and 0 deletions
@ -1,2 +1,104 @@
|
||||
# ProjetPyxel2 |
||||
''' |
||||
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 |
||||
|
||||
class Perenoel: |
||||
"""Classe intégrant la gestion du Modèle et de la Vue relative au Perenoel du joueur.""" |
||||
|
||||
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, 23, 68, 0, 15, 25) |
||||
# (..., 0, 0, 0, 8, 8) car Image 0 à partir de (0;0) de taille 8*8 |
||||
|
||||
|
||||
class Joueur: |
||||
"""Classe intégrant la gestion du Modèle relative au 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 |
||||
|
||||
class Jeu: |
||||
"""Classe intégrant la gestion du jeu.""" |
||||
def __init__(self) -> None: |
||||
|
||||
# Création de la fenêtre graphique |
||||
pyxel.init(128, 128, title="Nuit du c0de") |
||||
pyxel.load("bjr.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 afficher(self:'Jeu') -> None: |
||||
self.perenoel.afficher() |
||||
|
||||
application = Jeu() |
||||
|
Loading…
Reference in new issue