示例#1
0
def main():
    global CLOCK, SCREEN, bird, floor, point, last_pipe, point_sound
    pygame.init()  # 初始化pygame
    pygame.mixer.init()
    point_sound = ResourceLoader.get_sound("point.wav")
    wing_sound = ResourceLoader.get_sound("wing.wav")
    die_sound = ResourceLoader.get_sound("die.wav")
    CLOCK = pygame.time.Clock()
    SCREEN = pygame.display.set_mode([SCREEN_WIDTH, SCREEN_HEIGHT])  # 初始化一个用于显示的窗口
    pygame.display.set_caption('flappyBird')  # 设置窗口标题.

    bird = Bird(window_size, wing_sound, die_sound)
    floor = Floor(window_size)
    background = ResourceLoader.get_image("background-day.png")
    message = ResourceLoader.get_image("message.png")
    message_rect = (message.get_rect(centerx=SCREEN_WIDTH / 2, centery=SCREEN_HEIGHT / 2))
    reset()
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            if event.type == KEYDOWN:
                if event.key == K_SPACE or event.key == K_UP:
                    if not bird.isDie:
                        bird.fly()
                    else:
                        reset()
        if not bird.isDie:
            bird.update()
            floor.update()
        SCREEN.blit(background, (0, 0))
        if not bird.begin_fly and not bird.isDie:
            SCREEN.blit(message, (message_rect.x, message_rect.y))
        else:
            for i in range(COUNT):
                center_y = make_center_y()
                pipe_top = pipes_top[i]
                pipe_botom = pipes_botom[i]
                if not bird.isDie:
                    pipe_top.update(center_y)
                    pipe_botom.update(center_y)
                SCREEN.blit(pipe_top.image, (pipe_top.rect.x, pipe_top.rect.y))
                SCREEN.blit(pipe_botom.image, (pipe_botom.rect.x, pipe_botom.rect.y))

        SCREEN.blit(floor.image, (floor.rect.x, floor.rect.y))
        SCREEN.blit(bird.get_bird_image(), (bird.rect.x, bird.rect.y))
        if bird.isDie:
            game_over = ResourceLoader.get_image("gameover.png")
            SCREEN.blit(game_over, (
                (SCREEN_WIDTH - game_over.get_rect().width) / 2, (SCREEN_HEIGHT - game_over.get_rect().height) / 2))
        if bird.begin_fly:
            show_point()
            if check_conlision():
                bird.die()

        pygame.display.flip()
        CLOCK.tick(FPS)
示例#2
0
def show_point():
    global last_pipe, point
    if not bird.isDie and bird.begin_fly:
        arr = list(filter(lambda pipe:
                          bird.rect.x > (pipe.rect.x + pipe.rect.width) > 0,
                          pipes_botom))
        if arr:
            if last_pipe != arr[0]:
                point += 1
                last_pipe = arr[0]
                point_sound.play()

    point_str = str(point)
    num_image_list = []
    for num in point_str:
        num_image_list.append(ResourceLoader.get_image(ResourceLoader.NUMBER_IMAGES[int(num)]))
    numbers_width = len(point_str) * ResourceLoader.get_image(ResourceLoader.NUMBER_IMAGES[0]).get_rect().width
    first_num_x = (SCREEN_WIDTH - numbers_width) / 2

    for i in range(len(num_image_list)):
        SCREEN.blit(num_image_list[i], (first_num_x + i * numbers_width / len(point_str), 50))
示例#3
0
 def __init__(self, offset_x, offset_y, window_size, reverse,
              horizontal_distance, vertical_distance, center_y):
     super().__init__()
     self.offset_x = offset_x
     self.offset_y = offset_y
     self.window_size = window_size
     self.image = ResourceLoader.get_image("pipe-green.png")
     self.rect = self.image.get_rect()
     self.reverse = reverse
     self.horizontal_distance = horizontal_distance
     self.vertical_distance = vertical_distance
     self.center_y = center_y
     if reverse:
         self.image = pygame.transform.rotate(self.image, 180)
         self.rect.x = Pipe.top_index * (
             self.rect.width + self.horizontal_distance) + offset_x
         self.rect.y = center_y - self.rect.height - self.vertical_distance / 2
         Pipe.top_index += 1
     else:
         self.rect.x = Pipe.bottom_index * (
             self.rect.width + self.horizontal_distance) + offset_x
         self.rect.y = center_y + self.vertical_distance - self.vertical_distance / 2
         Pipe.bottom_index += 1
示例#4
0
 def __init__(self, window_size):
     super().__init__()
     self.window_size = window_size
     self.image = ResourceLoader.get_image("base.png")
     self.rect = self.image.get_rect()
     self.rect.y = window_size.height - self.rect.height