Esempio n. 1
0
def main(display):
    '''Launch HotWheels.'''

    spawn_interval = SPAWN_TIME_MAX_INTERVAL

    dom = Dom(display)
    user_car = Car(USER_CAR_TYPE, dom)
    dom.add_car(user_car)

    frames_elapsed = 0
    total_frames = 0
    score = 0
    curr_level_score = 10

    restart = False
    crashed = False

    while not crashed:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return restart

            # Move left or right. The car should not go outside the boundaries.
            if event.type == pygame.KEYDOWN:
                if (event.key == pygame.K_LEFT
                        and user_car.is_car_on_right_lane()):
                    user_car.switch_lane_to_left()
                if (event.key == pygame.K_RIGHT
                        and user_car.is_car_on_left_lane()):
                    user_car.switch_lane_to_right()

        if not frames_elapsed:
            bot_car = Car(BOT_CAR_TYPE, dom)
            dom.add_car(bot_car)

        for car_name, car in dom.cars.items():
            if car.car_type == BOT_CAR_TYPE:
                try:
                    if not car.is_collision(user_car):
                        car.move()
                    else:
                        dom.render_crash_message(score)
                        pygame.display.update()
                        restart = crashed = True
                        time.sleep(2)
                        break
                except CarOutOfBoundsException:
                    score += curr_level_score
                    dom.remove_car(car)

        if crashed:
            return restart

        dom.render_dom()
        pygame.display.update()
        clock.tick(GAME_FPS)

        frames_elapsed += 1
        if frames_elapsed == spawn_interval:
            total_frames += frames_elapsed
            if total_frames >= LEVEL_UP_INTERVAL:
                curr_level_score *= 2
                spawn_interval = max(SPAWN_TIME_MIN_INTERVAL,
                                     spawn_interval - SPAWN_TIME_DECREMENT)
                total_frames = 0
            frames_elapsed = 0
    return restart