Äîêóìåíò âçÿò èç êýøà ïîèñêîâîé ìàøèíû. Àäðåñ îðèãèíàëüíîãî äîêóìåíòà : http://kodomo.cmm.msu.su/trac/tanchiki/browser/tk_ui.py?desc=1
Äàòà èçìåíåíèÿ: Unknown
Äàòà èíäåêñèðîâàíèÿ: Sun Apr 10 21:31:45 2016
Êîäèðîâêà: IBM-866
tk_ui.py òÀÓ Tanchiki

source: tk_ui.py @ 54:5cb3fef573f6

Revision 54:5cb3fef573f6, 3.5 KB checked in by Olga Zolotareva <olya_zol@òÀæ>, 5 years ago (diff)

UI for two users

  • Property exe set to *
Lineˆà
1#!/usr/bin/python
2importˆàmath
3importˆàTkinterˆàasˆàtk
4importˆàbody
5fromˆàbodyˆàimportˆàTank asˆàBaseTank,ˆàBullet
6fromˆàgameˆàimportˆàGame
7fromˆàuserˆàimportˆàUser
8fromˆàvectorˆàimportˆàVector
9
10game_size =ˆà500,ˆà500
11keys1 =ˆà{
12ˆà ˆà ˆà ˆà 'ocircumflex':ˆà'base_left',ˆà
13ˆà ˆà ˆà ˆà 'acircumflex':ˆà'base_right',
14ˆà ˆà ˆà ˆà 'eacute':ˆà'turret_left',
15ˆà ˆà ˆà ˆà 'oacute':ˆà'turret_right',
16ˆà ˆà ˆà ˆà 'odiaeresis':ˆà'accelerate',
17ˆà ˆà ˆà ˆà 'ucircumflex':ˆà'decelerate',
18ˆà ˆà ˆà ˆà 'division':ˆà'fire',
19}
20ˆà ˆà ˆà ˆà
21keys2 =ˆà{
22ˆà ˆà ˆà ˆà 'icircumflex':ˆà'base_left',ˆà
23ˆà ˆà ˆà ˆà 'adiaeresis':ˆà'base_right',
24ˆà ˆà ˆà ˆà 'atilde':ˆà'turret_left',
25ˆà ˆà ˆà ˆà 'ugrave':ˆà'turret_right',
26ˆà ˆà ˆà ˆà 'oslash':ˆà'accelerate',
27ˆà ˆà ˆà ˆà 'ediaeresis':ˆà'decelerate',
28ˆà ˆà ˆà ˆà 'udiaeresis':ˆà'fire',
29}
30
31welcome =ˆà"""Press F5 to start
32
33Keys are:
34
35
36User 1 :
37
38a, d -- turn tank
39q, e -- turn muzzle
40w, s -- change speed
41x -- fire
42
43User 2 :
44ˆà
45j, l -- turn tank
46u, o -- turn muzzle
47i, k -- change speed
48m -- fireˆà ˆà ˆà ˆà
49"""
50
51classˆàTank(BaseTank):
52
53ˆà ˆà ˆà ˆà defˆàon_tick(self,ˆàtanks,ˆàbullets):
54ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.base_left:
55ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.rotate_base(-1ˆà*ˆàbody.base_angle)
56ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.base_right:
57ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.rotate_base(body.base_angle)
58ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.turret_left:
59ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.rotate_turret(-1ˆà*ˆàbody.turret_angle)
60ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.turret_right:
61ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.rotate_turret(body.turret_angle)
62ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.accelerate:
63ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.accelerate(body.speed_delta)
64ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.decelerate:
65ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.accelerate(-1ˆà*ˆàbody.speed_delta)
66ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàself.user.fire:
67ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.fire()
68
69classˆàUI(object):
70
71ˆà ˆà ˆà ˆà defˆà__init__(self):
72ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.init_game()
73ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.init_ui()
74ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.display_welcome()
75
76ˆà ˆà ˆà ˆà defˆàinit_game(self):
77ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.user1 =ˆàUser(keys1)
78ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.user2 =ˆàUser(keys2)
79ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà w,ˆàh =ˆàgame_size
80ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà game =ˆàself.game =ˆàGame([],ˆà[self.user1,ˆàself.user2],ˆàw,ˆàh)
81ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà tank1 =ˆàTank(Vector(*game_size)ˆà*ˆà0.5,ˆà self.user1,ˆàself.game)
82ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà tank2 =ˆàTank(Vector(*game_size)ˆà*ˆà0.5,ˆà self.user2,ˆàself.game)
83ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà game.bodies.append(tank1)
84ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà game.bodies.append(tank2)
85
86ˆà ˆà ˆà ˆà defˆàinit_ui(self):
87ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà root =ˆàself.root =ˆàtk.Tk()
88ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà root.bind("<KeyPress>",ˆàself.on_keypress)
89ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà root.bind("<KeyRelease>",ˆàself.on_keyrelease)
90ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà w,ˆàh =ˆàgame_size
91ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà canvas =ˆàself.canvas =ˆàtk.Canvas(root,
92ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà background="black",ˆàwidth=w,ˆàheight=h)
93ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà canvas.pack(fill="both",ˆàexpand="yes")
94
95ˆà ˆà ˆà ˆà defˆàdisplay_welcome(self):
96ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà root,ˆàcanvas =ˆàself.root,ˆàself.canvas
97ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà root.update()
98ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà w,ˆàh =ˆàcanvas.winfo_width(),ˆàcanvas.winfo_height()
99ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà canvas.create_rectangle(0,ˆà0,ˆàw,ˆàh,ˆàfill="#211")
100ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà canvas.create_text(w/2,ˆàh/2,ˆàtext=welcome,
101ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà fill="red",ˆàjustify="center",ˆàfont="bold 15")
102
103ˆà ˆà ˆà ˆà defˆàon_keypress(self,ˆàev):
104ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàev.keysym ==ˆà"F5":
105ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.step()
106ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.user1.on_key(ev.keysym,ˆàTrue)
107ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.user2.on_key(ev.keysym,ˆàTrue)
108
109ˆà ˆà ˆà ˆà defˆàon_keyrelease(self,ˆàev):
110ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.user1.on_key(ev.keysym,ˆàFalse)
111ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.user2.on_key(ev.keysym,ˆàFalse)
112
113ˆà ˆà ˆà ˆà defˆàstep(self):
114ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.root.after(100,ˆàself.step)
115ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.game.step()
116ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.redraw()
117
118ˆà ˆà ˆà ˆà defˆàredraw(self):
119ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.delete("all")
120ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà forˆài inˆàself.game.bodies:
121ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà p =ˆài.position
122ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà lt =ˆàp +ˆàVector(-1,-1)ˆà*ˆài.radius
123ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà rb =ˆàp +ˆàVector(1,1)ˆà*ˆài.radius
124
125ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà v1 =ˆàVector(i.radius,ˆà0)
126ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàisinstance(i,ˆàbody.Tank):
127ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà v1.phi =ˆài.base_orientation.phi
128ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elseˆà:
129ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà v1.phi =ˆài.velocity.phi
130ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà vb =ˆàp -ˆàv1
131ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ve =ˆàp +ˆàv1 *ˆà2
132ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_line(vb.x,ˆàvb.y,ˆàve.x,ˆàve.y,ˆàfill="darkgray",ˆàwidth=i.radius*2)
133
134ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ifˆàisinstance(i,ˆàBaseTank):
135ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà t =ˆài.turret *ˆài.radius *ˆà1.5ˆà+ˆàp
136ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_oval(lt.x,ˆàlt.y,ˆàrb.x,ˆàrb.y,ˆàfill="darkgreen")
137ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_line(p.x,ˆàp.y,ˆàt.x,ˆàt.y,ˆàfill="orange",ˆàwidth=2)
138ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà elifˆàisinstance(i,ˆàBullet):
139ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà self.canvas.create_oval(lt.x,ˆàlt.y,ˆàrb.x,ˆàrb.y,ˆàoutline="red")
140ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà else:
141ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà ˆà raiseˆàAssertionError("Unknown object type: %s"ˆà%ˆài.__class__.__name__)
142
143ifˆà__name__ ==ˆà"__main__":
144ˆà ˆà ˆà ˆà UI().root.mainloop()
Note: See TracBrowser for help on using the repository browser.