def test_game_complete(self):
        # [36, 45, 14, 5, 25, 20, 46, 48, 1, 46, 48, 13, 35, 45, 15, 18, 7, 2,
        #  30, 46, 47, 36, 43, 27, 5, 46, 48, 6, 2, 22, 46, 47, 35, 44, 29, 8, 46,
        #  48, 18, 21, 27, 26, 14, 11, 9, 46, 48, 17, 34, 43, 10, 1, 46, 47, 41,
        #  42, 24, 17, 46, 48, 0, 14, 3, 29, 46, 48, 41, 45, 19, 8, 30, 24, 20,
        #  16, 34, 46, 47, 39, 44, 16, 30, 18, 46, 48, 21, 46, 47, 39, 43, 24,
        #  26, 14, 22, 29, 6, 5, 7]

        game = TotalWattenGame(self.agent, self.agent)
        world = WorldTotalWatten()
        world.init_world_to_state(1, -1, 0, 0, [25, 9, 1, 32, 14], [5, 13, 7, 10, 20], [], 0, 0, 2, False, False, None, 16, 28, None, None)
        game.trueboard = world

        cur_player = game.get_cur_player()
        self.assertEqual(cur_player, 0)

        moves = game.get_valid_moves_no_zeros()
        self.assertEqual(moves, [0, 1])

        self.assertEqual(game.make_move(0), (0.0, 1))

        cur_player = game.get_cur_player()
        self.assertEqual(cur_player, 1)

        moves = game.get_valid_moves_no_zeros()
        self.assertEqual(moves, [0, 1])
Example #2
0
    def test_observe(self):
        world = WorldTotalWatten()

        world.current_game_prize = 15

        result = world.observe(1, self.agent)

        print(result)
Example #3
0
    def test_get_valid_moves_last_move_accepted_raise(self):
        world = WorldTotalWatten()

        world.is_last_move_accepted_raise = True

        valid_moves = world.get_valid_moves()

        # after an accepted raise a player can't raise again
        self.assertNotIn(1, valid_moves)
Example #4
0
    def test_get_valid_moves_normal(self):
        world = WorldTotalWatten()

        world.refresh()

        # opponent player declare the rank
        # valid moves: MAKE_BEST_MOVE + RAISE POINTS
        valid_moves = world.get_valid_moves()
        self.assertEqual([0, 1], valid_moves)
Example #5
0
    def test_get_valid_moves_last_move_raise(self):
        world = WorldTotalWatten()

        world.is_last_move_raise = True

        valid_moves = world.get_valid_moves()

        # after a raise a player can only accept it or fold
        self.assertEqual([2, 3], valid_moves)
Example #6
0
    def test_get_valid_moves_last_move_raise_last_hand(self):
        world = WorldTotalWatten()

        world.is_last_move_raise = True
        world.is_last_hand_raise_valid = True

        valid_moves = world.get_valid_moves()

        # after a raise in last hand a player can only accept, fold, or fold and verify conditions for raise in last hand
        self.assertEqual([2, 3, 4], valid_moves)
Example #7
0
    def test_best_move_declares_rank_2(self):
        world = WorldTotalWatten()

        world.current_player = -1
        result, next_player = world.act(0, self.agent)

        self.assertEqual(result, "continue")
        self.assertEqual(next_player, 1)
        self.assertIsNotNone(world.rank)
        self.assertEqual(world.is_last_move_raise, False)
        self.assertEqual(world.is_last_move_accepted_raise, False)
Example #8
0
    def test_observe_after_raise(self):
        world = WorldTotalWatten()
        world.rank = 3
        world.suit = 1

        world.current_player = 1
        result, next_player = world.act(0, self.agent)

        result, next_player = world.act(1, self.agent)

        world.observe(next_player, self.agent)
    def test_clone(self):
        game = TotalWattenGame(self.agent, self.agent)
        world = WorldTotalWatten()
        world.init_world_to_state(1, -1, 0, 0, [25, 9, 1, 32, 14], [5, 13, 7, 10, 20], [], 0, 0, 2, False, False, None, 16, 28, None, None)
        game.trueboard = world

        clone_game = game.clone()

        obs_game = game.get_observation(game.get_cur_player())

        obs_clone_game = clone_game.get_observation(clone_game.get_cur_player())

        obs_str = game.get_observation_str(obs_game)
        clone_obs_str = clone_game.get_observation_str(obs_clone_game)

        self.assertEqual(obs_str, clone_obs_str)
