Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/tanchiki/annotate/cf05c46d014c/tk_ui.py
Дата изменения: Unknown
Дата индексирования: Sat Mar 1 00:08:55 2014
Кодировка:
tanchiki: tk_ui.py annotate

tanchiki

annotate tk_ui.py @ 38:cf05c46d014c

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