예제 #1
0
    def __init__(self, left: int, top: int, game_player, image_height: int=50):
        super().__init__()

        self.game_player = game_player

        surface = game_player.character.face_image
        name = game_player.player.name
        stock = game_player.stock

        # キャラ画像
        image_width = image_height
        rect = Rect(left, top, image_width, image_height)
        image = surface_fit_to_rect(surface, rect)
        self.character_sprite = SimpleSprite(rect, image)
        self.add(self.character_sprite)

        # ストックの丸
        self.stock = stock
        self.stock_sprites = [Group() for i in range(stock)]
        x, y = self.character_sprite.rect.bottomright
        stock_radius = int(0.05 * image_height)
        left, top = x, y - stock_radius * 2
        for i in range(stock):
            surface = Surface((stock_radius * 2, stock_radius * 2)).convert_alpha()
            surface.fill((125, 125, 125))
            surface.set_colorkey(surface.get_at((0, 0)))
            pygame.gfxdraw.filled_circle(surface, stock_radius, stock_radius, stock_radius-1, (255, 255, 255))
            stock_sprite = SimpleSprite(Rect(left, top, stock_radius * 2, stock_radius * 2), surface)
            self.stock_sprites[i].add(stock_sprite)
            print(self.stock_sprites[i])
            left += stock_radius * 2

        # プレイヤーネーム
        font_size = int(0.2 * image_height)
        font = pygame.font.Font(None, font_size)
        left, bottom = self.character_sprite.rect.bottomright
        bottom -= stock_radius * 2
        self.player_name_sprite = TextSprite(
            x=left,
            y=bottom,
            align="left",
            vertical_align="bottom",
            text=name,
            font=font,
            color=(255, 255, 255)
        )
        self.add(self.player_name_sprite)

        # プレイヤーネームのbg
        width = self.character_sprite.rect.w + max(stock_radius * 2 * stock, self.player_name_sprite.rect.w) + 10
        height = self.character_sprite.rect.h
        self.base_rect = Rect(*self.character_sprite.rect.topleft, width, height)
        rect = self.base_rect
        bg_image = Surface(rect.size).convert_alpha()
        bg_image.fill((0, 0, 0))
        bg_image.set_alpha(225)
        bg_sprite = SimpleSprite(rect, bg_image)
        self.bg_group = Group()
        self.bg_group.add(bg_sprite)
예제 #2
0
    def init(self):
        bg_image = self.game_config.components["background"]
        bg_image = pygame.transform.scale(bg_image,
                                          self.display.get_rect().size)
        bg_sprite = SimpleSprite(rect=self.display.get_rect(), image=bg_image)
        self.background_sprites.add(bg_sprite)

        result_area_rect = self.area_rects[0].union(self.area_rects[3])
        result_area = ResultText(self.game_player1, self.game_player2,
                                 result_area_rect)
        self.middle_sprites.add(result_area)

        btn_area_rect = self.area_rects[5].union(self.area_rects[10])
        btn_rects = layout_rects(btn_area_rect,
                                 1,
                                 3,
                                 margin_vertical=30,
                                 padding=20)
        btn_params = [(btn_rects[0], "もっかい", Screen.GAME),
                      (btn_rects[1], "Character Select",
                       Screen.CHARACTER_SELECT),
                      (btn_rects[2], "Go to Title", Screen.START)]
        btns = [
            SimpleButton(width=rect.width,
                         height=rect.height,
                         text=text,
                         outline=self.game_config.components["outline"],
                         func=self._go_to_screen,
                         func_args=(screen, ))
            for rect, text, screen in btn_params
        ]
        for btn, rect in zip(btns, btn_rects):
            btn.rect.center = rect.center
            self.middle_sprites.add(btn)
