Dobrý den, potřeboval bych docela velkou pomoc mám script o 180 řádkách a potřebujval bych aby se mi na něj někdo kouknul a k řádku či více řádkům náráz napsal poznámky co se tam právě vytváří/děje. Pro mě je to španělská vesnice
"""Build the maze and pathway
"""
from Tkinter import *
import time
root = Tk()
root.title("Background")
canvasOne = Canvas(width = 800, height = 700, bg = 'black')
canvasOne.pack()
def createWall((x0, y0), (x1, y1), colour = 'blue', width = 3):
""" create a double wall outlining the maze. """
canvasOne.create_line(x0, y0, x1, y1, width = width, fill = colour)
canvasOne.create_line(350, 630, 450, 630, width = 3, fill = 'gold', tag = 'gate')
def buildPathHorizontal((val1, val2, number), increment = 20, delta = 5):
""" build the horizontal path through the maze, small white squares"""
for i in range(number):
val1 += increment
x, y = val1, val2
deltax = x + delta
deltay = y + delta
canvasOne.create_rectangle(x, y, deltax, deltay, fill = 'white')
def buildPathVertical((val1, val2, number), increment = 20, delta = 5):
""" build the vertical path through the maze, small white squares"""
for i in range(number):
val2 += increment
x, y = val1, val2
deltax = x + delta
deltay = y + delta
canvasOne.create_rectangle(x, y, deltax, deltay, fill = 'white')
outerWall = [(450, 640), (475, 640), (475, 640), (475, 690), (475, 690), (790, 690), (790, 690),
(790, 530), (790, 530), (660, 530), (660, 530), (660, 360), (790, 360), (790, 10), (790, 10),
(10, 10), (10, 10), (10, 360), (10, 360), (150, 360), (150, 360), (150, 530), (150, 530),
(10, 530), (10, 530), (10, 690), (10, 690), (325, 690), (325, 690), (325, 640), (325, 640),
(350, 640), (350, 630), (350, 630), (315, 630), (315, 680), (20, 680), (20, 680), (20, 560),
(20, 540), (160, 540), (160, 540), (160, 350), (20, 350), (20, 350), (20, 20), (20, 20),
(380, 20), (380, 20), (380, 130), (380, 130), (420, 130), (420, 130), (420, 20), (420, 20),
(780, 20), (780, 350), (780, 350), (650, 350), (650, 350), (650, 540), (650, 540), (780, 540),
(780, 540), (780, 680), (780, 680), (485, 680), (485, 630), (485, 630), (450, 630), (450, 630),
(450, 640)]
topLeftBox = [(130, 105), (130, 125), (130, 125), (250, 125), (250, 125), (250, 105),
(130, 105), (250, 105)]
secondTopLeftBox = [(160, 215), (160, 225), (160, 215), (230, 215), (230, 215),
(230, 225), (160, 225), (230, 225)]
topRightBox = [(545, 105), (545, 125), (545, 125), (665, 125), (665, 125), (665, 105),
(545, 105), (665, 105)]
secondTopRightBox = [(560, 215), (560, 225), (560, 215), (625, 215), (625, 215), (625, 225),
(625, 225), (560, 225)]
middleT = [(345, 240), (455, 240), (345, 240), (345, 240), (345, 250), (395, 250), (395, 250), (395, 335),
(395, 335), (405, 335), (405, 335), (405, 250), (405, 250), (455, 250), (455, 250), (455, 240)]
leftSidewaysT = [(275, 340), (275, 500), (275, 340), (285, 340), (285, 340), (285, 415), (285, 415), (345, 415),
(345, 415), (345, 425), (285, 425), (345, 425), (285, 425), (285, 500), (275, 500), (285, 500)]
rightSidewaysT = [(525, 340), (525, 500), (525, 340), (515, 340), (515, 340), (515, 415), (515, 415), (455, 415),
(455, 415), (455, 425), (515, 425), (455, 425), (515, 425), (515, 500), (515, 500), (525, 500)]
walls = [outerWall]
for wall in walls:
for i in range(len(wall) - 1):
createWall(outerWall[i], outerWall[i+1])
boxes = [topLeftBox, secondTopLeftBox, topRightBox, secondTopRightBox]
for box in boxes:
for i in range(len(box)-1):
createWall(topLeftBox[i], topLeftBox[i+1]),
createWall(secondTopLeftBox[i], secondTopLeftBox[i+1]),
createWall(topRightBox[i], topRightBox[i+1]),
createWall(secondTopRightBox[i], secondTopRightBox[i+1])
Ts = [middleT, leftSidewaysT, rightSidewaysT]
for t in Ts:
for i in range(len(t)-1):
createWall(middleT[i], middleT[i+1]),
createWall(leftSidewaysT[i], leftSidewaysT[i+1]),
createWall(rightSidewaysT[i], rightSidewaysT[i+1])
horizontalPath = [(40, 610, 9), (60, 290, 14), (60, 50, 12), (60, 170, 33), (440, 290, 1),
(440, 290, 14), (480, 50, 12), (320, 370, 6), (300, 510, 9), (220, 570, 5), (460, 570, 5), (580, 610, 8),
(0,0,0)]
verticalPath = [(60, 30, 13), (220, 290, 15), (300, 50, 11), (500, 30, 13), (340, 290, 4), (340, 290, 4),
(400, 370, 6), (320, 510, 3), (460, 290, 4), (480, 510, 3), (580, 290, 16), (720, 30, 13), (0,0,0)]
paths = [horizontalPath, verticalPath]
for path in paths:
for i in range(len(path)-1):
buildPathHorizontal(horizontalPath[i]),
buildPathVertical(verticalPath[i])
image = 'Hulk.gif'
photo = PhotoImage(file=image)
xGif = 100
yGif = 610
ph = canvasOne.create_image(xGif, yGif, image = photo)
graph = {(100, 610) : [(270, 610)],
(270, 610) : [(270, 280), (270, 560), (100, 610)],
(270, 560) : [(400, 550), (370, 560), (270, 280), (270, 610)],
(270, 280) : [(110, 280), (300, 290), (380, 290), (270, 610)],
(370, 560) : [(370, 500), (270, 280)],
(370, 500) : [(450, 500), (370, 560)],
(450, 500) : [(390, 300), (450, 370), (370, 500)],
(450, 370) : [(390, 370), (450, 500)],
(390, 370) : [(390, 290), (450, 370)],
(390, 290) : [(350, 290), (390, 370)],
(350, 290) : [(350, 170), (110, 280), (390, 290)],
(350, 170) : [(110, 170), (350, 290), (350, 290)],
(110, 280) : [(110, 170), (110, 40), (270, 280)],
(110, 170) : [(350, 170), (110, 280)],
(110, 40) : [(350, 40), (110, 170), (110, 280)],
(350, 40) : [(350, 170), (110, 40)],
(350, 170) : [(550, 170), (110, 170), (350, 40)],
(550, 170) : [(550, 40), (550, 280), (350, 170), (750, 170)],
(550, 40) : [(770, 40), (550, 40)],
(550, 280) : [(510, 280), (520, 200), (520, 40)],
(510, 280) : [(510, 360), (550, 280)],
(510, 360) : [(450, 370), (510, 280)],
(770, 40) : [(770, 280), (770, 170), (550, 40)],
(770, 280) : [(630, 280), (550, 280), (470, 280), (770, 40)],
(630, 280) : [(630, 610), (550, 280), (470, 280), (770, 280)],
(630, 610) : [(790, 610), (630, 560), (630, 570), (630, 280)],
(630, 560) : [(530, 560), (630, 280), (630, 610)],
(530, 560) : [(530, 500), (630, 560)],
(530, 500) : [(450, 500), (530, 370)],
(450, 500) : [(450, 350), (530, 500)],
(790, 610) : [(630, 610)]}
"""
find_all_paths is a greedy algorithm based function that will get the .gif moving on the
path. It returns the path for the .gif to follow.
"""
def find_all_paths(graph, start, end, path=[]):
path = path + [start]
if start == end:
return [path]
if not graph.has_key(start):
return []
paths = []
for node in graph[start]:
if node not in path:
newpaths = find_all_paths(graph, node, end, path)
for newpath in newpaths:
paths.append(newpath)
return paths
def move_gif(pic, x = xGif, y = yGif):
endX = 790
endY = 610
mode = .001
path = find_all_paths(graph, (x, y), (endX, endY))
try:
for i in path[7]:
dest = list(i)
newX = dest[0]
newY = dest[1]
if newX == x:
while y != newY:
if y > newY:
y -= 2
canvasOne.coords(pic, x, y)
time.sleep(mode)
canvasOne.update()
path = find_all_paths(graph, (x, y), (endX, endY))
if y < newY:
y+=2
canvasOne.coords(pic, x, y)
time.sleep(mode)
canvasOne.update()
path = find_all_paths(graph, (x, y), (endX, endY))
if newY == y:
while x != newX:
if x > newX:
x -= 2
canvasOne.coords(pic, x, y)
time.sleep(mode)
canvasOne.update()
path = find_all_paths(graph, (x, y), (endX, endY))
if x < newX:
x += 2
canvasOne.coords(pic, x, y)
time.sleep(mode)
canvasOne.update()
path = find_all_paths(graph, (x, y), (endX, endY))
except IndexError:
print 'path: ' , path
print "out of range"
move_gif(ph)
root.mainloop()