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
| """Module de présentation des interfaces Homme-machine
Basé sur Tkinter, il découpe les fonctions en 3 catégories :
- celles qui modifient les DONNEES du jeu
- celles qui modifient les GRAPHIQUES du jeu
- celles qui permettent l'interaction entre DONNEES - GRAPHIQUES - UTILISATEUR
"""
# 1 - Importations ==============================
from tkinter import Tk # pour créer la fenetre de jeu
from tkinter import Canvas # pour créer la zone de dessin
# 2 - CONSTANTES et variables globales ============================================
donnees = {} # Permettra de stocker les données du jeu
donnees["curseur_x"] = 250
donnees["curseur_y"] = 450
ref_ihm = {} # Permettra de stocker les références des affichages
ref_ihm["dessin_curseur"] = 0
# 3 - Déclaration des fonctions gérant les DONNEES ================================
def modifier_coordonnees_curseur(dpc_x):
"""Modifie les données x du vaisseau pour intégrer le déplacement dpc_x voulu"""
donnees["curseur_x"] = calculer_coordonnees_curseur(donnees["curseur_x"], dpc_x)
def calculer_coordonnees_curseur(x, dpc_x):
"""Calcule et renvoie la nouvelle coordonnée x après un déplacement dpc_x"""
x = x + dpc_x
if x > 500:
x = 500
if x < 0:
x = 0
return x
# 4 - Déclaration des fonctions purement GRAPHIQUES ================================
def dessiner_curseur(x, y):
"""Efface le vaisseau actuel, dessine le nouveau en (x,y) et renvoie sa référence"""
# Extraction des DONNEES utiles pour cette fonction
fenetre = ref_ihm["fenetre"] # Récupération de la référence de la fenêtre
plateau = ref_ihm["plateau"] # Récupération de la référence du plateau
curseur = ref_ihm["dessin_curseur"] # Récupération de l'identifiant du dessin du curseur
# Suppression du dessin du curseur
plateau.delete(fenetre, curseur)Description du plateau
# Dessine et mémorise l'id du nouveau
ref_ihm["dessin_curseur"] = plateau.create_rectangle(x, y, x+20, y+20, fill="blue", width=0)
# 5 Déclaration des fonctions EVENEMENTIELLES : interaction données, graphiques, utilisateur ====
def gestion_clavier(evenement):
"""Fonction événementielle qui gère les actions après appui sur une touche"""
# Effets sur les DONNEES
touche = evenement.keysym # Extraction de la touche depuis l'événément
if touche == "Left": # Si l'utilisateur appuie sur FLECHE UP
modifier_coordonnees_curseur(-3) # Modifie en mémoire la position du curseur
elif touche == "Right":
modifier_coordonnees_curseur(3) # Modifie en mémoire la position du curseur
# remarque : 'Up' et 'Down' pour les autres flèches
# Extraction des DONNEES utiles pour cette fonction
x = donnees["curseur_x"]
y = donnees["curseur_y"]
# Effets sur l'AFFICHAGE
dessiner_curseur(x, y)
# 4 - PROGRAMME PRINCIPAL ============================
fenetre = Tk()
fenetre.title("Mon premier jeu")
fenetre.geometry("600x600")
ref_ihm["fenetre"] = fenetre
plateau = Canvas(fenetre)
plateau.configure(width=500)
plateau.configure(height=500)
plateau.configure(bg="ivory")
plateau.place(x=50, y=50)
ref_ihm["plateau"] = plateau
dessiner_curseur(donnees["curseur_x"], donnees["curseur_y"])
fenetre.bind("<Any-KeyPress>", gestion_clavier)
fenetre.mainloop()
|