Example #10
0
    def test_last_hand_raise_valid_error(self):
        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = [total_watten.get_id(4, 1)]
        world.player_A_hand = [total_watten.get_id(5, 0)]

        self.assertRaises(InconsistentStateError, world._last_hand_raise_valid)
Example #11
0
    def test_is_blinde(self):
        world = WorldTotalWatten()

        world.rank = 6
        world.suit = 2

        self.assertTrue(world.is_blinde(6))
        self.assertFalse(world.is_blinde(3))
        self.assertFalse(world.is_blinde(1))
        self.assertFalse(world.is_blinde(7))
Example #12
0
    def test_act_fold_hand_and_show_valid_raise(self):
        world = WorldTotalWatten()

        world.player_A_score = 4
        world.player_B_score = 7

        world.current_game_prize = 3

        world.current_player = 1
        world.distributing_cards_player = -1
        world.is_last_move_raise = True
        world.is_last_hand_raise_valid = False

        result, next_player = world.act(
            total_watten.moves["fold_hand_and_show_valid_raise"], self.agent)

        self.assertEqual("end", result)
        self.assertEqual(7, world.player_B_score)
        self.assertEqual(4 + 2, world.player_A_score)

        self.assertEqual(-1, world.current_player)
        self.assertEqual(-1, next_player)
Example #13
0
    def test_best_move_declares_suit_1(self):
        world = WorldTotalWatten()

        world.current_player = 1
        world.rank = 3
        world.is_last_move_accepted_raise = True
        world.is_last_move_raise = False

        result, next_player = world.act(0, self.agent)

        self.assertEqual(result, "continue")
        self.assertEqual(next_player, -1)
        self.assertIsNotNone(world.suit)
        self.assertEqual(world.is_last_move_raise, False)
        self.assertEqual(world.is_last_move_accepted_raise, False)
Example #14
0
    def test_act_raise_points(self):
        world = WorldTotalWatten()

        world.current_player = -1
        world.current_game_prize = 4
        world.is_last_move_raise = False
        world.is_last_move_accepted_raise = False

        result, next_player = world.act(1, self.agent)

        self.assertEqual(result, "continue")
        self.assertEqual(next_player, 1)
        self.assertEqual(world.current_player, 1)
        self.assertEqual(world.current_game_prize, 5)
        self.assertEqual(world.is_last_move_raise, True)
        self.assertEqual(world.is_last_move_accepted_raise, False)
Example #15
0
    def test_best_move_move_plays_card_2(self):
        world = WorldTotalWatten()

        world.current_player = -1
        world.rank = 3
        world.suit = 1

        result, next_player = world.act(0, self.agent)

        self.assertEqual(result, "continue")
        self.assertEqual(next_player, 1)
        self.assertEqual(len(world.player_A_hand), 5)
        self.assertEqual(len(world.player_B_hand), 4)
Example #16
0
    def test_act_accept_raise(self):
        world = WorldTotalWatten()

        world.current_player = 1
        world.is_last_move_accepted_raise = False
        world.is_last_move_raise = True

        result, next_player = world.act(3, self.agent)

        self.assertEqual(result, "continue")
        self.assertEqual(next_player, -1)
        self.assertEqual(world.is_last_move_raise, False)
        self.assertEqual(world.is_last_move_accepted_raise, True)
