Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/tanchiki/raw-annotate/1a0bddee3c54/body.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 11 15:13:44 2011
Кодировка:

olya_zol@35: import vector
olya_zol@35: import math
olya_zol@35: import random
olya_zol@35:
olya_zol@35: base_angle = math.pi/32 # deltha phi = math.pi/32
olya_zol@35: turret_angle = math.pi/32
olya_zol@35: speed_delta = 1
olya_zol@35: delta_t = 1
olya_zol@35: max_velocity = 4
olya_zol@35: max_base_angle = 1
olya_zol@35: max_turret_angle = 1
olya_zol@35: initial_strength = 1
olya_zol@35: bullet_velocity = 10
olya_zol@35: width = 100
olya_zol@35: height = 100
olya_zol@35:
olya_zol@35: class Body(object):
olya_zol@35: def __init__(self, position, velocity = vector.null):
olya_zol@35: self.position = position
olya_zol@35: self.velocity = velocity
olya_zol@35:
olya_zol@35: class Tank(Body):
olya_zol@35: radius = 5
olya_zol@35: def __init__(self, position, user, game):
olya_zol@35: Body.__init__(self, position)
olya_zol@35: self.game = game
olya_zol@35: self.turret = vector.i
olya_zol@35: self.strength = 0
olya_zol@35: self.base_orientation = 1 # 1 or -1
olya_zol@35: self.user = user
olya_zol@35: user.tank = self
olya_zol@35:
olya_zol@35:
olya_zol@35: def rotate_base(tank, angle):
olya_zol@35: if abs(angle) < max_base_angle:
olya_zol@35: self.velocity.phi += angle
olya_zol@35: else:
olya_zol@35: self.velocity.phi += max_base_angle
olya_zol@35:
olya_zol@35: def rotate_turret(self, angle):
olya_zol@35: if abs(angle) < max_base_angle:
olya_zol@35: self.turret.phi += angle
olya_zol@35: else:
olya_zol@35: self.turret.phi += max_turret_angle
olya_zol@35:
olya_zol@35:
olya_zol@35: def accelerate(self, speed_delta):
olya_zol@35: self.velocity += self.velocity.normalize() * speed_delta * delta_t
olya_zol@35: print self.velocity.rho
olya_zol@35: if self.velocity.rho > max_velocity:
olya_zol@35: self.velocity.rho = max_velocity
olya_zol@35:
olya_zol@35: def fire(self):
olya_zol@35: bullet_position = self.position + self.turret * (self.radius + 0.1)
olya_zol@35: bullet_velocity = self.turret.normalize() * self.game.bullet_speed
olya_zol@35: bullet = Bullet(bullet_position, bullet_velocity, self)
olya_zol@35: self.game.bodies.append(bullet)
olya_zol@35:
olya_zol@35: def on_tick(self,other_tanks, bullets):
olya_zol@35: if self.user.base_left == True:
olya_zol@35: self.rotate_base(base_angle)
olya_zol@35: if self.user.base_right == True:
olya_zol@35: self.rotate_base(-1*base_angle)
olya_zol@35: if self.user.accelerate == True:
olya_zol@35: self.accelerate(speed_delta)
olya_zol@35: if self.user.decelerate == True:
olya_zol@35: self.accelerate(-1*speed_delta)
olya_zol@35: if self.user.turret_left == True:
olya_zol@35: self.rotate_turret(turret_angle)
olya_zol@35: if self.user.turret_right == True:
olya_zol@35: self.rotate_turret(-1*turret_angle)
olya_zol@35: if self.user.fire == True:
olya_zol@35: self.fire()
olya_zol@35:
olya_zol@35: def on_spawn(self):
olya_zol@35: pass
olya_zol@35:
olya_zol@35: def on_death(self) :
olya_zol@35: pass
olya_zol@35:
olya_zol@35: def on_hit(self, bullet):
olya_zol@35: pass
olya_zol@35:
olya_zol@35: def on_collision(self, other):
olya_zol@35: pass
olya_zol@35:
olya_zol@35: def on_wall(self):
olya_zol@35: self.next_position = self.position
olya_zol@35:
olya_zol@35: class Bullet(Body):
olya_zol@35: radius = 0.1
olya_zol@35: def __init__(self, position, velocity, tank):
olya_zol@35: Body.__init__(self, position, velocity = bullet_velocity)
olya_zol@35: self.tank = tank