|
|
@ -29,6 +29,7 @@ class Vaisseau: |
|
|
|
def __init__(self, couleur:int=COULEUR_VAISSEAU) -> None: |
|
|
|
def __init__(self, couleur:int=COULEUR_VAISSEAU) -> None: |
|
|
|
self.x = 60 # coordonnée x du coin haut à gauche du carré |
|
|
|
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.y = 60 # coordonnée y du coin haut à gauche du carré |
|
|
|
|
|
|
|
self.jump = None |
|
|
|
self.couleur = couleur # couleur du vaisseau à l'écran |
|
|
|
self.couleur = couleur # couleur du vaisseau à l'écran |
|
|
|
|
|
|
|
|
|
|
|
def set_x(self:'Vaisseau', dx:int) -> None: |
|
|
|
def set_x(self:'Vaisseau', dx:int) -> None: |
|
|
@ -47,6 +48,8 @@ class Vaisseau: |
|
|
|
elif self.y >= 120: |
|
|
|
elif self.y >= 120: |
|
|
|
self.y = 120 |
|
|
|
self.y = 120 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def set_jump(self): |
|
|
|
|
|
|
|
self.jump = 10 |
|
|
|
|
|
|
|
|
|
|
|
def get_coord(self:'Vaisseau') -> tuple[int, int]: |
|
|
|
def get_coord(self:'Vaisseau') -> tuple[int, int]: |
|
|
|
"""Renvoie le couple (x, y) qui contient les coordonnées (du coin haut gauche) du vaisseau""" |
|
|
|
"""Renvoie le couple (x, y) qui contient les coordonnées (du coin haut gauche) du vaisseau""" |
|
|
@ -57,6 +60,15 @@ class Vaisseau: |
|
|
|
pyxel.blt(self.x, self.y, 0, 0, 0, 8, 8) |
|
|
|
pyxel.blt(self.x, self.y, 0, 0, 0, 8, 8) |
|
|
|
# (..., 0, 0, 0, 8, 8) car Image 0 à partir de (0;0) de taille 8*8 |
|
|
|
# (..., 0, 0, 0, 8, 8) car Image 0 à partir de (0;0) de taille 8*8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def move(self): |
|
|
|
|
|
|
|
if self.jump!=None: |
|
|
|
|
|
|
|
self.jump = self.jump - 1 |
|
|
|
|
|
|
|
if self.jump > 0: |
|
|
|
|
|
|
|
self.y = self.y - 1 |
|
|
|
|
|
|
|
if self.jump < 0: |
|
|
|
|
|
|
|
self.y = self.y + 1 |
|
|
|
|
|
|
|
if self.jump == -100: |
|
|
|
|
|
|
|
self.jump = None |
|
|
|
|
|
|
|
|
|
|
|
class Joueur: |
|
|
|
class Joueur: |
|
|
|
"""Classe intégrant la gestion du Modèle relative au joueur.""" |
|
|
|
"""Classe intégrant la gestion du Modèle relative au joueur.""" |
|
|
@ -114,7 +126,7 @@ class Ennemi: |
|
|
|
|
|
|
|
|
|
|
|
def deplacement(self:'Ennemi') -> None: |
|
|
|
def deplacement(self:'Ennemi') -> None: |
|
|
|
"""Déplace l'ennemi d'un pixel vers le bas""" |
|
|
|
"""Déplace l'ennemi d'un pixel vers le bas""" |
|
|
|
self.y = self.y + 1 |
|
|
|
self.x = self.x - 1 |
|
|
|
|
|
|
|
|
|
|
|
def get_coord(self:'Ennemi') -> tuple[int, int]: |
|
|
|
def get_coord(self:'Ennemi') -> tuple[int, int]: |
|
|
|
"""Renvoie le couple (x,y) des coordonnées (du coin haut gauche) de l'ennemi""" |
|
|
|
"""Renvoie le couple (x,y) des coordonnées (du coin haut gauche) de l'ennemi""" |
|
|
@ -122,7 +134,7 @@ class Ennemi: |
|
|
|
|
|
|
|
|
|
|
|
def est_hors_ecran(self:'Ennemi') -> bool: |
|
|
|
def est_hors_ecran(self:'Ennemi') -> bool: |
|
|
|
"""Prédicat qui renvoie True si l'ennemi est sorti de l'écran par le bas""" |
|
|
|
"""Prédicat qui renvoie True si l'ennemi est sorti de l'écran par le bas""" |
|
|
|
return self.y > 128 |
|
|
|
return self.x < 0 |
|
|
|
|
|
|
|
|
|
|
|
def est_touche_par(self:'Ennemi', tir:'Tir') -> bool: |
|
|
|
def est_touche_par(self:'Ennemi', tir:'Tir') -> bool: |
|
|
|
"""Prédicat qui renvoie True si l'ennemi est en contact avec le tir""" |
|
|
|
"""Prédicat qui renvoie True si l'ennemi est en contact avec le tir""" |
|
|
@ -211,7 +223,8 @@ class Jeu: |
|
|
|
if pyxel.btn(pyxel.KEY_DOWN): |
|
|
|
if pyxel.btn(pyxel.KEY_DOWN): |
|
|
|
self.vaisseau.set_y(1) |
|
|
|
self.vaisseau.set_y(1) |
|
|
|
if pyxel.btn(pyxel.KEY_UP): |
|
|
|
if pyxel.btn(pyxel.KEY_UP): |
|
|
|
self.vaisseau.set_y(-1) |
|
|
|
self.vaisseau.set_jump() |
|
|
|
|
|
|
|
self.vaisseau.move() |
|
|
|
|
|
|
|
|
|
|
|
def tirer(self:'Jeu') -> None: |
|
|
|
def tirer(self:'Jeu') -> None: |
|
|
|
"""Contrôle la touche de création d'un tir et lance la création au besoin""" |
|
|
|
"""Contrôle la touche de création d'un tir et lance la création au besoin""" |
|
|
@ -238,7 +251,7 @@ class Jeu: |
|
|
|
"""Création aléatoire des ennemis""" |
|
|
|
"""Création aléatoire des ennemis""" |
|
|
|
|
|
|
|
|
|
|
|
if (pyxel.frame_count % 30 == 0): # 30 images / s donc un ennemi par seconde |
|
|
|
if (pyxel.frame_count % 30 == 0): # 30 images / s donc un ennemi par seconde |
|
|
|
nouvel_ennemi = Ennemi(random.randint(0, 120), 0) |
|
|
|
nouvel_ennemi = Ennemi(120, 0) |
|
|
|
self.ennemis.append(nouvel_ennemi) |
|
|
|
self.ennemis.append(nouvel_ennemi) |
|
|
|
|
|
|
|
|
|
|
|
def deplacer_ennemis(self:'Jeu') -> None: |
|
|
|
def deplacer_ennemis(self:'Jeu') -> None: |
|
|
|