def next_frame(self): try: if not self.waiting: self.count += 1 self.surface.fill(pg.Color('black')) self.space.step(1 / self.FPS) self.space.debug_draw(self.draw_options) if self.count % (self.FPS * self.create_time) == 0: self.i = randrange(1, 5) self.current_fruit = create_fruit( self.i, int(self.WIDTH/2), self.init_y - 10) self.count = 1 self.waiting = True for event in pg.event.get(): if event.type == pg.QUIT: exit() elif event.type == pg.MOUSEBUTTONUP and self.i and self.waiting: x, _ = pg.mouse.get_pos() fruit = create_fruit(self.i, x, self.init_y) self.fruits.append(fruit) ball = self.create_ball( self.space, x, self.init_y, m=fruit.r//10, r=fruit.r-fruit.r % 5, i=self.i) self.balls.append(ball) self.current_fruit = None self.i = None self.waiting = False if not self.lock: for i, ball in enumerate(self.balls): if ball: angle = ball.body.angle x, y = (int(ball.body.position[0]), int( ball.body.position[1])) self.fruits[i].update_position(x, y, angle) self.fruits[i].draw(self.surface) if self.current_fruit: self.current_fruit.draw(self.surface) pg.draw.aaline(self.surface, (0, 200, 0), (0, self.init_y), (self.WIDTH, self.init_y), 5) self.show_score() if self.check_fail(): self.score = 0 self.last_score = 0 self.reset() pg.display.flip() self.clock.tick(self.FPS) except Exception as e: print(e) if len(self.fruits) > len(self.balls): seg = len(self.fruits) - len(self.balls) self.fruits = self.fruits[:-seg] elif len(self.balls) > len(self.fruits): seg = len(self.balls) - len(self.fruits) self.balls = self.balls[:-seg]
def post_solve_bird_line(arbiter, space, data): if not self.lock: self.lock = True b1, b2 = None, None i = arbiter.shapes[0].collision_type + 1 x1, y1 = arbiter.shapes[0].body.position x2, y2 = arbiter.shapes[1].body.position if y1 > y2: x, y = x1, y1 else: x, y = x2, y2 if arbiter.shapes[0] in self.balls and arbiter.shapes[ 1] in self.balls: b1 = self.balls.index(arbiter.shapes[0]) space.remove(arbiter.shapes[0], arbiter.shapes[0].body) self.balls.remove(arbiter.shapes[0]) fruit1 = self.fruits[b1] self.fruits.remove(fruit1) b2 = self.balls.index(arbiter.shapes[1]) space.remove(arbiter.shapes[1], arbiter.shapes[1].body) self.balls.remove(arbiter.shapes[1]) fruit2 = self.fruits[b2] self.fruits.remove(fruit2) fruit = create_fruit(i, x, self.init_y) self.fruits.append(fruit) ball = self.create_ball(self.space, x, y, m=fruit.r // 10, r=fruit.r - 1, i=i) self.balls.append(ball) if i < 11: self.last_score = self.score self.score += i elif i == 11: self.last_score = self.score self.score += 100 self.lock = False