Hide keyboard shortcuts

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 

3 

4 

5class TanyaoAnalyzer(YakuAnalyzer): 

6 id = "tanyao" 

7 

8 def __init__(self, enemy): 

9 self.enemy = enemy 

10 

11 def serialize(self): 

12 return {"id": self.id} 

13 

14 def is_yaku_active(self): 

15 return len(self._get_suitable_melds()) > 0 

16 

17 def melds_han(self): 

18 return len(self._get_suitable_melds()) > 0 and 1 or 0 

19 

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 [] 

30 

31 return suitable_melds 

32 

33 def get_safe_tiles_34(self): 

34 return TERMINAL_INDICES + HONOR_INDICES