コード例 #1
0
    def __game(self):
        print("entering __game")

        levels = Level(self.graphics, "home")

        bobby = Bobby(self.graphics)

        finalrender = pygame.Surface(
            (levels.get_map_size()[0], levels.get_map_size()[1]))

        in_dial = False
        pnj_name = "null"
        dial_count = 1

        state_to_return = "EXIT"
        goon = True
        while goon:
            #print(self.clock.get_fps())
            deltatime = self.clock.tick(30) / 100.0

            #events
            for event in pygame.event.get():
                if event.type == QUIT:
                    goon = False

                if in_dial:
                    if event.type == pygame.KEYUP:
                        if event.key == pygame.K_ESCAPE:
                            in_dial = False
                            pnj_name = "null"
                            dial_count = 1

                        if event.key == pygame.K_RETURN:
                            dial_count += 1
                            if dial_count > len(
                                    levels.chars[pnj_name]["dials"]):
                                in_dial = False
                                pnj_name = "null"
                                dial_count = 1
                else:
                    levels.event(event)

                    bobby.event(event)

            # updates
            bob_value = bobby.update(deltatime, levels.get_map_size(), levels)

            if bobby.get_state_to_return() == "MENU":
                state_to_return = "MENU"
                goon = False

            levels.update(bob_value, bobby)

            if levels.currentmap == "credits":
                goon = False
                state_to_return = "CREDITS"
                break

            if finalrender.get_width() != levels.get_map_size(
            )[0] or finalrender.get_height() != levels.get_map_size()[1]:
                finalrender = pygame.Surface(
                    (levels.get_map_size()[0], levels.get_map_size()[1]))

            # draws
            finalrender.blit(levels.draw(), (0, 0))

            b_x, b_y = bobby.get_pos()
            finalrender.blit(bobby.draw(), (b_x, b_y))

            self.screen.blit(
                pygame.transform.scale(finalrender,
                                       (c.WINDOW_WIDTH, c.WINDOW_HEIGHT)),
                (0, 0))

            if bob_value.split(' ')[0] == "pnj" and not in_dial:  # or in_dial
                in_dial = True
                pnj_name = bob_value.split(' ')[1]

            elif in_dial:
                bobby_talk = False

                my_font = pygame.font.Font("res/ubuntumono-r.ttf", 22)
                my_string = levels.chars[pnj_name]["dials"][str(dial_count)]
                if my_string[0] == "*":
                    bobby_talk = True
                    my_string = "<Bobby>  " + my_string[1:]
                else:
                    my_string = "<" + pnj_name[0].upper(
                    ) + pnj_name[1:] + ">  " + my_string

                my_rect = pygame.Rect(
                    (0, 0, c.WINDOW_WIDTH, c.WINDOW_HEIGHT / 4))
                rendered_text = Dialog().render_textrect(
                    my_string, my_font, my_rect, (216, 216, 216),
                    (0, 0, 20, 225), 0)
                self.screen.blit(
                    rendered_text,
                    (0, c.WINDOW_HEIGHT - rendered_text.get_height()))

                # TODO: Change head if ":" or "*"
                if bobby_talk:
                    head = pygame.transform.scale(
                        self.graphics["bobby_head.png"],
                        (175, rendered_text.get_height() + 50))
                else:
                    head = pygame.transform.scale(
                        self.graphics[pnj_name + "_head.png"],
                        (175, rendered_text.get_height() + 50))

                self.screen.blit(
                    head, (0, c.WINDOW_HEIGHT - rendered_text.get_height()))

                continue_font = my_font
                continue_font.set_italic(True)
                dial_left = "(" + str(dial_count) + "/" + str(
                    len(levels.chars[pnj_name]["dials"])) + ")"
                continue_font_rendered = continue_font.render(
                    "Press Enter to continue... " + dial_left, 1,
                    (150, 150, 150))
                self.screen.blit(
                    continue_font_rendered,
                    (c.WINDOW_WIDTH - continue_font_rendered.get_width(),
                     c.WINDOW_HEIGHT - continue_font_rendered.get_height()))

            pygame.display.flip()

        print("exiting __game")

        return state_to_return