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

tanchiki

annotate tk_ui.py @ 41:3ee1cd676071

Wait for user to press F5 before starting the game
author Daniil Alexeyevsky <me.dendik@gmail.com>
date Mon, 20 Dec 2010 20:11:04 +0300
parents f99022ca6336
children dd0574c45bb9
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@40 5 from user import User
me@38 6 from vector import Vector, null
me@38 7
me@38 8 game_size = 100, 100
me@38 9 keys = {
me@38 10 'a': 'base_left',
me@38 11 'd': 'base_right',
me@38 12 'q': 'turret_left',
me@38 13 'e': 'turret_right',
me@38 14 'w': 'accelerate',
me@38 15 's': 'decelerate',
me@38 16 'x': 'fire',
me@38 17 }
me@38 18
me@38 19 class Tank(body.Tank):
me@38 20
me@38 21 def on_tick(self, tanks, bullets):
me@38 22 if self.user.base_left:
me@38 23 self.rotate_base(game.delta_phi)
me@38 24 if self.user.base_right:
me@38 25 self.rotate_base(-game.delta_phi)
me@38 26 if self.user.turret_left:
me@38 27 self.rotate_turret(game.delta_phi)
me@38 28 if self.user.turret_right:
me@38 29 self.rotate_turret(-game.delta_phi)
me@38 30 if self.user.accelerate:
me@38 31 self.accelerate(game.speed_delta)
me@38 32 if self.user.decelerate:
me@38 33 self.accelerate(-game.speed_delta)
me@38 34 if self.user.fire:
me@38 35 self.fire()
me@34 36
me@34 37 class UI(object):
me@38 38
me@34 39 def __init__(self):
me@34 40 self.init_game()
me@34 41 self.init_ui()
me@34 42
me@38 43 def init_game(self):
me@38 44 self.user = User(keys)
me@40 45 w, h = game_size
me@40 46 self.game = Game([], [self.user], w, h)
me@40 47 tank = Tank(null, self.user, self.game)
me@38 48
me@34 49 def init_ui(self):
me@34 50 root = self.root = tk.Tk()
me@40 51 root.bind("<KeyPress>", self.on_key)
me@34 52 canvas = self.canvas = tk.Canvas(root, background="black")
me@34 53 canvas.pack(fill="both", expand="yes")
me@34 54
me@41 55 root.update()
me@41 56 w, h = canvas.winfo_width(), canvas.winfo_height()
me@41 57 canvas.create_text(w/2, h/2, text="Press F5 to start",
me@41 58 fill="red", justify="center", font="15")
me@41 59
me@34 60 def on_key(self, ev):
me@41 61 if ev.keysym == "F5":
me@41 62 self.step()
me@40 63 self.user.on_keypress(ev.keysym)
me@34 64
me@34 65 def step(self):
me@34 66 self.root.after(100, self.step)
me@40 67 self.game.step()
me@34 68 self.redraw()
me@34 69
me@34 70 def redraw(self):
me@34 71 self.canvas.delete("all")
me@34 72 for body in self.game.bodies:
me@34 73 p = body.position
me@34 74 lt = p + Vector(-1,-1) * body.radius
me@34 75 rb = p + Vector(1,1) * body.radius
me@34 76 if isinstance(body, Tank):
me@34 77 t = body.turret * body.radius + p
me@34 78 self.canvas.create_oval(lt.x, lt.y, rb.x, rb.y, fill="green")
me@34 79 self.canvas.create_line(p.x, p.y, t.x, t.y, fill="yellow", width=2)
me@34 80 elif isinstance(body, Bullet):
me@34 81 self.canvas.create_oval(lt.x, lt.y, rb.x, rb.y, fill="red")
me@34 82
me@34 83 if __name__ == "__main__":
me@34 84 UI().root.mainloop()