def init_screen(self): def _init(): pos = 0, 0 size = runtime.app_width, screen_height bg = config.img_dir + 'bumpingball/game_bg.png' self.screen = BumpingBallScreen(pos, size, bg) win = BumpingBallWindow(self) self.replace_window(win) self._idle_tag = None self._idle_tag = eloop.Timer(1000, _init)
def prepare_ball(self): def _move_ball(): x, y = self.ball.pos self.ball.pos = x, y - 1 if self.ball.pos[1] <= self.pos[1]: self.ani_tag = None return False return True self.ani_tag = eloop.Timer(50, _move_ball) color = self.color x, y = self.pos pos = x, y + 20 self.ball = Ball(self, self.screen, color, pos)
def handle_move_action_event(self, ev, *args): if ev == 'gameover': color, pos = args self.game_state = 'gameover' def _timeout(): self.timeout_tag = None self.game_state = 'idle' def _cb(): self.new_game() from gameover_popup import GameOverPopup self.dlg = GameOverPopup(self.score) self.dlg.add_callback('dialog-close', _cb) self.timeout_tag = eloop.Timer(1000, _timeout) self.do_collision_effect(color, color, pos) elif ev == 'ball-contact': color1, color2, pos = args self.do_collision_effect(color1, color2, pos)
def start(self): self.reset_color() def _change_angle(): if self.direction == 'left': angle = self.angle + 1 else: angle = self.angle - 1 if self.max_angle <= angle: self.direction = 'right' angle = self.max_angle elif angle <= self.min_angle: self.direction = 'left' angle = self.min_angle self.angle = angle return True self.__update_tag = eloop.Timer(20, _change_angle)
def run(self, shape, vector): self.shape = shape r,g,b,a = shape.color shape.color = r, g, b, int(a * .3) dt = float(self.expire_time) / self.time_slice nv = vector.normalize() def _move(): self.duration += self.time_slice if self.expire_time <= self.duration: self.run_tag = None shape.destroy() self.finished_cb() return False dx, dy = nv * 5 x, y = shape.pos shape.pos = x + dx, y + dy return True self.run_tag = eloop.Timer(self.time_slice, _move)
def run(self, shape, vector): self.shape = shape dt = float(self.expire_time) / self.time_slice nv = vector.normalize() def _move(): self.duration += self.time_slice if self.expire_time <= self.duration: self.run_tag = None self.finished_cb(shape) return False dx, dy = nv x, y = shape.pos shape.pos = x + dx, y + dy if self.rotation == 'left': shape.angle = (shape.angle - 20) % 360 else: shape.angle = (shape.angle + 20) % 360 return True self.run_tag = eloop.Timer(self.time_slice, _move)
def run(self, shape): self.__s = self.speed def _move(): acceleration = self.__s * self.acceleration self.__s -= acceleration d = self.__s * self.time_slice if self.__s < 2: self.run_tag = None r = shape.r while not self.is_collided(shape, r): r += 1 shape.expand(r) return False dx, dy = self._get_dxy(d) move_vector = vector.Vector((dx, dy)) #import time #s = time.time() self.check_collision(shape, move_vector) #print 'collision check elapsed: ', time.time() - s return True self.run_tag = eloop.Timer(30, _move)