Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/snake/file/cd7658cb90eb/main.py
Дата изменения: Unknown
Дата индексирования: Sun Feb 3 06:27:28 2013
Кодировка:
snake: cd7658cb90eb main.py

snake

view main.py @ 139:cd7658cb90eb

Added rule.number to aid snake debugging.
author Daniil Alexeyevsky <me.dendik@gmail.com>
date Mon, 20 Dec 2010 17:49:57 +0300
parents 64da3ed55436
children 21dca2c88275
line source
1 import Tkinter as tk
2 import tkFileDialog as tkfd
3 import engine
4 import snake
8 class UI(object):
9 def __init__ (self):
10 self.root = tk.Tk()
11 self.root.title("Python Battle")
12 self.canvas = tk.Canvas(self.root, background = "black")
13 self.canvas.pack(side ="top", fill="both", expand="yes")
14 self.buttons_pack(self.root).pack(side ="bottom", fill="both", expand="no")
15 self.step_id = 0
16 self.engine = engine.Engine(self.canvas)
17 self.after_id = None
18 return
19 def buttons_pack(self, root):
20 buttons = tk.Frame(root)
21 load_1 = tk.Button(buttons, text="Load 1", command=lambda: self.load(1))
22 load_1.grid(row=1, column=2, stick="news")
23 load_2 = tk.Button(buttons, text="Load 2", command=lambda: self.load(2))
24 load_2.grid(row=2, column=3, stick="news")
25 run_b = tk.Button(buttons, text="Run", command=lambda: self.run())
26 run_b.grid(row=1, column=5, stick="news")
27 load_3 = tk.Button(buttons, text="Load 3", command=lambda: self.load(3))
28 load_3.grid(row=3, column=2, stick="news")
29 load_4 = tk.Button(buttons, text="Load 4", command=lambda: self.load(4))
30 load_4.grid(row=2, column=1, stick="news")
31 step_b = tk.Button(buttons, text="Step", command=lambda: self.step())
32 step_b.grid(row=3, column=5, stick="news")
33 for column in range(1, 6):
34 buttons.grid_columnconfigure(column, weight=1)
35 return buttons
37 def load (self, snake_number):
38 if self.step_id >= 200:
39 self.step_id = 0
40 self.engine.snakes = [None, None, None, None]
41 pass
42 if self.step_id == 0:
43 file_name = tkfd.askopenfilename(title="Open file")
44 snake = self.engine.create_snake(snake_number)
45 snake.load(open(file_name, "r"))
46 pass
47 self.engine.refill()
48 self.engine.redraw()
49 return
51 def run (self):
52 if self.dead_snake_check() == False:
53 return
54 if self.step_id >= 200:
55 self.end()
56 return
57 self.step_id = self.step_id+1
58 self.engine.step()
59 self.after_id = self.canvas.after(300, self.run)
60 return
61 def step (self):
62 if self.dead_snake_check() == False:
63 return
64 if self.step_id <= 200:
65 if self.after_id != None:
66 self.canvas.after_cancel(self.after_id)
67 pass
68 self.step_id = self.step_id+1
69 self.engine.step()
70 pass
71 else:
72 self.end()
73 pass
74 return
76 def dead_snake_check(self):
77 dead_snakes = 0
78 for snake in self.engine.snakes:
79 if snake == None:
80 dead_snakes=dead_snakes+1
81 pass
82 if dead_snakes >= 3:
83 self.end()
84 return False
86 def end (self):
87 if self.after_id != None:
88 self.canvas.after_cancel(self.after_id)
89 pass
90 root = tk.Tk()
91 end_label = tk.Label(root, text="End")
92 end_label.pack()
93 root.mainloop()
94 pass
96 if __name__ == "__main__":
97 snake_batle = UI()
98 snake_batle.root.mainloop()