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

source: main.py @ 167:36756bd7e7ed

Revision 167:36756bd7e7ed, 5.8 KB checked in by Alex Martynov, 5 years ago (diff)

added oftions for UI.restart()

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