Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://kodomo.cmm.msu.su/trac/snake/browser/main.py?rev=150
Äàòà èçìåíåíèÿ: Unknown
Äàòà èíäåêñèðîâàíèÿ: Sun Apr 10 19:53:19 2016
Êîäèðîâêà: IBM-866
main.py òÀÓ Python Battle

source: main.py @ 150:4e9a51811716

Revision 150:4e9a51811716, 3.9 KB checked in by Daniil Alexeyevsky <me.dendik@òÀæ>, 5 years ago (diff)

Fixed bug with file open cancelling

  • Property exe set to *
Lineˆà
1importˆàTkinterˆàasˆàtk
2importˆàtkFileDialogˆàasˆàtkfd
3importˆàengine
4importˆàsnake
5
6
7
8classˆàUI(object):
9ˆà ˆà """User Interface:"""
10ˆà ˆà defˆà__init__ˆà(self):
11ˆà ˆà ˆà ˆà """Create Python Battle game window.
12ˆà ˆà ˆà ˆà Initialyze engige of the game."""
13ˆà ˆà ˆà ˆà self.root =ˆàtk.Tk()
14ˆà ˆà ˆà ˆà self.root.title("Python Battle")
15ˆà ˆà ˆà ˆà self.canvas =ˆàtk.Canvas(self.root,ˆàbackground =ˆà"black")
16ˆà ˆà ˆà ˆà self.canvas.pack(side ="top",ˆàfill="both",ˆàexpand="yes")
17ˆà ˆà ˆà ˆà self.buttons_pack(self.root).pack(side ="bottom",ˆàfill="both",ˆàexpand="no")
18ˆà ˆà ˆà ˆà self.step_id =ˆà0
19ˆà ˆà ˆà ˆà self.engine =ˆàengine.Engine(self.canvas)
20ˆà ˆà ˆà ˆà self.after_id =ˆàNone
21ˆà ˆà ˆà ˆà return
22ˆà ˆà
23ˆà ˆà defˆàbuttons_pack(self,ˆàroot):
24ˆà ˆà ˆà ˆà """Packing the buttons in root frame.
25ˆà ˆà ˆà ˆà Definition of button functions."""
26ˆà ˆà ˆà ˆà buttons =ˆàtk.Frame(root)
27ˆà ˆà ˆà ˆà load_1 =ˆàtk.Button(buttons,ˆàtext="Load 1",ˆàcommand=lambda:ˆàself.load(1))
28ˆà ˆà ˆà ˆà load_1.grid(row=1,ˆàcolumn=2,ˆàstick="news")
29ˆà ˆà ˆà ˆà load_2 =ˆàtk.Button(buttons,ˆàtext="Load 2",ˆàcommand=lambda:ˆàself.load(2))
30ˆà ˆà ˆà ˆà load_2.grid(row=2,ˆàcolumn=3,ˆàstick="news")
31ˆà ˆà ˆà ˆà run_b =ˆàtk.Button(buttons,ˆàtext="Run",ˆàcommand=lambda:ˆàself.run())
32ˆà ˆà ˆà ˆà run_b.grid(row=1,ˆàcolumn=5,ˆàstick="news")
33ˆà ˆà ˆà ˆà load_3 =ˆàtk.Button(buttons,ˆàtext="Load 3",ˆàcommand=lambda:ˆàself.load(3))
34ˆà ˆà ˆà ˆà load_3.grid(row=3,ˆàcolumn=2,ˆàstick="news")
35ˆà ˆà ˆà ˆà load_4 =ˆàtk.Button(buttons,ˆàtext="Load 4",ˆàcommand=lambda:ˆàself.load(4))
36ˆà ˆà ˆà ˆà load_4.grid(row=2,ˆàcolumn=1,ˆàstick="news")
37ˆà ˆà ˆà ˆà step_b =ˆàtk.Button(buttons,ˆàtext="Step",ˆàcommand=lambda:ˆàself.step())
38ˆà ˆà ˆà ˆà step_b.grid(row=3,ˆàcolumn=5,ˆàstick="news")
39ˆà ˆà ˆà ˆà forˆàcolumn inˆàrange(1,ˆà6):
40ˆà ˆà ˆà ˆà ˆà buttons.grid_columnconfigure(column,ˆàweight=1)
41ˆà ˆà ˆà ˆà returnˆàbuttons
42ˆà ˆà
43ˆà ˆà defˆàloadˆà(self,ˆàsnake_number):
44ˆà ˆà ˆà ˆà """Ask for snake file loading.
45ˆà ˆà ˆà ˆà Initialyzing snake and draw it on the field.
46ˆà ˆà ˆà ˆà Return field back to default after end of the game."""
47ˆà ˆà ˆà ˆà ifˆàself.step_id >=ˆà200:
48ˆà ˆà ˆà ˆà ˆà ˆà self.step_id =ˆà0
49ˆà ˆà ˆà ˆà ˆà ˆà self.engine.snakes =ˆà[None,ˆàNone,ˆàNone,ˆàNone]
50ˆà ˆà ˆà ˆà ˆà ˆà pass
51ˆà ˆà ˆà ˆà ifˆàself.step_id ==ˆà0:
52ˆà ˆà ˆà ˆà ˆà ˆà fileˆà=ˆàtkfd.askopenfile(title="Open file")
53ˆà ˆà ˆà ˆà ˆà ˆà ifˆàfileˆà==ˆàNone:
54ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà return
55ˆà ˆà ˆà ˆà ˆà ˆà snake =ˆàself.engine.create_snake(snake_number)
56ˆà ˆà ˆà ˆà ˆà ˆà snake.load(file)
57ˆà ˆà ˆà ˆà ˆà ˆà pass
58ˆà ˆà ˆà ˆà self.engine.refill()
59ˆà ˆà ˆà ˆà self.engine.redraw()
60ˆà ˆà ˆà ˆà return
61
62ˆà ˆà defˆàrunˆà(self):
63ˆà ˆà ˆà ˆà """Run the game with 150 ms step"""
64ˆà ˆà ˆà ˆà ifˆàself.dead_snake_check()ˆà==ˆàFalse:
65ˆà ˆà ˆà ˆà ˆà ˆà return
66ˆà ˆà ˆà ˆà ifˆàself.step_id >ˆà200:
67ˆà ˆà ˆà ˆà ˆà ˆà self.end()
68ˆà ˆà ˆà ˆà ˆà ˆà return
69ˆà ˆà ˆà ˆà self.step_id =ˆàself.step_id+1
70ˆà ˆà ˆà ˆà self.engine.step()
71ˆà ˆà ˆà ˆà self.after_id =ˆàself.canvas.after(150,ˆàself.run)
72ˆà ˆà ˆà ˆà return
73ˆà ˆà defˆàstepˆà(self):
74ˆà ˆà ˆà ˆà """Do the next game step"""
75ˆà ˆà ˆà ˆà ifˆàself.dead_snake_check()ˆà==ˆàFalse:
76ˆà ˆà ˆà ˆà ˆà ˆà return
77ˆà ˆà ˆà ˆà ifˆàself.step_id <=ˆà200:
78ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.after_id !=ˆàNone:
79ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.after_cancel(self.after_id)
80ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
81ˆà ˆà ˆà ˆà ˆà ˆà self.step_id =ˆàself.step_id+1
82ˆà ˆà ˆà ˆà ˆà ˆà self.engine.step()
83ˆà ˆà ˆà ˆà ˆà ˆà pass
84ˆà ˆà ˆà ˆà else:
85ˆà ˆà ˆà ˆà ˆà ˆà self.end()
86ˆà ˆà ˆà ˆà ˆà ˆà pass
87ˆà ˆà ˆà ˆà return
88ˆà ˆà
89ˆà ˆà defˆàdead_snake_check(self):
90ˆà ˆà ˆà ˆà """Check the number of snakes alive.
91ˆà ˆà ˆà ˆà End the game if alive snake number is less than two."""
92ˆà ˆà ˆà ˆà dead_snakes =ˆà0
93ˆà ˆà ˆà ˆà forˆàsnake inˆàself.engine.snakes:
94ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
95ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà dead_snakes=dead_snakes+1
96ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
97ˆà ˆà ˆà ˆà ifˆàdead_snakes >=ˆà3:
98ˆà ˆà ˆà ˆà ˆà ˆà self.end()
99ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
100
101ˆà ˆà defˆàendˆà(self):
102ˆà ˆà ˆà ˆà """End the game and raise the window that tels about it."""
103ˆà ˆà ˆà ˆà ifˆàself.after_id !=ˆàNone:
104ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.after_cancel(self.after_id)
105ˆà ˆà ˆà ˆà ˆà ˆà pass
106ˆà ˆà ˆà ˆà self.step_id =ˆà201
107ˆà ˆà ˆà ˆà root =ˆàtk.Tk()
108ˆà ˆà ˆà ˆà end_label =ˆàtk.Label(root,ˆàtext="End")
109ˆà ˆà ˆà ˆà end_label.pack()
110ˆà ˆà ˆà ˆà root.mainloop()
111ˆà ˆà ˆà ˆà pass
112
113ifˆà__name__ ==ˆà"__main__":
114ˆà ˆà snake_batle =ˆàUI()
115ˆà ˆà snake_batle.root.mainloop()
Note: See TracBrowser for help on using the repository browser.