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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
| import pyxel
import random
perso1 = {'x':90, 'y':0, 'w':4, 'h':8, 'c':1} # joueur 1
perso2 = {'x':50, 'y':0, 'w':4, 'h':8, 'c':2} # joueur 2
p1 = [30, 35, 40, 4, 0] # [x, y, largeur, hauteur, déplacement]
p2 = [60, 55, 30, 4, 0]
p3 = [50, 75, 60, 4, 0]
p4 = [10, 95, 60, 4, 0]
plateformes = [p1, p2, p3, p4]
def controler() -> None:
"""Modifie les données 30 fois par seconde"""
gerer_mouvement_perso(perso1, pyxel.KEY_LEFT, pyxel.KEY_RIGHT, pyxel.KEY_UP)
gerer_mouvement_perso(perso2, pyxel.KEY_A, pyxel.KEY_Z, pyxel.KEY_SPACE)
def afficher() -> None:
"""Modifie l'affichage 30 fois par seconde"""
pyxel.cls(0)
afficher_perso(perso1)
afficher_perso(perso2)
gerer_mouvement_plateformes()
afficher_plateformes()
def gerer_mouvement_robot(robot:dict, cible:dict) -> None:
"""Modifie les coordonnées du robot en fonction de celles de la cible"""
pass
def gerer_mouvement_plateformes() -> None:
"""Modifie aléatoirement l'abscisse des plateformes"""
pass
def gerer_mouvement_perso(perso:dict, g:int, d:int, s: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
:: param s(int) :: un entier correspondant à la touche pour sauter
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, d, s : 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).
"""
# Gestion des chutes
if peut_tomber(perso):
perso['y'] = perso['y'] + 1
# Gestion des déplacements horizontaux
if pyxel.btn(g): # si appuie sur la touche gauche
perso['x'] = perso['x'] - 1 # on déplace à gauche
if pyxel.btn(d): # si appuie sur la touche droite
perso['x'] = perso['x'] + 1 # on déplace à droite
if pyxel.btn(s) and not peut_tomber(perso): # si appuie sur la touche saut en étant sur une plateforme
perso['y'] = perso['y'] - 25 # on saute
# Gestion des positions maximales
if perso['y'] >=128:
perso['y'] = 0
if perso['x'] < 0:
perso['x'] = 0
elif perso['x'] >= (128 - perso['w']):
perso['x'] = (127 - perso['w'])
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
couleur = perso['c'] # largeur du personnage
pyxel.rect(xp, yp, largeur, hauteur, couleur)
def afficher_plateformes() -> bool:
"""Affiche les plateformes"""
for plateforme in plateformes:
x = plateforme[0] # Colonne
y = plateforme[1] # Ligne
w = plateforme[2] # Largeur / width
h = plateforme[3] # Hauteur / height
pyxel.rect(x, y, w, h, 10)
# Programme principal
pyxel.init(128, 128, title="Mon premier jeu") # Initialisation de la fenêtre
pyxel.run(controler, afficher) # Alternance controler/afficher
|