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() | 
Partager