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

source: main.py @ 153:3c909a161978

Revision 153:3c909a161978, 4.1 KB checked in by Alex Martynov, 5 years ago (diff)

chnged number of end step_id

  • 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=2,ˆàcolumn=5,ˆàstick="news")
39ˆà ˆà ˆà ˆà end_b =ˆàtk.Button(buttons,ˆàtext="End",ˆàcommand=lambda:ˆàself.end())
40ˆà ˆà ˆà ˆà end_b.grid(row=3,ˆàcolumn=5,ˆàstick="news")
41ˆà ˆà ˆà ˆà forˆàcolumn inˆàrange(1,ˆà6):
42ˆà ˆà ˆà ˆà ˆà buttons.grid_columnconfigure(column,ˆàweight=1)
43ˆà ˆà ˆà ˆà returnˆàbuttons
44ˆà ˆà
45ˆà ˆà defˆàloadˆà(self,ˆàsnake_number):
46ˆà ˆà ˆà ˆà """Ask for snake file loading.
47ˆà ˆà ˆà ˆà Initialyzing snake and draw it on the field.
48ˆà ˆà ˆà ˆà Return field back to default after end of the game."""
49ˆà ˆà ˆà ˆà ifˆàself.step_id >=ˆà200:
50ˆà ˆà ˆà ˆà ˆà ˆà self.step_id =ˆà0
51ˆà ˆà ˆà ˆà ˆà ˆà self.engine.snakes =ˆà[None,ˆàNone,ˆàNone,ˆàNone]
52ˆà ˆà ˆà ˆà ˆà ˆà pass
53ˆà ˆà ˆà ˆà ifˆàself.step_id ==ˆà0:
54ˆà ˆà ˆà ˆà ˆà ˆà fileˆà=ˆàtkfd.askopenfile(title="Open file")
55ˆà ˆà ˆà ˆà ˆà ˆà ifˆàfileˆà==ˆàNone:
56ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà return
57ˆà ˆà ˆà ˆà ˆà ˆà snake =ˆàself.engine.create_snake(snake_number)
58ˆà ˆà ˆà ˆà ˆà ˆà snake.load(file)
59ˆà ˆà ˆà ˆà ˆà ˆà pass
60ˆà ˆà ˆà ˆà self.engine.refill()
61ˆà ˆà ˆà ˆà self.engine.redraw()
62ˆà ˆà ˆà ˆà return
63
64ˆà ˆà defˆàrunˆà(self):
65ˆà ˆà ˆà ˆà """Run the game with 150 ms step"""
66ˆà ˆà ˆà ˆà ifˆàself.dead_snake_check()ˆà==ˆàFalse:
67ˆà ˆà ˆà ˆà ˆà ˆà return
68ˆà ˆà ˆà ˆà ifˆàself.step_id >ˆà200:
69ˆà ˆà ˆà ˆà ˆà ˆà self.end()
70ˆà ˆà ˆà ˆà ˆà ˆà return
71ˆà ˆà ˆà ˆà self.step_id =ˆàself.step_id+1
72ˆà ˆà ˆà ˆà self.engine.step()
73ˆà ˆà ˆà ˆà self.after_id =ˆàself.canvas.after(150,ˆàself.run)
74ˆà ˆà ˆà ˆà return
75ˆà ˆà defˆàstepˆà(self):
76ˆà ˆà ˆà ˆà """Do the next game step"""
77ˆà ˆà ˆà ˆà ifˆàself.dead_snake_check()ˆà==ˆàFalse:
78ˆà ˆà ˆà ˆà ˆà ˆà return
79ˆà ˆà ˆà ˆà ifˆàself.step_id <=ˆà200:
80ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.after_id !=ˆàNone:
81ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.after_cancel(self.after_id)
82ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
83ˆà ˆà ˆà ˆà ˆà ˆà self.step_id =ˆàself.step_id+1
84ˆà ˆà ˆà ˆà ˆà ˆà self.engine.step()
85ˆà ˆà ˆà ˆà ˆà ˆà pass
86ˆà ˆà ˆà ˆà else:
87ˆà ˆà ˆà ˆà ˆà ˆà self.end()
88ˆà ˆà ˆà ˆà ˆà ˆà pass
89ˆà ˆà ˆà ˆà return
90ˆà ˆà
91ˆà ˆà defˆàdead_snake_check(self):
92ˆà ˆà ˆà ˆà """Check the number of snakes alive.
93ˆà ˆà ˆà ˆà End the game if alive snake number is less than two."""
94ˆà ˆà ˆà ˆà dead_snakes =ˆà0
95ˆà ˆà ˆà ˆà forˆàsnake inˆàself.engine.snakes:
96ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
97ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà dead_snakes=dead_snakes+1
98ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
99ˆà ˆà ˆà ˆà ifˆàdead_snakes >=ˆà3:
100ˆà ˆà ˆà ˆà ˆà ˆà self.end()
101ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
102
103ˆà ˆà defˆàendˆà(self):
104ˆà ˆà ˆà ˆà """End the game and raise the window that tels about it."""
105ˆà ˆà ˆà ˆà ifˆàself.after_id !=ˆàNone:
106ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.after_cancel(self.after_id)
107ˆà ˆà ˆà ˆà ˆà ˆà pass
108ˆà ˆà ˆà ˆà self.step_id =ˆà666
109ˆà ˆà ˆà ˆà root =ˆàtk.Tk()
110ˆà ˆà ˆà ˆà end_label =ˆàtk.Label(root,ˆàtext="End")
111ˆà ˆà ˆà ˆà end_label.pack()
112ˆà ˆà ˆà ˆà root.mainloop()
113ˆà ˆà ˆà ˆà pass
114
115ifˆà__name__ ==ˆà"__main__":
116ˆà ˆà snake_batle =ˆàUI()
117ˆà ˆà snake_batle.root.mainloop()
Note: See TracBrowser for help on using the repository browser.