hanabiapp.game.action
1from .game_const import GameConst 2class Action: 3 """プレイヤーが取るアクションを表現するクラス 4 5 Attributes: 6 game_const(GameConst): ゲームの定数 7 type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか) 8 pnr(int): 対象のプレイヤー番号(ヒントを与える相手) 9 color(int): ヒントを与える色(HINT_COLORの場合のみ使用) 10 number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用) 11 card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用) 12 """ 13 14 def __init__(self, type, pnr = None, color = None, number = None, card_position = None): 15 """アクションの初期化 16 Args: 17 type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか) 18 pnr(int): 対象のプレイヤー番号(ヒントを与える相手) 19 color(int): ヒントを与える色(HINT_COLORの場合のみ使用) 20 number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用) 21 card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用) 22 """ 23 24 self.game_const = GameConst() 25 self.type = type 26 self.pnr = pnr 27 self.color = color 28 self.number = number 29 self.card_position = card_position 30 31 32 def to_dict(self): 33 if self.type == self.game_const.HINT_COLOR: 34 return {'action_type': 'REVEAL_COLOR', 'color': self.game_const.COLOR_NAMES[self.color], 'target_offset': 1} 35 elif self.type == self.game_const.HINT_NUMBER: 36 return {'action_type': 'REVEAL_RANK', 'rank': self.number, 'target_offset': 1} 37 elif self.type == self.game_const.PLAY: 38 return {'action_type': 'PLAY', 'card_index': self.card_position} 39 elif self.type == self.game_const.DISCARD: 40 return {'action_type': 'DISCARD', 'card_index': self.card_position} 41 42 def __str__(self): 43 """アクションの内容を分かりやすい形式で文字列にして返す 44 Returns: TMP_ACTION_INFO(str):アクションの内容を表す文字列 45 """ 46 47 if self.type == self.game_const.HINT_COLOR: 48 return f"ヒント: プレイヤー{self.pnr}に {self.color} 色のカードを示す" 49 if self.type == self.game_const.HINT_NUMBER: 50 return f"ヒント: プレイヤー{self.pnr}に {self.number} のカードを示す" 51 if self.type == self.game_const.PLAY: 52 return f"カードをプレイ: 手札の {self.card_position} 番目のカード" 53 if self.type == self.game_const.DISCARD: 54 return f"カードを捨てる: 手札の {self.card_position} 番目のカード" 55 return "不明なアクション"
class
Action:
3class Action: 4 """プレイヤーが取るアクションを表現するクラス 5 6 Attributes: 7 game_const(GameConst): ゲームの定数 8 type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか) 9 pnr(int): 対象のプレイヤー番号(ヒントを与える相手) 10 color(int): ヒントを与える色(HINT_COLORの場合のみ使用) 11 number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用) 12 card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用) 13 """ 14 15 def __init__(self, type, pnr = None, color = None, number = None, card_position = None): 16 """アクションの初期化 17 Args: 18 type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか) 19 pnr(int): 対象のプレイヤー番号(ヒントを与える相手) 20 color(int): ヒントを与える色(HINT_COLORの場合のみ使用) 21 number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用) 22 card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用) 23 """ 24 25 self.game_const = GameConst() 26 self.type = type 27 self.pnr = pnr 28 self.color = color 29 self.number = number 30 self.card_position = card_position 31 32 33 def to_dict(self): 34 if self.type == self.game_const.HINT_COLOR: 35 return {'action_type': 'REVEAL_COLOR', 'color': self.game_const.COLOR_NAMES[self.color], 'target_offset': 1} 36 elif self.type == self.game_const.HINT_NUMBER: 37 return {'action_type': 'REVEAL_RANK', 'rank': self.number, 'target_offset': 1} 38 elif self.type == self.game_const.PLAY: 39 return {'action_type': 'PLAY', 'card_index': self.card_position} 40 elif self.type == self.game_const.DISCARD: 41 return {'action_type': 'DISCARD', 'card_index': self.card_position} 42 43 def __str__(self): 44 """アクションの内容を分かりやすい形式で文字列にして返す 45 Returns: TMP_ACTION_INFO(str):アクションの内容を表す文字列 46 """ 47 48 if self.type == self.game_const.HINT_COLOR: 49 return f"ヒント: プレイヤー{self.pnr}に {self.color} 色のカードを示す" 50 if self.type == self.game_const.HINT_NUMBER: 51 return f"ヒント: プレイヤー{self.pnr}に {self.number} のカードを示す" 52 if self.type == self.game_const.PLAY: 53 return f"カードをプレイ: 手札の {self.card_position} 番目のカード" 54 if self.type == self.game_const.DISCARD: 55 return f"カードを捨てる: 手札の {self.card_position} 番目のカード" 56 return "不明なアクション"
プレイヤーが取るアクションを表現するクラス
Attributes:
- game_const(GameConst): ゲームの定数
- type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか)
- pnr(int): 対象のプレイヤー番号(ヒントを与える相手)
- color(int): ヒントを与える色(HINT_COLORの場合のみ使用)
- number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用)
- card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用)
Action(type, pnr=None, color=None, number=None, card_position=None)
15 def __init__(self, type, pnr = None, color = None, number = None, card_position = None): 16 """アクションの初期化 17 Args: 18 type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか) 19 pnr(int): 対象のプレイヤー番号(ヒントを与える相手) 20 color(int): ヒントを与える色(HINT_COLORの場合のみ使用) 21 number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用) 22 card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用) 23 """ 24 25 self.game_const = GameConst() 26 self.type = type 27 self.pnr = pnr 28 self.color = color 29 self.number = number 30 self.card_position = card_position
アクションの初期化
Arguments:
- type(int): アクションの種類(HINT_COLOR, HINT_NUMBER, PLAY, DISCARDのいずれか)
- pnr(int): 対象のプレイヤー番号(ヒントを与える相手)
- color(int): ヒントを与える色(HINT_COLORの場合のみ使用)
- number(int): ヒントを与える数字(HINT_NUMBERの場合のみ使用)
- card_position(int): 手札のどのカードに対するアクションか(PLAY, DISCARDの場合のみ使用)
def
to_dict(self):
33 def to_dict(self): 34 if self.type == self.game_const.HINT_COLOR: 35 return {'action_type': 'REVEAL_COLOR', 'color': self.game_const.COLOR_NAMES[self.color], 'target_offset': 1} 36 elif self.type == self.game_const.HINT_NUMBER: 37 return {'action_type': 'REVEAL_RANK', 'rank': self.number, 'target_offset': 1} 38 elif self.type == self.game_const.PLAY: 39 return {'action_type': 'PLAY', 'card_index': self.card_position} 40 elif self.type == self.game_const.DISCARD: 41 return {'action_type': 'DISCARD', 'card_index': self.card_position}