예제 #3
0
    def __init__(self, base_rect: Rect, values: List[Any], labels: Optional[List[str]]=None, font_name: Optional[str]=None, color: Color=(255, 255, 255), bg_color: Color=(0, 0, 0), bg_alpha: float=1.0, defalut_i: int=0):
        super().__init__()
        self.values = values
        self.i = defalut_i
        self.base_rect = base_rect
        if defalut_i < 0 or len(values) <= defalut_i:
            raise(ValueError("default_i が values のリストの範囲を超えています."))
        
        # ラベルのSpriteのリストを作成
        self.labels = labels if labels else [str(v) for v in values]
        font = pygame.font.Font(font_name, base_rect.h)
        label_surfaces = [font.render(label, True, color) for label in self.labels]
        self.label_sprites = []
        for surface in label_surfaces:
            rect = surface.get_rect()
            rect.center = base_rect.center
            self.label_sprites.append(SimpleSprite(rect, surface))

        # 左右のボタンの作成
        size = (int(base_rect.h * 0.5), int(base_rect.h * 0.8))
        left_btn_surface_inactive = make_left_triangle(size, color=(192, 192, 192))
        left_btn_surface_active = make_left_triangle(size, color=(255, 140, 0))
        rect = base_rect
        self.left_btn_active = RichSprite(*rect.midleft, align="left", vertical_align="middle", image=left_btn_surface_active, press_fnc=self._left)
        self.left_btn_inactive = RichSprite(*rect.midleft, align="left", vertical_align="middle", image=left_btn_surface_inactive, press_fnc=self._left)

        self.right_btn_active = RichSprite(*rect.midright, align="right", vertical_align="middle", image=pygame.transform.flip(left_btn_surface_active, True, False), press_fnc=self._right)
        self.right_btn_inactive = RichSprite(*rect.midright, align="right", vertical_align="middle", image=pygame.transform.flip(left_btn_surface_inactive, True, False), press_fnc=self._right)

        # 背景作成
        size = (base_rect.w, base_rect.h)
        bg_surface = make_surface(size, alpha=False, bg_color=bg_color)
        bg_sprite = SimpleSprite(base_rect, bg_surface)
        self.add(bg_sprite)

        # 表示のためのグループの作成と追加
        self.left_btn = GroupSingle()
        self.right_btn = GroupSingle()
        self.single_group = GroupSingle()
        self.add(self.left_btn)
        self.add(self.right_btn)
        self.add(self.single_group)

        # 初期化
        self._update_images()
예제 #4
0
 def _set_bg(self):
     """背景画像の設置.game_setting.stageを参照.
     """
     print(self.game_setting.stage)
     rect = self.display.get_rect()
     bg_image = self.game_setting.stage.image
     bg_image = surface_fit_to_rect(bg_image, rect)
     self.bg_sprite = SimpleSprite(rect, bg_image)
     self.background_sprites.add(self.bg_sprite)
예제 #5
0
    def replace_circle(self, image: pygame.surface.Surface):
        """[summary].

        Args:
            image (pygame.surface.Surface): [description].
        """
        sprite = SimpleSprite(rect=image.get_rect(), image=image)
        sprite.rect.center = self.badgesprite.center
        self.badgesprite.add(sprite)
        self.add(sprite)
예제 #6
0
    def _adapt_display(self):
        pygame.display.set_caption("Character Select")

        bg_image = self.game_config.components["background"]
        bg_image = pygame.transform.scale(bg_image, self.display_rect.size)
        bg_sprite = SimpleSprite(rect=self.display_rect, image=bg_image)
        self.background_sprites.add(bg_sprite)

        self._set_characters_area()
        self._set_player_select_area()
        self._set_next_btn()
        self._set_back_btn()
예제 #7
0
    def __init__(self):
        super().__init__()
        self.result = Screen.START
        self.fps = 60

        self.game_config = None

        bg_image = pygame.image.load(
            "./images/components/bg.jpeg").convert_alpha()
        bg_sprite = SimpleSprite(bg_image.get_rect(), bg_image)
        self.background_sprites.add(bg_sprite)

        x, y = self.display.get_rect().center
        loading_sprits = load_animation_sprite(x,
                                               y,
                                               "./images/components/loading",
                                               interval=20,
                                               multiple=0.7)
        self.middle_sprites.add(loading_sprits)