Example #17
0
    def test_assign_points_fold(self):
        # player -1 fold
        world = WorldTotalWatten()

        world.current_player = -1
        world.current_game_prize = 5
        world.player_A_score = 3
        world.player_B_score = 8
        world.is_last_hand_raise_valid = None

        world._assign_points_fold()

        self.assertEqual(world.player_A_score, 7)
        self.assertEqual(world.player_B_score, 8)

        # player 1 fold
        world = WorldTotalWatten()

        world.current_player = 1
        world.current_game_prize = 5
        world.player_A_score = 3
        world.player_B_score = 8
        world.is_last_hand_raise_valid = None

        world._assign_points_fold()

        self.assertEqual(world.player_A_score, 3)
        self.assertEqual(world.player_B_score, 12)

        # player 1 fold is last hand raise not valid
        world = WorldTotalWatten()

        world.current_player = 1
        world.current_game_prize = 5
        world.player_A_score = 3
        world.player_B_score = 8
        world.is_last_hand_raise_valid = False

        world._assign_points_fold()

        self.assertEqual(world.player_A_score, 7)
        self.assertEqual(world.player_B_score, 8)

        # player 1 fold is last hand raise valid
        world = WorldTotalWatten()

        world.current_player = 1
        world.current_game_prize = 5
        world.player_A_score = 3
        world.player_B_score = 8
        world.is_last_hand_raise_valid = True

        world._assign_points_fold()

        self.assertEqual(world.player_A_score, 3)
        self.assertEqual(world.player_B_score, 12)

        # player -1 fold is last hand raise not valid
        world = WorldTotalWatten()

        world.current_player = -1
        world.current_game_prize = 5
        world.player_A_score = 3
        world.player_B_score = 8
        world.is_last_hand_raise_valid = False

        world._assign_points_fold()

        self.assertEqual(world.player_A_score, 3)
        self.assertEqual(world.player_B_score, 12)

        # player -1 fold is last hand raise valid
        world = WorldTotalWatten()

        world.current_player = -1
        world.current_game_prize = 5
        world.player_A_score = 3
        world.player_B_score = 8
        world.is_last_hand_raise_valid = True

        world._assign_points_fold()

        self.assertEqual(world.player_A_score, 7)
        self.assertEqual(world.player_B_score, 8)
Example #18
0
    def test_act_unknown_move(self):
        world = WorldTotalWatten()

        with self.assertRaises(InvalidActionError):
            world.act(5, self.agent)
    def test_observe(self):
        world = WorldTotalWatten()
        world.current_game_player_A_score = 1
        world.current_game_player_B_score = 2
        world.player_A_score = 14
        world.player_B_score = 1
        world.is_last_move_raise = True
        world.is_last_move_accepted_raise = True
        world.is_last_hand_raise_valid = False
        world.current_game_prize = 15

        expected_player_A = [1, 0, 0, 1, 0, 0, 0, 0, 0, 0,  # 110
                             0, 0, 0, 0, 0, 0, 0, 1, 1, 0,  # 120
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  # 130
                             0, 0, 1, 1, 1, 0, 0, 0, 0, 0,  # 140
                             0, 0, 0, 0, 0, 0, 0, 1, 0, 0]  # 150

        expected_player_B = [0, 1, 1, 0, 1, 0, 0, 0, 0, 0,  # 110
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  # 120
                             0, 0, 0, 0, 0, 0, 0, 0, 0, 0,  # 130
                             0, 1, 1, 1, 1, 0, 0, 0, 0, 0,  # 140
                             0, 0, 0, 0, 0, 0, 0, 1, 0, 0]  # 150

        observation_player_A = world.observe(1, self.agent)
        observation_player_B = world.observe(-1, self.agent)
        #testing last part of observation is correct
        np.testing.assert_array_equal(observation_player_A[32:82], np.array(expected_player_A).reshape((50, 1)))
        np.testing.assert_array_equal(observation_player_B[32:82], np.array(expected_player_B).reshape((50, 1)))
Example #20
0
    def test_last_hand_raise_valid_9_cards(self):
        # trumpf

        # player -1 raised
        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4, 5, 6, 7, 8]
        world.rank = 3
        world.suit = 2
        world.current_player = -1
        world.player_B_hand = [total_watten.get_id(4, 2)]
        world.player_A_hand = [total_watten.get_id(5, 0)]

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # player 1 raised
        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4, 5, 6, 7, 8]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = [total_watten.get_id(4, 2)]
        world.player_A_hand = [total_watten.get_id(5, 2)]

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # same suit

        # player 1 raised
        world = WorldTotalWatten()

        world.played_cards = [
            0, 1, 2, 3, 4, 5, 6, 7,
            total_watten.get_id(1, 0)
        ]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = []
        world.player_A_hand = [total_watten.get_id(4, 0)]

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # player -1 raised
        world = WorldTotalWatten()

        world.played_cards = [
            0, 1, 2, 3, 4, 5, 6, 7,
            total_watten.get_id(1, 0)
        ]
        world.rank = 3
        world.suit = 2
        world.current_player = -1
        world.player_B_hand = [total_watten.get_id(4, 0)]
        world.player_A_hand = []

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # card beats the played one

        # player 1 raised
        world = WorldTotalWatten()

        world.played_cards = [
            0, 1, 2, 3, 4, 5, 6, 7,
            total_watten.get_id(1, 0)
        ]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = []
        world.player_A_hand = [total_watten.get_id(3, 2)]

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # player -1 raised
        world = WorldTotalWatten()

        world.played_cards = [
            0, 1, 2, 3, 4, 5, 6, 7,
            total_watten.get_id(1, 0)
        ]
        world.rank = 3
        world.suit = 2
        world.current_player = -1
        world.player_B_hand = [total_watten.get_id(3, 2)]
        world.player_A_hand = []

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # raise was not legal

        # player 1 raised
        world = WorldTotalWatten()

        world.played_cards = [
            0, 1, 2, 3, 4, 5, 6, 7,
            total_watten.get_id(6, 3)
        ]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = []
        world.player_A_hand = [total_watten.get_id(1, 0)]

        result = world._last_hand_raise_valid()
        self.assertFalse(result)

        # player -1 raised
        world = WorldTotalWatten()

        world.played_cards = [
            0, 1, 2, 3, 4, 5, 6, 7,
            total_watten.get_id(6, 3)
        ]
        world.rank = 3
        world.suit = 2
        world.current_player = -1
        world.player_B_hand = [total_watten.get_id(1, 0)]
        world.player_A_hand = []

        result = world._last_hand_raise_valid()
        self.assertFalse(result)
