Bonjour,
Je suis débutante en Python. Je travaille avec python 3.2
Dans mon code ci-bas, je dessine un labyrinthe à partir d’un fichier texte "fichier.lab" dont le contenu est une série de 0 et de 1.

111111111E
10000000011
1111000110
10001110001
0110101111
10011001001
1100011000
10011001111
1100110000
10110010111
0001101110
11110110001
0000000111
11111100001
0000011111
11011000001
0110111110
10001000101
1111001010
00000101001
1111111111

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
130
131
132
133
134
135
136
137
138
139
140
141
 
#!/usr/local/bin/python
 
from tkinter import *
import tkinter
 
def FindCellule(grille, x, y):
	for i in range(0,len(grille)-1,1):
		if(grille[i].GetXCoord == x and grille[i].GetYCoord == y):
			return grille[i]
 
class Cellule():
	def __init__(self,x = 100, y = 100, nord='0', sud='0', est='0', ouest='0'):
		self.xP = x
		self.yP = y
		self.nord = nord
		self.sud = sud
		self.est = est
		self.ouest = ouest
	def setCoordonnees (self, x, y):
		self.xP = x
		self.Yp = y
	def GetXCoord (self):
		return self.xP
	def GetYCoord (self):
		return self.yP
	def setNord (self, nord):
		self.nord = nord
	def setSud (self, sud):
		self.sud = sud
	def setEst (self, est):
		self.est = est
	def setOuest (self, ouest):
		self.ouest = ouest
	def getNord (self):
		return self.nord
	def getSud (self):
		return self.sud
	def getEst (self):
		return self.est
	def getOuest (self):
		return self.ouest
 
class Labyrinthe():
	def __init__(self, x=0, y=0):
		self.xM = x
		self.yM = y
		self.grille = []
	def traceLignePaire(x,y,a):
		if(a == '1'):
			w.create_line( x, y, x, y - 3*pas, width=epaisseurLigne)
	def traceLigneImPaire(x,y,a):
		if(a == '1'):
			w.create_line( x -ep+1, y, x + 3*pas + ep, y, width=epaisseurLigne)			
	def XentreLab(x):
		return x		
	def YentreLab(y):
		return y
 
	def tracerLabyrinthe(self):
		cellule = Cellule()
		contenu = open('fichier.lab', 'r+')
		x_pos = PointDep
		y_pos = PointDep
 
		#Nr de la ligne
		c = 1
		ligneAvant =''
		for ligne in contenu:
			for j in range(0,len(ligne)-1,1):				
				if(ligne[j] == 'E'):
					self.xM = x_pos + (3*pas/2)
					self.yM = y_pos - (3*pas/2)
					cellule.setCoordonnees(self.xM,self.yM)
					cellule.setOuest = '1'
					cellule.setNord = '1'
					cellule.setEst = '1'
				if(ligne[j] == '0'):
					if(c %2 ==0 and j < (len(ligne)-2)):
						w.create_oval(x_pos + (3*pas/2) -r,y_pos - (3*pas/2) -r,x_pos + (3*pas/2) +r,y_pos - (3*pas/2) +r,width=2,outline='black',fill='yellow')
						cellule.setCoordonnees(x_pos + (3*pas/2),y_pos - (3*pas/2))
						cellule.setOuest = ligne[j]
						cellule.setNord = ligneAvant[j]
					x_pos = x_pos + 3*pas	
				elif(c %2 ==0 ):
					Labyrinthe.traceLignePaire(x_pos,y_pos,ligne[j])
					if(j < (len(ligne)-2)):
						w.create_oval(x_pos + (3*pas/2) -r,y_pos - (3*pas/2) -r,x_pos + (3*pas/2) +r,y_pos - (3*pas/2) +r,width=2,outline='black',fill='yellow')
						cellule.setCoordonnees(x_pos + (3*pas/2),y_pos - (3*pas/2))
						cellule.setOuest = ligne[j]
						cellule.setNord = ligneAvant[j]
					x_pos = x_pos + 3*pas	
				else:
					Labyrinthe.traceLigneImPaire(x_pos,y_pos,ligne[j])
					x_pos = x_pos + 3*pas
			x_pos = PointDep
			if(c%2 != 0):
				y_pos = y_pos + 3*pas
			c = c + 1
			ligneAvant = ligne
			self.grille.append(cellule)
		contenu.close()	
 
def Deplacement(event):
	global PosX,PosY, nord, sud, ouest, est
	cellule
	touche = event.char
	if touche == 'h' and cellule.getNord() == '0':
		PosY -= 3*pas
	if touche == 'b' and cellule.getSud() == '0':
		PosY += 3*pas
	if touche == 'd' and cellule.getEst() == '0':
		PosX += 3*pas
	if touche == 'g' and cellule.getOuest() == '0':
		PosX -= 3*pas
	w.coords(Pion,PosX -Ray, PosY -Ray, PosX +Ray, PosY +Ray)
global pas, ep, r, PointDep, Pion, cellule
pas = 15
ep = 3
r = 5
Ray = 10
PointDep = 100
Largeur = 650
Hauteur = 600
epaisseurLigne = 5
fenetre = Tk()
fenetre.title('Labyrinthe')
 
w = Canvas(fenetre, width = Largeur, height = Hauteur, bg ='green')
cellule = Cellule()
lab = Labyrinthe()
lab.tracerLabyrinthe()	
PosX = lab.xM
PosY = lab.yM
cellule = FindCellule(lab.grille, PosX, PosY) 
Pion = w.create_oval(PosX-10,PosY-10,PosX+10,PosY+10,width=2,outline='black',fill='red')
 
w.focus_set()
w.bind('<Key>',Deplacement)
w.pack(padx =20, pady =20)
fenetre.mainloop()
Je trace le labyrinthe sans soucis.

Pour déplacer un pion dans le labyrinthe, je considère que mon labyrinthe est constitué d’une grille de cellules.
Je défini une cellule comme un objet ayant des coordonnées x, y et des variables nord, sud, est et ouest.
Ma classe Labyrinthe a donc une liste "grille" dans laquelle j’ajoute les cellules que je crée au cours du parcours du fichier "fichier.lab".
J’ai défini une fonction "FindCellule" qui prend en paramètre une liste et les coordonnées (x et y) et doit retourner la cellule dont les coordonnées correspondent à celles des paramètres. Mais l’objet retourné n’est apparemment pas un objet de type Cellule, car ne reconnaît pas les méthodes de la classe Cellule.
Comment récupérer entièrement un objet d’une liste ? Peut-on "caster" un objet en Python comme dans d’autres langages?
Merci d'avance.
Maren