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

tanchiki

annotate tk_ui.py @ 36:1a0bddee3c54

Automated merge with ssh://kodomo.fbb.msu.ru/tanchiki
author Olga Zolotareva <olya_zol@inbox.ru>
date Mon, 20 Dec 2010 18:43:18 +0300
parents
children cf05c46d014c
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()