Example #21
0
    def test_last_hand_raise_valid_8_cards(self):
        # player -1 raised
        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4, 5, 6, 7]
        world.rank = 3
        world.suit = 2
        world.current_player = -1
        world.player_B_hand = [total_watten.get_id(4, 1)]
        world.player_A_hand = [total_watten.get_id(5, 0)]

        result = world._last_hand_raise_valid()
        self.assertFalse(result)

        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4, 5, 6, 7]
        world.rank = 3
        world.suit = 2
        world.current_player = -1
        world.player_B_hand = [total_watten.get_id(4, 2)]
        world.player_A_hand = [total_watten.get_id(5, 0)]

        result = world._last_hand_raise_valid()
        self.assertTrue(result)

        # player 1 raised
        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4, 5, 6, 7]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = [total_watten.get_id(4, 1)]
        world.player_A_hand = [total_watten.get_id(5, 0)]

        result = world._last_hand_raise_valid()
        self.assertFalse(result)

        world = WorldTotalWatten()

        world.played_cards = [0, 1, 2, 3, 4, 5, 6, 7]
        world.rank = 3
        world.suit = 2
        world.current_player = 1
        world.player_B_hand = [total_watten.get_id(4, 2)]
        world.player_A_hand = [total_watten.get_id(5, 2)]

        result = world._last_hand_raise_valid()
        self.assertTrue(result)
Example #22
0
    def test_get_current_player_hand(self):
        world = WorldTotalWatten()

        world.player_A_hand = [1, 2, 3]
        world.player_B_hand = [4, 5, 6]

        world.current_player = 1

        result = world._get_current_player_hand()
        self.assertEqual(result, [1, 2, 3])

        world = WorldTotalWatten()

        world.player_A_hand = [1, 2, 3]
        world.player_B_hand = [4, 5, 6]

        world.current_player = -1

        result = world._get_current_player_hand()
        self.assertEqual(result, [4, 5, 6])
Example #23
0
    def test_set_initial_game_prize_player_B_ahead(self):
        world = WorldTotalWatten()

        self.assertEqual(world.current_game_prize, 2)

        world = WorldTotalWatten()
        world.player_B_score = 13
        world.player_A_score = 4

        world._set_initial_game_prize()

        self.assertEqual(world.current_game_prize, 4)

        world = WorldTotalWatten()
        world.player_B_score = 13
        world.player_A_score = 10

        world._set_initial_game_prize()

        self.assertEqual(world.current_game_prize, 3)
Example #24
0
    def test_is_game_end(self):
        world = WorldTotalWatten()

        world.refresh()

        result = world.is_game_end()
        self.assertFalse(result)

        world.player_A_score = 15
        result = world.is_game_end()
        self.assertTrue(result)

        world.refresh()

        world.player_B_score = 13
        result = world.is_game_end()
        self.assertFalse(result)

        world.refresh()

        world.player_B_score = 18
        result = world.is_game_end()
        self.assertTrue(result)
Example #25
0
    def test_display(self):
        watten = WorldTotalWatten()

        watten.display()
