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
| import os
import sys
from tkinter import * # importation de tkinter
def chargement_lab(nom):
"""
Charge le labyrinthe depuis le fichier nom.txt
nom : nom du fichier contenant le labyrinthe (sans l'extension .txt)
valeur de retour : une liste contenant les données du labyrinthe
"""
try:
fic = open(nom + ".txt", "r")
data = fic.readlines()
fic.close()
except IOError:
print("Impossible de lire le fichier {}.txt".format(nom))
exit (1)
for i in range(len(data)):
data[i] = data[i].strip()
return data
def affichage_lab(level, fenetre, size_sprite, pos_perso):
"""
Affiche le labyrinthe
level : variable contenant le labyrinthe
can : création d'une zone graphique où afficher les sprites
valeur de retour : bibliothèques contenants les images des sprites
"""
nb_sprite_w_lab = 30
nb_sprite_h_lab = 30
# création d'une zone graphique où dessiner
can = Canvas(fenetre, width = (nb_sprite_w_lab * size_sprite - 1),
height = (nb_sprite_h_lab * size_sprite - 1), bg = "white")
# chargement des sprites
photo_wall = PhotoImage(file = "wall.gif")
photo_coffre = PhotoImage(file = "coffre.gif")
photo_hero = PhotoImage(file = "hero.gif")
n_ligne = 0 # création d'un compteur pour connaitre le n° ligne
for ligne in level:
n_colonne = 0 # création d'un compteur pour pour connaitre le n° colonne
for case in ligne:
# Murs
if case == "#":
# affichage du sprite wall
can.create_image(n_colonne * size_sprite, n_ligne * size_sprite,
anchor = NW,image = photo_wall)
if case == "§":
# affichage du sprite coffre
can.create_image(n_colonne * size_sprite, n_ligne * size_sprite,
anchor = NW,image = photo_coffre)
n_colonne += 1 # incrementation compteur n° ligne
n_ligne += 1 # incrementation compteur n° colonne
# affichage du sprite hero
hero = can.create_image(pos_perso[0] * size_sprite,
pos_perso[0] * size_sprite, anchor = NW,
image = photo_hero)
can.focus_set()
can.pack()
return (can, hero, {"wall" : photo_wall,
"coffre" : photo_coffre,
"hero" : photo_hero})
def test_deplacement():
"""
"""
def init_touches(event): # gestionnaire d'événements
"""
"""
touche = event.keysym
p = pos_perso
print (">>>", pos_perso, p)
if touche == 'd': # déplacement à droite
p [0] += 1
print(pos_perso, p)
canvas.coords(hero, p[0], p[1])
if touche == 's': # déplacement en bas
p [1] += 1
print(pos_perso, p)
canvas.coords(hero, p[0], p[1])
else:
print("none")
######################
# Initialisation jeu #
######################
# Initialisation des paramètres
perso = "X"
pos_perso = [4, 4]
size_sprite = 30 # définit la taille des sprites
# Initialisation de l'affichage graphique
fenetre = Tk()
fenetre.title("GAME")
# Lancement de la partie
level = chargement_lab("lvl_1")
(canvas, hero, photos) = affichage_lab(level, fenetre, size_sprite, pos_perso)
fenetre.bind("<Key>", init_touches)
# Boucle événementielle
fenetre.mainloop()
fenetre.destroy() |
Partager