Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/tanchiki/file/ffa51524a60d/tk_ui.py
Дата изменения: Unknown
Дата индексирования: Sun Feb 3 11:04:26 2013
Кодировка:
tanchiki: ffa51524a60d tk_ui.py

tanchiki

view tk_ui.py @ 39:ffa51524a60d

Fixed body.Tank.on_wall: it must do nothing
author Daniil Alexeyevsky <me.dendik@gmail.com>
date Mon, 20 Dec 2010 19:58:23 +0300
parents b7a85caedc7f
children f99022ca6336
line source
1 import math
2 import Tkinter as tk
3 import body
4 from game import Game
5 from vector import Vector, null
7 game_size = 100, 100
8 keys = {
9 'a': 'base_left',
10 'd': 'base_right',
11 'q': 'turret_left',
12 'e': 'turret_right',
13 'w': 'accelerate',
14 's': 'decelerate',
15 'x': 'fire',
16 }
18 class Tank(body.Tank):
20 def on_tick(self, tanks, bullets):
21 if self.user.base_left:
22 self.rotate_base(game.delta_phi)
23 if self.user.base_right:
24 self.rotate_base(-game.delta_phi)
25 if self.user.turret_left:
26 self.rotate_turret(game.delta_phi)
27 if self.user.turret_right:
28 self.rotate_turret(-game.delta_phi)
29 if self.user.accelerate:
30 self.accelerate(game.speed_delta)
31 if self.user.decelerate:
32 self.accelerate(-game.speed_delta)
33 if self.user.fire:
34 self.fire()
36 class UI(object):
38 def __init__(self):
39 self.init_game()
40 self.init_ui()
41 self.step()
43 def init_game(self):
44 self.user = User(keys)
45 tank = Tank(null, self.user)
46 self.game = Game(bodies, users=[], *game_size)
48 def init_ui(self):
49 root = self.root = tk.Tk()
50 canvas = self.canvas = tk.Canvas(root, background="black")
51 canvas.pack(fill="both", expand="yes")
52 canvas.bind("<Keypress>", self.on_key)
54 def on_key(self, ev):
55 self.game.tanks[0].on_keypress(ev.keysym)
57 def step(self):
58 self.root.after(100, self.step)
59 self.game.step(1)
60 self.redraw()
62 def redraw(self):
63 self.canvas.delete("all")
64 for body in self.game.bodies:
65 p = body.position
66 lt = p + Vector(-1,-1) * body.radius
67 rb = p + Vector(1,1) * body.radius
68 if isinstance(body, Tank):
69 t = body.turret * body.radius + p
70 self.canvas.create_oval(lt.x, lt.y, rb.x, rb.y, fill="green")
71 self.canvas.create_line(p.x, p.y, t.x, t.y, fill="yellow", width=2)
72 elif isinstance(body, Bullet):
73 self.canvas.create_oval(lt.x, lt.y, rb.x, rb.y, fill="red")
75 if __name__ == "__main__":
76 UI().root.mainloop()