| rev |
line source |
|
me@34
|
1 import math |
|
me@34
|
2 import Tkinter as tk |
|
me@34
|
3 from game import Game |
|
me@34
|
4 from body import Tank, Bullet |
|
me@34
|
5 from vector import Vector |
|
me@34
|
6 from user_controller import UserController |
|
me@34
|
7 |
|
me@34
|
8 class UI(object): |
|
me@34
|
9 def __init__(self): |
|
me@34
|
10 self.init_game() |
|
me@34
|
11 self.init_ui() |
|
me@34
|
12 self.step() |
|
me@34
|
13 |
|
me@34
|
14 def init_ui(self): |
|
me@34
|
15 root = self.root = tk.Tk() |
|
me@34
|
16 canvas = self.canvas = tk.Canvas(root, background="black") |
|
me@34
|
17 canvas.pack(fill="both", expand="yes") |
|
me@34
|
18 canvas.bind("<Keypress>", self.on_key) |
|
me@34
|
19 |
|
me@34
|
20 def on_key(self, ev): |
|
me@34
|
21 self.controller |
|
me@34
|
22 |
|
me@34
|
23 def init_game(self): |
|
me@34
|
24 bodies = [] |
|
me@34
|
25 self.game = Game(100, 100, bodies) |
|
me@34
|
26 tank = Tank(self.game, Vector.null, None) |
|
me@34
|
27 controller = UserController('a', 'd', 'q', 'e', 'w', 's', 'x', tank) |
|
me@34
|
28 tank.controller = controller |
|
me@34
|
29 bodies.append(tank) |
|
me@34
|
30 |
|
me@34
|
31 def step(self): |
|
me@34
|
32 self.root.after(100, self.step) |
|
me@34
|
33 self.game.step(1) |
|
me@34
|
34 self.redraw() |
|
me@34
|
35 |
|
me@34
|
36 def redraw(self): |
|
me@34
|
37 self.canvas.delete("all") |
|
me@34
|
38 for body in self.game.bodies: |
|
me@34
|
39 p = body.position |
|
me@34
|
40 lt = p + Vector(-1,-1) * body.radius |
|
me@34
|
41 rb = p + Vector(1,1) * body.radius |
|
me@34
|
42 if isinstance(body, Tank): |
|
me@34
|
43 t = body.turret * body.radius + p |
|
me@34
|
44 self.canvas.create_oval(lt.x, lt.y, rb.x, rb.y, fill="green") |
|
me@34
|
45 self.canvas.create_line(p.x, p.y, t.x, t.y, fill="yellow", width=2) |
|
me@34
|
46 elif isinstance(body, Bullet): |
|
me@34
|
47 self.canvas.create_oval(lt.x, lt.y, rb.x, rb.y, fill="red") |
|
me@34
|
48 |
|
me@34
|
49 if __name__ == "__main__": |
|
me@34
|
50 UI().root.mainloop() |