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)
def label_sprites(self, sprites, color, font): for sprite in sprites: name = sprite.name label = TextSprite("Label for {}".format(name)) self.set_text( label, name, color, font ) label.set_group(sprite.group) w, h = label.size x, y = sprite.position label.set_position(x, y - h)
def __init__(self, parent, name): Location.__init__(self, parent) pygame.key.set_repeat(10) pygame.mouse.set_visible(0) self.doodle = Doodle(name) self.doodle.name = name self.allsprites = pygame.sprite.Group() self.allsprites.add(self.doodle) for i in range(0, platform_count): self.allsprites.add(self.randomPlatform(False)) for platform in self.allsprites: if isinstance(platform, Platform) and platform.spring != None: self.allsprites.add(platform.spring) self.score_sprite = TextSprite(50, 25, self.doodle.name, 45, (0, 0, 0)) self.allsprites.add(self.score_sprite) self.header = Rectangle(screen_width, 50, (0, 191, 255, 128)) self.window.blit(self.background, (0, 0)) self.monster = None
def replace_text(self, text="", font_size=int(1e5), color=(0, 0, 0)): """[summary]. Args: text (str, optional): [description]. Defaults to "". font_size ([type], optional): [description]. Defaults to int(1e5). color (tuple, optional): [description]. Defaults to (0, 0, 0). """ if self.badgesprite.sprite.rect.height < font_size: font_size = int(2**0.5 * self.badgesprite.sprite.rect.height) text_sprite = TextSprite(x=self.badgesprite.sprite.rect.centerx, y=self.badgesprite.sprite.rect.centery, text=text, font=pygame.font.Font(None, font_size), color=color, align="center", vertical_align="middle") if 2**0.5 * self.badgesprite.sprite.rect.width < text_sprite.rect.width: print("dekasugi") self.textsprite.sprite.add(None) self.textsprite.add(text_sprite)
def __init__(self, game_player1, game_player2, rect) -> None: super().__init__() self.winner = self._winner(game_player1, game_player2) if self.winner is None: self.text = "DRAW" else: self.text = self.winner.player.name + " WIN!!" self.winner.player.win_num += 1 game_player1.player.matches_num += 1 game_player2.player.matches_num += 1 self.rect = rect self.font_size = self.rect.height // 3 textsprite = TextSprite(x=self.rect.centerx, y=self.rect.centery, text=self.text, font=pygame.font.Font( "./fonts/Mplus2-Medium.ttf", self.font_size), align="center", vertical_align="middle") textsprite.center = self.rect.center self.add(textsprite)
def __init__(self, x: int, y: int, min_: int, max_: int, font: pygame.font.Font, front_group: pygame.sprite.Group, back_group: pygame.sprite.Group, color: Color=(0, 0, 0), bgcolor: Optional[Color]=None, sound: Optional[pygame.mixer.Sound]=None ): """(x, y)を中心に,カウンターを設置する. カウント範囲は[min_, max_]. """ self.min = min_ self.max = max_ self.count = min_ self.front_group = front_group self.back_group = back_group self.sound = sound self.press_rects = [] # カウンター表示のためのスプライトの生成 left = x right = x top = y self.sprites = [] for i in range(min_, max_+1): num_sprite = TextSprite( x=x, y=y, text=str(i), font=font, color=color, bgcolor=bgcolor, align="center", vertical_align="middle", ) self.sprites.append(num_sprite) left = min(left, num_sprite.rect.left) right = max(right, num_sprite.rect.right) top = min(top, num_sprite.rect.top) # 現在のスプライトを追加 self.front_group.add(self._get_sprite()) # 操作ボタン(左)の追加 self.left_btn_sprite = TextSprite( x=left, y=top, text="<", font=font, color=color, bgcolor=bgcolor, align="right", vertical_align="top", ) self.front_group.add(self.left_btn_sprite) self.press_rects.append(PressRect(self.left_btn_sprite.rect, self._count_down)) # 操作ボタン(右)の追加 self.right_btn_sprite = TextSprite( x=right, y=top, text=">", font=font, color=color, bgcolor=bgcolor, align="left", vertical_align="top", ) self.front_group.add(self.right_btn_sprite) self.press_rects.append(PressRect(self.right_btn_sprite.rect, self._count_up)) self.rect = Rect( self.left_btn_sprite.rect.left, self.left_btn_sprite.rect.top, self.right_btn_sprite.rect.right - self.left_btn_sprite.rect.left, self.left_btn_sprite.rect.height, )
def _set_text(self): self.text_sprite = TextSprite(0, 0, text=self.text, font=self.font) self.text_sprite.rect.center = self.baserect.center
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