예제 #8
0
    def _set_animation(self):
        """アニメーションの設定
        """
        self.timer_group = TimerGroup()
        self.middle_sprites.add(self.timer_group)
        self.transform_manager = SpriteTransformManager()
        self.middle_sprites.add(self.transform_manager)

        rects = layout_rects(self.view_area,
                             2,
                             1,
                             padding=40,
                             margin_vertical=40)
        self.hand_sprites = {
            self.actor1: {
                self.Hand.ROCK:
                SimpleSprite(
                    rects[0],
                    fit_surface(self.actor1.game_player.character.arm_image[0],
                                rects[0])),
                self.Hand.SCISSORS:
                SimpleSprite(
                    rects[0],
                    fit_surface(self.actor1.game_player.character.arm_image[1],
                                rects[0])),
                self.Hand.PAPER:
                SimpleSprite(
                    rects[0],
                    fit_surface(self.actor1.game_player.character.arm_image[2],
                                rects[0])),
            },
            self.actor2: {
                self.Hand.ROCK:
                SimpleSprite(
                    rects[1],
                    fit_surface(self.actor2.game_player.character.arm_image[0],
                                rects[1])),
                self.Hand.SCISSORS:
                SimpleSprite(
                    rects[1],
                    fit_surface(self.actor2.game_player.character.arm_image[1],
                                rects[1])),
                self.Hand.PAPER:
                SimpleSprite(
                    rects[1],
                    fit_surface(self.actor2.game_player.character.arm_image[2],
                                rects[1])),
            }
        }
        # wait_surface = self.font.render("wait", True, (0, 0, 0), (255, 255, 255))
        # ready_surface = self.font.render("ready", True, (0, 0, 0), (255, 255, 255))
        self.actor_state_sprites = {
            self.actor1: {
                True:
                TextSprite(*rects[0].midbottom,
                           align="center",
                           vertical_align="bottom",
                           text="wait",
                           font=self.font,
                           color=(0, 0, 0),
                           bgcolor=(255, 255, 255)),
                False:
                TextSprite(*rects[0].midbottom,
                           align="center",
                           vertical_align="bottom",
                           text="ready",
                           font=self.font,
                           color=(0, 0, 0),
                           bgcolor=(255, 255, 255)),
            },
            self.actor2: {
                True:
                TextSprite(*rects[1].midbottom,
                           align="center",
                           vertical_align="bottom",
                           text="wait",
                           font=self.font,
                           color=(0, 0, 0),
                           bgcolor=(255, 255, 255)),
                False:
                TextSprite(*rects[1].midbottom,
                           align="center",
                           vertical_align="bottom",
                           text="ready",
                           font=self.font,
                           color=(0, 0, 0),
                           bgcolor=(255, 255, 255)),
            }
        }
        self.actor_state_group = Group()
        self.middle_sprites.add(self.actor_state_group)

        # 「さいしょは ぐー」などのセリフスプライト
        self.before_battle_sprite1 = TextSprite(*self.view_area.center,
                                                align="center",
                                                vertical_align="middle",
                                                text="さいしょは ぐー",
                                                font=self.font,
                                                color=(0, 0, 0),
                                                bgcolor=(255, 255, 255))
        self.before_battle_sprite2 = TextSprite(*self.view_area.center,
                                                align="center",
                                                vertical_align="middle",
                                                text="じゃんけん...",
                                                font=self.font,
                                                color=(0, 0, 0),
                                                bgcolor=(255, 255, 255))
        self.before_battle_sprite3 = TextSprite(*self.view_area.center,
                                                align="center",
                                                vertical_align="middle",
                                                text="ぽん",
                                                font=self.font,
                                                color=(0, 0, 0),
                                                bgcolor=(255, 255, 255))
        self.before_battle_sprite4 = TextSprite(*self.view_area.center,
                                                align="center",
                                                vertical_align="middle",
                                                text="あいこで",
                                                font=self.font,
                                                color=(0, 0, 0),
                                                bgcolor=(255, 255, 255))
        self.before_battle_sprite5 = TextSprite(*self.view_area.center,
                                                align="center",
                                                vertical_align="middle",
                                                text="しょ",
                                                font=self.font,
                                                color=(0, 0, 0),
                                                bgcolor=(255, 255, 255))
        self.end_battle_sprite = TextSprite(*self.view_area.center,
                                            align="center",
                                            vertical_align="middle",
                                            text="そこまで",
                                            font=self.font,
                                            color=(0, 0, 0),
                                            bgcolor=(255, 255, 255))

        # あいこ中フラグ
        self.pre_aiko = False