示例#1
0
class Game:
    def __init__(self):
        self.width = 1400
        self.height = 800
        self.game_display = None
        self.background = (255, 230, 220)
        self.ground = 7 * self.height / 8
        self.clock = pygame.time.Clock()
        self.FPS = 60
        self.font_size = 20
        self.font = None
        self.points = 0
        self.g = 0.96
        self.player = Horse(self)
        self.obstacles = list()
        self.time_obs = 0
        self.time = 0

    def draw_obj(self, obj):
        self.game_display.blit(obj.img, (obj.x, obj.y))
        rect = obj.img.get_rect()
        rect.topleft = (obj.x, obj.y)
        pygame.draw.rect(self.game_display, (0, 0, 0), rect, 2)

    def draw_menu(self):
        num_obs = len([ob for ob in self.obstacles])
        obs = self.font.render('Obstacles: {}'.format(num_obs), True,
                               (0, 0, 0))
        rect = obs.get_rect()
        rect.topleft = (0, 0)
        self.game_display.blit(obs, rect)
        obs = self.font.render('Points: {}'.format(self.time / 10), True,
                               (0, 0, 0))
        rect = obs.get_rect()
        rect.topleft = (0, self.font_size)
        self.game_display.blit(obs, rect)

    def start_game(self):
        pygame.init()
        self.game_display = pygame.display.set_mode((self.width, self.height))
        self.font = pygame.font.Font('TypewriterScribbled.ttf', self.font_size)
        quit_game = False

        while not quit_game:
            self.time += 1
            self.game_display.fill(self.background)
            pygame.draw.line(self.game_display, (0, 0, 0), (0, self.ground),
                             (self.width, self.ground), 10)
            self.draw_menu()
            self.draw_obj(self.player)
            self.player.move()
            self.time_obs += 1 if self.time_obs > 0 else 0
            self.time_obs = 0 if self.time_obs == 40 else self.time_obs
            if random.random() < 0.008 and self.time_obs == 0:
                self.obstacles.append(Obstacle(self))
                self.time_obs += 1
            self.obstacles = [
                ob for ob in self.obstacles if ob.x > -110 and not ob.remove
            ]
            keys = pygame.key.get_pressed()
            if keys[pygame.K_DOWN]:
                self.player.crouch()
            for event in pygame.event.get():
                if event.type == pygame.KEYDOWN:
                    if event.key == pygame.K_SPACE or event.key == pygame.K_UP:
                        self.player.jump()
                if event.type == pygame.KEYUP:
                    if event.key == pygame.K_DOWN:
                        self.player.erect()
                if event.type == pygame.QUIT:
                    quit_game = True
                    pygame.quit()
                    quit()
            pygame.display.flip()
            for ob in self.obstacles:
                self.draw_obj(ob)
                ob.move()
                if i.closed(ob.x, ob.x + ob.width).overlaps(i.closed(self.player.x, self.player.x + self.player.width)) \
                        and i.closed(ob.y, ob.y + ob.height).overlaps(
                        i.closed(self.player.y, self.player.y + self.player.height)):
                    quit_game = True
                    pygame.quit()
                    quit()
            pygame.display.flip()
            self.clock.tick(self.FPS)