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

tanchiki

view game.py @ 52:d740eff76e7e

some bugs corrected
author Olga Zolotareva <olya_zol@inbox.ru>
date Fri, 24 Dec 2010 22:10:08 +0300
parents 1a0bddee3c54
children 5450c97fbc38
line source
1 import vector
2 import body
3 import time
4 import random
6 other_tanks = []
7 bullets = []
8 width = 500
9 height = 500
11 class Game(object):
12 def __init__(self, bodies, users, width, height):
13 self.bodies = bodies
14 self.users = users
15 self.width = width
16 self.height = height
18 def step(self):
19 self.next_positions()
20 self.check_collisions()
21 self.check_walls()
22 self.update_positions()
23 self.invoke_ticks()
24 self.respawn()
25 self.update_velocities()
26 for i in self.bodies :
27 print i
28 # print 'next position' , i.next_position
29 print 'update_position' , i.position
30 print 'velocity' , i.velocity
31 print 'velocity.rho', i.velocity.rho # test
32 print '\n'
33 if isinstance(i,body.Tank) == True:
34 print 'base_orientation' , i.base_orientation
36 def update_velocities(self):
37 for i in self.bodies:
38 if isinstance(i, body.Tank):
39 if abs(i.velocity) > 1e-10 :
40 i.velocity = i.velocity - i.velocity.normalize()*body.acceleration
41 else :
42 i.velocity.rho = 0
44 def next_positions(self):
45 delta_t = 1
46 for i in self.bodies:
47 i.next_position = i.position + i.velocity*body.delta_t
48 if isinstance(i, body.Bullet) == True:
49 print 'Bullet', i
51 def check_collisions(self):
52 for i in self.bodies:
53 for j in self.bodies:
54 if self.collides(i,j) == True :
55 self.handle_collision(i,j)
57 def collides(self,body1,body2):
58 # if (abs(body1.next_position - body2.next_position) <= (body1.radius + body2.radius)): if (body1 != body2):
59 # print 'collision'
60 # return True
61 # else :
62 # return False
63 # else :
64 return False
66 def handle_collision(self,body1,body2):
67 if isinstance(body1, body.Tank) == True :
68 if isinstance(body2, body.Tank) == True :
69 body1.on_collision(body2)
70 else :
71 body1.on_hit()
72 body1.on_death()
73 else :
74 if isinstance(body2, body.Tank) == True :
75 body2.on_hit()
76 body2.on_death()
78 def check_walls(self):
79 for i in self.bodies :
80 if ((i.next_position.x - i.radius) <= 0) or ((i.next_position.y - i.radius) <= 0) or ((i.next_position.x + i.radius) >= self.width) or ((i.next_position.y + i.radius) >= self.height) :
81 i.on_wall()
82 print 'wall' #test
84 def update_positions(self):
85 for i in self.bodies:
86 i.position = i.next_position
88 def invoke_ticks(self):
89 for i in self.bodies :
90 if isinstance(i, body.Tank) :
91 i.on_tick([], [])
94 def respawn(self):
95 for i in self.users :
96 if i.tank.strength == 0 :
97 i.tank.on_spawn()
98 print 'respawn'
99 print i.tank.strength , i.tank.position
100 i.tank.strength = 1
101 i.tank.velocity = vector.null
102 i.tank.position.x = random.randint(i.tank.radius , width - i.tank.radius)
103 i.tank.position.y = random.randint(i.tank.radius , height - i.tank.radius)
104 i.tank.velocity = vector.null
105 print i.tank.strength , i.tank.position