1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
| import pyxel
import random
perso1 = {'x':90, 'y':0, 'w':4, 'h':8}
perso2 = {'x':50, 'y':0, 'w':4, 'h':8}
def controler() -> None:
"""Modifie les données 30 fois par seconde"""
gerer_mouvement_perso(perso1, pyxel.KEY_LEFT, pyxel.KEY_RIGHT)
gerer_mouvement_perso(perso2, pyxel.KEY_A , pyxel.KEY_Z)
def afficher() -> None:
"""Modifie l'affichage 30 fois par seconde"""
pyxel.cls(0)
afficher_perso(perso1)
afficher_perso(perso2)
afficher_plateformes()
def gerer_mouvement_perso(perso:dict, g:int, d:int) -> None:
"""Gère les mouvements gauche, droite et chute du personnage reçu
:: param perso(dict) :: dictionnaire modélisant un personnage VALIDE
:: param g(int) :: un entier correspondant à la touche pour aller à gauche
:: param d(int) :: un entier correspondant à la touche pour aller à droite
PRECONDITION SUR perso : doit contenir des clés nécessaires avec des valeurs correctes
Exemple : perso1 = {'x':90, 'y':0, 'w':4, 'h':8}
Ce personnage est à placer en (90,0) et a une largeur de 4 pixels et une hauteur de 8 pixels
PRECONDITION SUR g et d : il faut transmettre une constante reconnue comme touche par Pyxel
REMARQUE : si le personnage atteint y=128, on décide de le replacer en y = 0
De la même façon x devra être bloquée entre 0 et (128-largeur du personnage).
"""
if peut_tomber(perso):
perso['y'] = perso['y'] + 1
def peut_tomber(perso:dict) -> bool:
"""Renvoie True si tous les pixels sous le personnage sont bien vides, False sinon"""
xp = perso['x'] # x du point en haut à gauche du personnage voulu
yp = perso['y'] # y du point en haut à gauche du personnage voulu
hauteur = perso['h'] # hauteur du personnage
largeur = perso['w'] # largeur du personnage
ligne_en_dessous = yp + hauteur # On rajoute hp pour atteindre la ligne en dessous
for x in range(xp, xp + largeur): # Pour chaque des x du personnage
if pyxel.pget(x, ligne_en_dessous) != 0: # si le pixel en dessous n'est pas vide
return False # on ne peut pas tomber
return True # Si on arrive ici, on peut tomber, toutes les cases sont noires
def afficher_perso(perso:dict) -> bool:
"""Affiche le personnage correspondant au paramètre perso"""
xp = perso['x'] # x du point en haut à gauche du personnage voulu
yp = perso['y'] # y du point en haut à gauche du personnage voulu
hauteur = perso['h'] # hauteur du personnage
largeur = perso['w'] # largeur du personnage
pyxel.rect(xp, yp, largeur, hauteur, 1)
def afficher_plateformes() -> bool:
"""Affiche les plateformes"""
pyxel.rect(30, 34, 40, 4, 10)
pyxel.rect(50, 75, 60, 20, 9)
# Programme principal
pyxel.init(128, 128, title="Mon premier jeu") # Initialisation de la fenêtre
pyxel.run(controler, afficher) # Alternance controler/afficher
|