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

Commit 45a509f

Browse files
committed
Issue #35. Fix crash after called chankan
1 parent 18bfb00 commit 45a509f

File tree

3 files changed

+16
-4
lines changed

3 files changed

+16
-4
lines changed

project/mahjong/ai/tests/tests_ai.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -243,8 +243,18 @@ def test_upgrade_opened_pon_to_kan(self):
243243

244244
player.add_called_meld(self._make_meld(Meld.PON, self._string_to_136_array(man='444')))
245245

246+
self.assertEqual(len(player.melds), 1)
247+
self.assertEqual(len(player.tiles), 14)
246248
self.assertEqual(player.can_call_kan(tile, False), Meld.CHANKAN)
247249

250+
player.discard_tile()
251+
player.draw_tile(tile)
252+
player.add_called_meld(self._make_meld(Meld.CHANKAN, self._string_to_136_array(man='4444')))
253+
254+
self.assertEqual(len(player.melds), 1)
255+
self.assertEqual(player.melds[0].type, Meld.CHANKAN)
256+
self.assertEqual(len(player.tiles), 13)
257+
248258
def test_call_closed_kan(self):
249259
table = Table()
250260
player = table.player

project/mahjong/player.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,9 @@ def erase_state(self):
6262
def add_called_meld(self, meld: Meld):
6363
# we already added chankan as a pon set
6464
if meld.type == Meld.CHANKAN:
65-
return
65+
tile_34 = meld.tiles[0] // 4
66+
pon_set = [x for x in self.melds if x.type == Meld.PON and (x.tiles[0] // 4) == tile_34]
67+
self.melds.remove(pon_set[0])
6668

6769
self.melds.append(meld)
6870

@@ -210,7 +212,7 @@ def enemy_called_riichi(self):
210212

211213
def add_called_meld(self, meld: Meld):
212214
# we had to remove tile from the hand for closed kan set
213-
if (meld.type == Meld.KAN or meld.type == Meld.CHANKAN) and not meld.opened:
215+
if (meld.type == Meld.KAN and not meld.opened) or meld.type == Meld.CHANKAN:
214216
self.tiles.remove(meld.called_tile)
215217

216218
super().add_called_meld(meld)

project/tenhou/client.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -271,7 +271,7 @@ def start_game(self):
271271
else:
272272
meld_type = 4
273273
self._send_message('<N type="{}" hai="{}" />'.format(meld_type, drawn_tile))
274-
logger.info('We called a kan set!')
274+
logger.info('We called a closed kan\chankan set!')
275275
continue
276276

277277
discarded_tile = self.player.discard_tile()
@@ -374,7 +374,7 @@ def start_game(self):
374374
if 't="3"' in message:
375375
if self.player.can_call_kan(tile, True):
376376
self._send_message('<N type="2" />')
377-
logger.info('We called a kan set!')
377+
logger.info('We called an open kan set!')
378378
continue
379379

380380
# chi or pon

0 commit comments

Comments
 (0)