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

source: main.py @ 165:af59540d48a9

Revision 165:af59540d48a9, 5.3 KB checked in by Alex Martynov, 5 years ago (diff)

UI.start() function added (still need to check for bags)
UI.next_round() function added - passes

  • 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
11ˆà ˆà Atributes:
12
13ˆà ˆà - 'root' - root Window game placed at
14ˆà ˆà - 'engine' - engine of the game
15ˆà ˆà - 'canvas' - Widget field is pictured at
16ˆà ˆà - 'step_id' - current step of the game
17ˆà ˆà - 'after_id' - identificator of runing game process
18ˆà ˆà - 'step_legth' - fime of the step"""
19ˆà ˆà defˆà__init__ˆà(self):
20ˆà ˆà ˆà ˆà """Create Python Battle game window.
21ˆà ˆà ˆà ˆà Initialyze engige of the game."""
22ˆà ˆà ˆà ˆà self.root =ˆàtk.Tk()
23ˆà ˆà ˆà ˆà self.root.title("Python Battle")
24ˆà ˆà ˆà ˆà self.canvas =ˆàtk.Canvas(self.root,ˆàbackground =ˆà"black")
25ˆà ˆà ˆà ˆà self.canvas.pack(side ="top",ˆàfill="both",ˆàexpand="yes")
26ˆà ˆà ˆà ˆà self.buttons_pack(self.root).pack(side ="bottom",ˆàfill="both",ˆàexpand="no")
27ˆà ˆà ˆà ˆà self.step_id =ˆà0
28ˆà ˆà ˆà ˆà self.engine =ˆàengine.Engine(self.canvas)
29ˆà ˆà ˆà ˆà self.after_id =ˆàNone
30ˆà ˆà ˆà ˆà self.step_length =ˆà150
31ˆà ˆà ˆà ˆà return
32ˆà ˆà
33ˆà ˆà defˆàbuttons_pack(self,ˆàroot):
34ˆà ˆà ˆà ˆà """Packing the buttons in root frame.
35ˆà ˆà ˆà ˆà Definition of button functions."""
36ˆà ˆà ˆà ˆà buttons =ˆàtk.Frame(root)
37ˆà ˆà ˆà ˆà load_1 =ˆàtk.Button(buttons,ˆàtext="Load 1",ˆàcommand=lambda:ˆàself.load(0))
38ˆà ˆà ˆà ˆà load_1.grid(row=1,ˆàcolumn=2,ˆàstick="news")
39ˆà ˆà ˆà ˆà load_2 =ˆàtk.Button(buttons,ˆàtext="Load 2",ˆàcommand=lambda:ˆàself.load(1))
40ˆà ˆà ˆà ˆà load_2.grid(row=2,ˆàcolumn=3,ˆàstick="news")
41ˆà ˆà ˆà ˆà run_b =ˆàtk.Button(buttons,ˆàtext="Run",ˆàcommand=lambda:ˆàself.start())
42ˆà ˆà ˆà ˆà run_b.grid(row=2,ˆàcolumn=2,ˆàstick="news")
43ˆà ˆà ˆà ˆà restart_b =ˆàtk.Button(buttons,ˆàtext="Restart",ˆàcommand=lambda:ˆàself.restart())
44ˆà ˆà ˆà ˆà restart_b.grid(row=1,ˆàcolumn=5,ˆàstick="news")
45ˆà ˆà ˆà ˆà load_3 =ˆàtk.Button(buttons,ˆàtext="Load 3",ˆàcommand=lambda:ˆàself.load(2))
46ˆà ˆà ˆà ˆà load_3.grid(row=3,ˆàcolumn=2,ˆàstick="news")
47ˆà ˆà ˆà ˆà load_4 =ˆàtk.Button(buttons,ˆàtext="Load 4",ˆàcommand=lambda:ˆàself.load(3))
48ˆà ˆà ˆà ˆà load_4.grid(row=2,ˆàcolumn=1,ˆàstick="news")
49ˆà ˆà ˆà ˆà step_b =ˆàtk.Button(buttons,ˆàtext="Step",ˆàcommand=lambda:ˆàself.step())
50ˆà ˆà ˆà ˆà step_b.grid(row=2,ˆàcolumn=5,ˆàstick="news")
51ˆà ˆà ˆà ˆà end_b =ˆàtk.Button(buttons,ˆàtext="End",ˆàcommand=lambda:ˆàself.end())
52ˆà ˆà ˆà ˆà end_b.grid(row=3,ˆàcolumn=5,ˆàstick="news")
53ˆà ˆà ˆà ˆà forˆàcolumn inˆàrange(1,ˆà6):
54ˆà ˆà ˆà ˆà ˆà buttons.grid_columnconfigure(column,ˆàweight=1)
55ˆà ˆà ˆà ˆà returnˆàbuttons
56ˆà ˆà
57ˆà ˆà defˆàloadˆà(self,ˆàsnake_number):
58ˆà ˆà ˆà ˆà """Ask for snake file loading.
59ˆà ˆà ˆà ˆà Initialyzing snake and draw it on the field.
60ˆà ˆà ˆà ˆà Return field back to default (without snakes) after end of the game."""
61ˆà ˆà ˆà ˆà ifˆàself.step_id ==ˆà666:
62ˆà ˆà ˆà ˆà ˆà ˆà self.step_id =ˆà0
63ˆà ˆà ˆà ˆà ˆà ˆà self.engine.snakes =ˆà[None,ˆàNone,ˆàNone,ˆàNone]
64ˆà ˆà ˆà ˆà ˆà ˆà pass
65ˆà ˆà ˆà ˆà ifˆàself.step_id ==ˆà0:
66ˆà ˆà ˆà ˆà ˆà ˆà fileˆà=ˆàtkfd.askopenfile(title="Open file")
67ˆà ˆà ˆà ˆà ˆà ˆà ifˆàfileˆà==ˆàNone:
68ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà return
69ˆà ˆà ˆà ˆà ˆà ˆà snake =ˆàself.engine.create_snake(snake_number)
70ˆà ˆà ˆà ˆà ˆà ˆà snake.load(file)
71ˆà ˆà ˆà ˆà ˆà ˆà pass
72ˆà ˆà ˆà ˆà self.engine.refill()
73ˆà ˆà ˆà ˆà self.engine.redraw()
74ˆà ˆà ˆà ˆà return
75
76ˆà ˆà defˆàstartˆà(self):
77ˆà ˆà ˆà ˆà """Init running of the game."""
78ˆà ˆà ˆà ˆà ifˆàself.step_id ==ˆà666:
79ˆà ˆà ˆà ˆà ˆà ˆà self.next_round()
80ˆà ˆà ˆà ˆà ifˆàself.dead_snake_check()ˆà==ˆàFalse:
81ˆà ˆà ˆà ˆà ˆà ˆà return
82ˆà ˆà ˆà ˆà ifˆàself.step_id >ˆà200:
83ˆà ˆà ˆà ˆà ˆà ˆà self.end()
84ˆà ˆà ˆà ˆà ˆà ˆà return
85ˆà ˆà ˆà ˆà self.engine.psnakes =ˆàself.engine.snakes[:]
86ˆà ˆà ˆà ˆà self.run()
87ˆà ˆà ˆà ˆà
88ˆà ˆà defˆàrunˆà(self):
89ˆà ˆà ˆà ˆà """Run the game with 'step_length' ms step
90ˆà ˆà ˆà ˆà After the end of the game - restarts it with snakes survived in
91ˆà ˆà ˆà ˆà previous game"""
92ˆà ˆà ˆà ˆà self.step_id =ˆàself.step_id+1
93ˆà ˆà ˆà ˆà self.engine.step()
94ˆà ˆà ˆà ˆà self.after_id =ˆàself.canvas.after(self.step_length,ˆàself.run)
95ˆà ˆà ˆà ˆà return
96ˆà ˆà
97ˆà ˆà defˆàstepˆà(self):
98ˆà ˆà ˆà ˆà """Do the next game step"""
99ˆà ˆà ˆà ˆà ifˆàself.dead_snake_check()ˆà==ˆàFalse:
100ˆà ˆà ˆà ˆà ˆà ˆà return
101ˆà ˆà ˆà ˆà ifˆàself.step_id <=ˆà200:
102ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.after_id !=ˆàNone:
103ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.after_cancel(self.after_id)
104ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
105ˆà ˆà ˆà ˆà ˆà ˆà self.step_id =ˆàself.step_id+1
106ˆà ˆà ˆà ˆà ˆà ˆà self.engine.step()
107ˆà ˆà ˆà ˆà ˆà ˆà pass
108ˆà ˆà ˆà ˆà else:
109ˆà ˆà ˆà ˆà ˆà ˆà self.end()
110ˆà ˆà ˆà ˆà ˆà ˆà pass
111ˆà ˆà ˆà ˆà return
112ˆà ˆà
113ˆà ˆà defˆàdead_snake_check(self):
114ˆà ˆà ˆà ˆà """Check the number of snakes alive.
115ˆà ˆà ˆà ˆà End the game if alive snake number is less than two."""
116ˆà ˆà ˆà ˆà dead_snakes =ˆà0
117ˆà ˆà ˆà ˆà forˆàsnake inˆàself.engine.snakes:
118ˆà ˆà ˆà ˆà ˆà ˆà ifˆàsnake ==ˆàNone:
119ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà dead_snakes=dead_snakes+1
120ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà pass
121ˆà ˆà ˆà ˆà ifˆàdead_snakes >=ˆà3:
122ˆà ˆà ˆà ˆà ˆà ˆà self.end()
123ˆà ˆà ˆà ˆà ˆà ˆà returnˆàFalse
124ˆà ˆà ˆà ˆà
125ˆà ˆà defˆàrestart(self):
126ˆà ˆà ˆà ˆà """"Restarts the game after the end of the game with snakes survived"""
127ˆà ˆà ˆà ˆà self.step_id =ˆà0
128ˆà ˆà ˆà ˆà forˆài,ˆàsnake inˆàenumerate(self.engine.psnakes):
129ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.engine.psnakes[i]ˆà!=ˆàNone:
130ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.engine.snakes[i]ˆà=ˆàsnake
131ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.engine.create_snake(i,ˆàsnake)
132ˆà ˆà ˆà ˆà self.engine.refill()
133ˆà ˆà ˆà ˆà self.engine.redraw()
134
135ˆà ˆà defˆànext_round(self):
136ˆà ˆà ˆà ˆà pass
137
138ˆà ˆà defˆàendˆà(self):
139ˆà ˆà ˆà ˆà """End the game and raise the window that tels about it."""
140ˆà ˆà ˆà ˆà ifˆàself.after_id !=ˆàNone:
141ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.after_cancel(self.after_id)
142ˆà ˆà ˆà ˆà ˆà ˆà pass
143ˆà ˆà ˆà ˆà self.step_id =ˆà666
144ˆà ˆà ˆà ˆà root =ˆàtk.Tk()
145ˆà ˆà ˆà ˆà end_label =ˆàtk.Label(root,ˆàtext="End")
146ˆà ˆà ˆà ˆà end_label.pack()
147ˆà ˆà ˆà ˆà root.mainloop()
148ˆà ˆà ˆà ˆà pass
149
150ifˆà__name__ ==ˆà"__main__":
151ˆà ˆà snake_batle =ˆàUI()
152ˆà ˆà snake_batle.root.mainloop()
Note: See TracBrowser for help on using the repository browser.