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の場合のみ使用)
game_const
type
pnr
color
number
card_position
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}