Пример #1
0
    def test_scores_calculations_after_retake(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()

        manager.process_the_end_of_the_round(None, None, None, None, False)

        self.assertEqual(clients[0].player.scores, 25000)
        self.assertEqual(clients[1].player.scores, 25000)
        self.assertEqual(clients[2].player.scores, 25000)
        self.assertEqual(clients[3].player.scores, 25000)

        clients[0].player.in_tempai = True
        manager.process_the_end_of_the_round(None, None, None, None, False)

        self.assertEqual(clients[0].player.scores, 28000)
        self.assertEqual(clients[1].player.scores, 24000)
        self.assertEqual(clients[2].player.scores, 24000)
        self.assertEqual(clients[3].player.scores, 24000)

        for client in clients:
            client.player.scores = 25000

        clients[0].player.in_tempai = True
        clients[1].player.in_tempai = True
        manager.process_the_end_of_the_round(None, None, None, None, False)

        self.assertEqual(clients[0].player.scores, 26500)
        self.assertEqual(clients[1].player.scores, 26500)
        self.assertEqual(clients[2].player.scores, 23500)
        self.assertEqual(clients[3].player.scores, 23500)

        for client in clients:
            client.player.scores = 25000

        clients[0].player.in_tempai = True
        clients[1].player.in_tempai = True
        clients[2].player.in_tempai = True
        manager.process_the_end_of_the_round(None, None, None, None, False)

        self.assertEqual(clients[0].player.scores, 26000)
        self.assertEqual(clients[1].player.scores, 26000)
        self.assertEqual(clients[2].player.scores, 26000)
        self.assertEqual(clients[3].player.scores, 22000)

        for client in clients:
            client.player.scores = 25000

        clients[0].player.in_tempai = True
        clients[1].player.in_tempai = True
        clients[2].player.in_tempai = True
        clients[3].player.in_tempai = True
        manager.process_the_end_of_the_round(None, None, None, None, False)

        self.assertEqual(clients[0].player.scores, 25000)
        self.assertEqual(clients[1].player.scores, 25000)
        self.assertEqual(clients[2].player.scores, 25000)
        self.assertEqual(clients[3].player.scores, 25000)
Пример #2
0
    def test_call_riichi(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()

        client = clients[0]
        self.assertEqual(manager.riichi_sticks, 0)
        self.assertEqual(client.player.scores, 25000)
        self.assertEqual(client.player.in_riichi, False)

        manager.call_riichi(client)

        self.assertEqual(manager.riichi_sticks, 1)
        self.assertEqual(client.player.scores, 24000)
        self.assertEqual(client.player.in_riichi, True)

        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()

        manager.call_riichi(clients[0])

        self.assertEqual(clients[0].player.in_riichi, True)
        self.assertEqual(clients[1].player.in_riichi, False)
        self.assertEqual(clients[2].player.in_riichi, False)
        self.assertEqual(clients[3].player.in_riichi, False)

        for client in clients:
            client.player.in_riichi = False

        manager.call_riichi(clients[1])

        self.assertEqual(clients[0].player.in_riichi, False)
        self.assertEqual(clients[1].player.in_riichi, True)
        self.assertEqual(clients[2].player.in_riichi, False)
        self.assertEqual(clients[3].player.in_riichi, False)

        for client in clients:
            client.player.in_riichi = False

        manager.call_riichi(clients[2])

        self.assertEqual(clients[0].player.in_riichi, False)
        self.assertEqual(clients[1].player.in_riichi, False)
        self.assertEqual(clients[2].player.in_riichi, True)
        self.assertEqual(clients[3].player.in_riichi, False)

        for client in clients:
            client.player.in_riichi = False

        manager.call_riichi(clients[3])

        self.assertEqual(clients[0].player.in_riichi, False)
        self.assertEqual(clients[1].player.in_riichi, False)
        self.assertEqual(clients[2].player.in_riichi, False)
        self.assertEqual(clients[3].player.in_riichi, True)
Пример #3
0
    def test_win_by_tsumo_and_scores_calculation(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()
        manager.riichi_sticks = 1

        winner = clients[0]
        manager.process_the_end_of_the_round(list(range(0, 14)), 0, winner,
                                             None, True)

        self.assertEqual(winner.player.scores, 26900)
        self.assertEqual(clients[1].player.scores, 24700)
        self.assertEqual(clients[2].player.scores, 24700)
        self.assertEqual(clients[3].player.scores, 24700)
Пример #4
0
    def test_play_round_with_retake(self):
        game.game_manager.shuffle_seed = lambda: 0.01

        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.set_dealer(3)
        manager.init_round()

        result = manager.play_round()

        self.assertEqual(manager.round_number, 1)
        self.assertEqual(result['is_tsumo'], False)
        self.assertEqual(result['is_game_end'], False)
        self.assertEqual(result['winner'], None)
        self.assertEqual(result['loser'], None)
Пример #5
0
    def test_init_round(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()

        self.assertEqual(len(manager.dead_wall), 14)
        self.assertEqual(len(manager.dora_indicators), 1)
        self.assertIsNotNone(manager.current_client)
        self.assertEqual(manager.round_number, 0)
        self.assertEqual(manager.honba_sticks, 0)
        self.assertEqual(manager.riichi_sticks, 0)
        self.assertEqual([i.player.scores for i in manager.clients],
                         [25000, 25000, 25000, 25000])

        for client in clients:
            self.assertEqual(len(client.player.tiles), 13)

        self.assertEqual(len(manager.tiles), 70)
Пример #6
0
    def test_win_by_ron_and_scores_calculation(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()

        winner = clients[0]
        loser = clients[1]

        # only 1000 hand
        manager.process_the_end_of_the_round(list(range(0, 14)), 0, winner,
                                             loser, False)
        self.assertEqual(winner.player.scores, 26000)
        self.assertEqual(loser.player.scores, 24000)

        winner.player.scores = 25000
        winner.player.dealer_seat = 1
        loser.player.scores = 25000
        manager.riichi_sticks = 2
        manager.honba_sticks = 2

        manager.process_the_end_of_the_round(list(range(0, 14)), 0, winner,
                                             loser, False)
        self.assertEqual(winner.player.scores, 28600)
        self.assertEqual(loser.player.scores, 23400)
        self.assertEqual(manager.riichi_sticks, 0)
        self.assertEqual(manager.honba_sticks, 0)

        winner.player.scores = 25000
        winner.player.dealer_seat = 0
        loser.player.scores = 25000
        manager.honba_sticks = 2

        # if dealer won we need to increment honba sticks
        manager.process_the_end_of_the_round(list(range(0, 14)), 0, winner,
                                             loser, False)
        self.assertEqual(winner.player.scores, 26600)
        self.assertEqual(loser.player.scores, 23400)
        self.assertEqual(manager.honba_sticks, 3)
Пример #7
0
    def test_is_game_end_by_eight_winds(self):
        clients = [Client() for _ in range(0, 4)]

        current_dealer = 0
        manager = GameManager(clients)
        manager.init_game()
        manager.set_dealer(current_dealer)
        manager.init_round()
        manager._unique_dealers = 1

        for x in range(0, 7):
            # to avoid honba
            client = current_dealer == 0 and 1 or 0

            result = manager.process_the_end_of_the_round(
                list(range(0, 14)), 0, clients[client], None, True)
            self.assertEqual(result['is_game_end'], False)
            self.assertNotEqual(manager.dealer, current_dealer)
            current_dealer = manager.dealer

        result = manager.process_the_end_of_the_round(list(range(0, 14)), 0,
                                                      clients[0], None, True)
        self.assertEqual(result['is_game_end'], True)
Пример #8
0
    def test_init_scores_and_recalculate_position(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.set_dealer(3)

        clients[0].player.scores = 24000
        clients[1].player.scores = 23000
        clients[2].player.scores = 22000
        clients[3].player.scores = 21000

        manager.recalculate_players_position()

        self.assertEqual(clients[0].player.scores, 24000)
        self.assertEqual(clients[0].player.position, 1)
        self.assertEqual(clients[1].player.scores, 23000)
        self.assertEqual(clients[1].player.position, 2)
        self.assertEqual(clients[2].player.scores, 22000)
        self.assertEqual(clients[2].player.position, 3)
        self.assertEqual(clients[3].player.scores, 21000)
        self.assertEqual(clients[3].player.position, 4)

        clients[0].player.scores = 24000
        clients[1].player.scores = 24000
        clients[2].player.scores = 22000
        clients[3].player.scores = 22000

        manager.recalculate_players_position()

        self.assertEqual(clients[0].player.scores, 24000)
        self.assertEqual(clients[0].player.position, 1)
        self.assertEqual(clients[1].player.scores, 24000)
        self.assertEqual(clients[1].player.position, 2)
        self.assertEqual(clients[2].player.scores, 22000)
        self.assertEqual(clients[2].player.position, 3)
        self.assertEqual(clients[3].player.scores, 22000)
        self.assertEqual(clients[3].player.position, 4)
Пример #9
0
    def test_retake_and_honba_increment(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()
        manager.init_round()

        # no one in tempai, so honba stick should be added
        manager.process_the_end_of_the_round(None, None, None, None, False)
        self.assertEqual(manager.honba_sticks, 1)

        manager.honba_sticks = 0
        manager.set_dealer(0)
        clients[0].player.in_tempai = False
        clients[1].player.in_tempai = True

        # dealer NOT in tempai, no honba
        manager.process_the_end_of_the_round(None, None, None, None, False)
        self.assertEqual(manager.honba_sticks, 0)

        clients[0].player.in_tempai = True

        # dealer in tempai, so honba stick should be added
        manager.process_the_end_of_the_round(None, None, None, None, False)
        self.assertEqual(manager.honba_sticks, 1)
Пример #10
0
    def test_init_game(self):
        clients = [Client() for _ in range(0, 4)]
        manager = GameManager(clients)
        manager.init_game()

        self.assertTrue(manager.dealer in [0, 1, 2, 3])