Example #26
0
    def test_remove_card_from_hand(self):
        world = WorldTotalWatten()

        world.player_A_hand = [0, 1, 2, 3, 4]
        world.player_B_hand = [5, 6, 7, 8, 9]

        world._remove_card_from_hand(3, 1)
        self.assertTrue(world.player_A_hand, [0, 1, 2, 4])

        world._remove_card_from_hand(5, -1)
        self.assertTrue(world.player_A_hand, [6, 7, 8, 9])

        world._remove_card_from_hand(4, 1)
        self.assertTrue(world.player_A_hand, [0, 1, 2])

        world._remove_card_from_hand(8, -1)
        self.assertTrue(world.player_A_hand, [6, 7, 9])
Example #27
0
    def test_game_no_raise_player_A_starts(self):
        world = WorldTotalWatten()
        world.LOG.setLevel(DEBUG)

        world.init_world_to_state(-1, 1, 0, 0, [28, 29, 3, 15, 22],
                                  [19, 14, 7, 0, 11], [], 0, 0, 2, False,
                                  False, None, 18, 21, None, None)

        # [39, 44, 0, 46, 48, 3, 29, 46, 48, 14, 11, 15]
        world_copy = world.deepcopy()

        ######## MOVE ########
        valid_moves = world.get_valid_moves()

        outcome, next_player = world.act(0, self.agent)  # rank
        outcome, next_player = world.act(0, self.agent)  # suit
        outcome, next_player = world.act(0, self.agent)  # card
        outcome, next_player = world.act(1, self.agent)  # raise
        outcome, next_player = world.act(3, self.agent)  # accepted raise
        outcome, next_player = world.act(0, self.agent)  # card --
        outcome, next_player = world.act(1, self.agent)  # raise
        outcome, next_player = world.act(3, self.agent)  # accepted raise
        outcome, next_player = world.act(0, self.agent)  # card --
        outcome, next_player = world.act(0, self.agent)  # card
        outcome, next_player = world.act(0, self.agent)  # card
        outcome, next_player = world.act(0, self.agent)  # card
        world.get_valid_moves()
Example #28
0
    def test_get_last_played_card(self):
        world = WorldTotalWatten()
        world.played_cards = [4, 3, 2]
        last_played_card = world._get_last_played_card()
        self.assertEqual(last_played_card, 2)

        world = WorldTotalWatten()
        world.played_cards = []
        last_played_card = world._get_last_played_card()
        self.assertEqual(last_played_card, None)

        world = WorldTotalWatten()
        world.played_cards = [123]
        last_played_card = world._get_last_played_card()
        self.assertEqual(last_played_card, 123)

        world = WorldTotalWatten()
        world.played_cards = [2, 8]
        last_played_card = world._get_last_played_card()
        self.assertEqual(last_played_card, 8)
Example #29
0
    def test_assign_points_single_hand_ended(self):
        # current player: 1
        world = WorldTotalWatten()

        world.current_player = 1
        world.current_game_player_A_score = 1
        world.current_game_player_B_score = 2

        world._assign_points_move(True)

        self.assertEqual(world.current_game_player_A_score, 2)
        self.assertEqual(world.current_game_player_B_score, 2)

        world = WorldTotalWatten()

        world.current_player = 1
        world.current_game_player_A_score = 1
        world.current_game_player_B_score = 2

        world._assign_points_move(False)

        self.assertEqual(world.current_game_player_A_score, 1)
        self.assertEqual(world.current_game_player_B_score, 3)

        # current player: 2
        world = WorldTotalWatten()

        world.current_player = -1
        world.current_game_player_A_score = 1
        world.current_game_player_B_score = 2

        world._assign_points_move(True)

        self.assertEqual(world.current_game_player_A_score, 1)
        self.assertEqual(world.current_game_player_B_score, 3)

        world = WorldTotalWatten()

        world.current_player = -1
        world.current_game_player_A_score = 1
        world.current_game_player_B_score = 2

        world._assign_points_move(False)

        self.assertEqual(world.current_game_player_A_score, 2)
        self.assertEqual(world.current_game_player_B_score, 2)
Example #30
0
    def test_is_won(self):
        world = WorldTotalWatten()

        world.refresh()

        world.player_A_score = 15
        result = world.is_won(-1)
        self.assertTrue(result)

        world.refresh()

        world.player_A_score = 15
        world.player_B_score = 15
        self.assertRaises(InconsistentStateError, world.is_won, 1)

        world.refresh()

        world.player_B_score = 15
        result = world.is_won(-1)
        self.assertFalse(result)

        world.refresh()

        world.player_B_score = 15
        result = world.is_won(1)
        self.assertTrue(result)