Coverage for project/game/ai/defence/yaku_analyzer/tanyao.py : 100%

Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from game.ai.defence.yaku_analyzer.yaku_analyzer import YakuAnalyzer
2from mahjong.constants import HONOR_INDICES, TERMINAL_INDICES
5class TanyaoAnalyzer(YakuAnalyzer):
6 id = "tanyao"
8 def __init__(self, enemy):
9 self.enemy = enemy
11 def serialize(self):
12 return {"id": self.id}
14 def is_yaku_active(self):
15 return len(self._get_suitable_melds()) > 0
17 def melds_han(self):
18 return len(self._get_suitable_melds()) > 0 and 1 or 0
20 def _get_suitable_melds(self):
21 suitable_melds = []
22 for meld in self.enemy.melds:
23 tiles_34 = [x // 4 for x in meld.tiles]
24 not_suitable_tiles = TERMINAL_INDICES + HONOR_INDICES
25 if not any(x in not_suitable_tiles for x in tiles_34):
26 suitable_melds.append(meld)
27 else:
28 # if there is an unsuitable meld we consider tanyao impossible
29 return []
31 return suitable_melds
33 def get_safe_tiles_34(self):
34 return TERMINAL_INDICES + HONOR_INDICES