Skip to content
This repository was archived by the owner on Jul 8, 2023. It is now read-only.

Commit 7eaf1d7

Browse files
committed
revise strategies order
Also, fixed bug with try_to_call_meld previous shanten calculation.
1 parent 2b3c134 commit 7eaf1d7

File tree

2 files changed

+43
-10
lines changed

2 files changed

+43
-10
lines changed

project/game/ai/first_version/main.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,15 @@ def discard_tile(self, discard_tile, print_log=True):
100100
)
101101

102102
def try_to_call_meld(self, tile_136, is_kamicha_discard):
103-
tiles_136 = self.player.tiles[:] + [tile_136]
103+
tiles_136_previous = self.player.tiles[:]
104+
tiles_136 = tiles_136_previous + [tile_136]
104105
self.determine_strategy(tiles_136)
105106

106107
if not self.current_strategy:
107108
return None, None
108109

109-
tiles_34 = TilesConverter.to_34_array(tiles_136)
110-
111-
previous_shanten, _ = self.hand_builder.calculate_shanten(tiles_34, self.player.meld_34_tiles)
110+
tiles_34_previous = TilesConverter.to_34_array(tiles_136_previous)
111+
previous_shanten, _ = self.hand_builder.calculate_shanten(tiles_34_previous, self.player.meld_34_tiles)
112112

113113
if previous_shanten == Shanten.AGARI_STATE and not self.current_strategy.can_meld_into_agari():
114114
return None, None
@@ -133,22 +133,23 @@ def determine_strategy(self, tiles_136):
133133
old_strategy = self.current_strategy
134134
self.current_strategy = None
135135

136-
# order is important
137-
strategies = [
138-
ChinitsuStrategy(BaseStrategy.CHINITSU, self.player),
139-
HonitsuStrategy(BaseStrategy.HONITSU, self.player),
140-
YakuhaiStrategy(BaseStrategy.YAKUHAI, self.player),
141-
]
136+
# order is important, we add strategies with the highest priority first
137+
strategies = []
142138

143139
if self.player.table.has_open_tanyao:
144140
strategies.append(TanyaoStrategy(BaseStrategy.TANYAO, self.player))
145141

142+
strategies.append(YakuhaiStrategy(BaseStrategy.YAKUHAI, self.player))
143+
strategies.append(HonitsuStrategy(BaseStrategy.HONITSU, self.player))
144+
strategies.append(ChinitsuStrategy(BaseStrategy.CHINITSU, self.player))
145+
146146
strategies.append(ChiitoitsuStrategy(BaseStrategy.CHIITOITSU, self.player))
147147
strategies.append(FormalTempaiStrategy(BaseStrategy.FORMAL_TEMPAI, self.player))
148148

149149
for strategy in strategies:
150150
if strategy.should_activate_strategy(tiles_136):
151151
self.current_strategy = strategy
152+
break
152153

153154
if self.current_strategy:
154155
if not old_strategy or self.current_strategy.type != old_strategy.type:

project/game/ai/first_version/tests/strategies/tests_chiitoitsu.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,35 @@ def test_keep_chiitoitsu_tempai(self):
6262

6363
discard = player.discard_tile()
6464
self.assertEqual(self._to_string([discard]), '6m')
65+
66+
def test_5_pairs_yakuhai_not_chiitoitsu(self):
67+
table = Table()
68+
player = table.player
69+
70+
table.add_dora_indicator(self._string_to_136_tile(sou='9'))
71+
table.add_dora_indicator(self._string_to_136_tile(sou='1'))
72+
73+
tiles = self._string_to_136_array(sou='112233', pin='16678', honors='66')
74+
player.init_hand(tiles)
75+
76+
tile = self._string_to_136_tile(honors='6')
77+
meld, _ = player.try_to_call_meld(tile, True)
78+
79+
self.assertNotEqual(player.ai.current_strategy.type, BaseStrategy.CHIITOITSU)
80+
81+
self.assertEqual(player.ai.current_strategy.type, BaseStrategy.YAKUHAI)
82+
83+
self.assertNotEqual(meld, None)
84+
85+
def chiitoitsu_tanyao_tempai(self):
86+
table = Table()
87+
player = table.player
88+
89+
tiles = self._string_to_136_array(sou='223344', pin='788', man='4577')
90+
player.init_hand(tiles)
91+
92+
player.draw_tile(self._string_to_136_tile(man='4'))
93+
94+
discard = player.discard_tile()
95+
discard_correct = self._to_string([discard]) == '7p' or self._to_string([discard]) == '5m'
96+
self.assertEqual(discard_correct, True)

0 commit comments

Comments
 (0)