def call_meld(self, type, who, from_who, opened, tiles, called_tile): meld = Meld() meld.type = type meld.who = who meld.from_who = from_who meld.opened = opened meld.tiles = tiles meld.called_tile = called_tile return meld
def parse_meld(self, message): data = int(self.get_attribute_content(message, 'm')) meld = Meld() meld.who = int(self.get_attribute_content(message, 'who')) meld.from_who = data & 0x3 if data & 0x4: self.parse_chi(data, meld) elif data & 0x18: self.parse_pon(data, meld) elif data & 0x20: self.parse_nuki(data, meld) else: self.parse_kan(data, meld) return meld
def parse_meld(self, message): data = int(self.get_attribute_content(message, 'm')) meld = Meld() meld.who = int(self.get_attribute_content(message, 'who')) # 'from_who' is encoded relative the the 'who', so we want # to convert it to be relative to our player meld.from_who = ((data & 0x3) + meld.who) % 4 if data & 0x4: self.parse_chi(data, meld) elif data & 0x18: self.parse_pon(data, meld) elif data & 0x20: self.parse_nuki(data, meld) else: self.parse_kan(data, meld) return meld
def parse_meld(self, message): soup = BeautifulSoup(message, 'html.parser') data = soup.find('n').attrs['m'] data = int(data) meld = Meld() meld.who = int(soup.find('n').attrs['who']) meld.from_who = data & 0x3 if data & 0x4: self.parse_chi(data, meld) elif data & 0x18: self.parse_pon(data, meld) elif data & 0x20: self.parse_nuki(data, meld) else: self.parse_kan(data, meld) return meld
def test_closed_kan_and_riichi(self): table = Table() table.count_of_remaining_tiles = 60 player = table.player player.scores = 25000 kan_tiles = self._string_to_136_array(pin='7777') tiles = self._string_to_136_array(pin='568', sou='1235788') + kan_tiles[:3] player.init_hand(tiles) # +3 to avoid tile duplication of 7 pin tile = kan_tiles[3] player.draw_tile(tile) kan_type = player.should_call_kan(tile, False) self.assertEqual(kan_type, Meld.KAN) meld = Meld() meld.type = Meld.KAN meld.tiles = kan_tiles meld.called_tile = tile meld.who = 0 meld.from_who = 0 meld.opened = False # replacement from the dead wall player.draw_tile(self._string_to_136_tile(pin='4')) table.add_called_meld(meld.who, meld) discard = player.discard_tile() self.assertEqual(self._to_string([discard]), '8p') self.assertEqual(player.can_call_riichi(), True) # with closed kan we can't call riichi player.melds[0].opened = True self.assertEqual(player.can_call_riichi(), False)