def test_should_go_for_defence_and_good_hand(self): """ When we have 13 tiles in hand and someone declared a riichi """ table = Table() tiles = self._string_to_136_array(sou='234678', pin='34789', man='77') table.player.init_hand(tiles) table.player.draw_tile(self._string_to_136_tile(man='6')) # discard here to reinit shanten number in AI table.player.discard_tile() self.assertEqual(table.player.ai.defence.should_go_to_defence_mode(), False) table.add_called_riichi(3) # our hand is in tempai, but it is really cheap self.assertEqual(table.player.ai.defence.should_go_to_defence_mode(), True) table.add_dora_indicator(self._string_to_136_tile(man='4')) table.add_dora_indicator(self._string_to_136_tile(pin='3')) # our hand in tempai, and it has a cost, so let's push it self.assertEqual(table.player.ai.defence.should_go_to_defence_mode(), False)
def test_prefer_valuable_tiles_with_almost_same_tiles_count(self): table = Table() player = table.player table.add_dora_indicator(self._string_to_136_tile(sou='4')) tiles = self._string_to_136_array(sou='1366', pin='123456', man='345') player.init_hand(tiles) player.draw_tile(self._string_to_136_tile(sou='5')) discarded_tile = player.discard_tile() self.assertEqual(self._to_string([discarded_tile]), '1s')
def test_mark_dora_as_dangerous_tile_for_suji(self): table = Table() table.add_dora_indicator(self._string_to_136_tile(man='8')) tiles = self._string_to_136_array(man='112235', pin='4557788') table.player.init_hand(tiles) # 9 man is dora! table.player.draw_tile(self._string_to_136_tile(man='9')) table.add_discarded_tile(1, self._string_to_136_tile(man='6'), False) table.add_called_riichi(1) result = table.player.discard_tile() self.assertEqual(self._to_string([result]), '3m')
def test_remaining_tiles_and_dora_indicators(self): table = Table() player = table.player tiles = self._string_to_136_array(man='123456789', sou='167', honors='77') player.init_hand(tiles) results, shanten = player.ai.calculate_outs(tiles, tiles) result = [x for x in results if x.tile_to_discard == self._string_to_34_tile(sou='1')][0] self.assertEqual(result.tiles_count, 8) table.add_dora_indicator(self._string_to_136_tile(sou='8')) results, shanten = player.ai.calculate_outs(tiles, tiles) result = [x for x in results if x.tile_to_discard == self._string_to_34_tile(sou='1')][0] self.assertEqual(result.tiles_count, 7)