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