Esempio n. 1
0
 def __init__(self):
     super(CountersState, self).__init__()
     self.state = {
         CounterGroup(1): -1,
         CounterGroup(2): -1,
         CounterGroup(3): -1,
         CounterGroup(4): -1
     }
    def test_update_board(self):
        moves = [Move(CounterGroup(1), 'forward', 3)]
        player_structs = {0: CountersState(), 1: CountersState()}

        self.assertFalse(update_board(moves, 0, player_structs))
        self.assertEqual(player_structs[0].state[CounterGroup(1)], 3)
        self.assertEqual(player_structs[0].state[CounterGroup(2)], -1)
        self.assertEqual(player_structs[0].state[CounterGroup(3)], -1)
        self.assertEqual(player_structs[0].state[CounterGroup(4)], -1)
    def test_knocked_opponent_counter(self):
        moves = [Move(CounterGroup(2), 'forward', 3)]
        player1_state = CountersState()
        player1_state.state[CounterGroup(1)] = 3
        player_structs = {0: CountersState(), 1: player1_state}

        self.assertTrue(update_board(moves, 0, player_structs))
        self.assertEqual(player_structs[0].state[CounterGroup(2)], 3)
        self.assertEqual(player_structs[1].state[CounterGroup(1)], -1)
    def test_merge_two_counters(self):
        moves = [Move(CounterGroup(2), 'forward', 3), Merge(CounterGroup(1), CounterGroup(2))]
        player0_state = CountersState()
        player0_state.state[CounterGroup(1)] = 3
        player_structs = {0: player0_state, 1: CountersState()}

        self.assertFalse(update_board(moves, 0, player_structs))
        self.assertTrue(CounterGroup(1, 2) in player_structs[0].state)
        self.assertFalse(CounterGroup(1) in player_structs[0].state)
        self.assertFalse(CounterGroup(2) in player_structs[0].state)
        self.assertEqual(player_structs[0].state[CounterGroup(1, 2)], 3)
        self.assertEqual(player_structs[0].state[CounterGroup(3)], -1)
        self.assertEqual(player_structs[0].state[CounterGroup(4)], -1)
    def test_knocked_opponent_group_of_counter(self):
        moves = [Move(CounterGroup(2), 'forward', 3)]
        player1_state = CountersState()
        player1_state.remove_group(CounterGroup(1))
        player1_state.remove_group(CounterGroup(2))
        player1_state.add_group(CounterGroup(1, 2), 3)
        player_structs = {0: CountersState(), 1: player1_state}

        self.assertTrue(update_board(moves, 0, player_structs))
        self.assertEqual(player_structs[0].state[CounterGroup(2)], 3)
        self.assertEqual(player_structs[1].state[CounterGroup(1)], -1)
        self.assertEqual(player_structs[1].state[CounterGroup(2)], -1)
        self.assertFalse(CounterGroup(1, 2) in player_structs[1].state)
    def test_more_moves(self):
        moves = [Move(CounterGroup(1), 'forward', 3),
                 Move(CounterGroup(2), 'forward', 4),
                 Move(CounterGroup(3), 'turn_left', 4)]
        player0_state = CountersState()
        player0_state.state[CounterGroup(3)] = 5
        player_structs = {0: player0_state, 1: CountersState()}

        self.assertFalse(update_board(moves, 0, player_structs))
        self.assertEqual(player_structs[0].state[CounterGroup(1)], 3)
        self.assertEqual(player_structs[0].state[CounterGroup(2)], 4)
        self.assertEqual(player_structs[0].state[CounterGroup(3)], 29)
        self.assertEqual(player_structs[0].state[CounterGroup(4)], -1)
Esempio n. 7
0
def update_board(moves, actual_player, player_structs):
    only_moves = filter(lambda x: isinstance(x, Move), moves)
    for move in only_moves:
        if move.command == "forward":
            player_structs[actual_player].state[
                move.counter_group_id] = forward(
                    player_structs[actual_player].state[move.counter_group_id],
                    move.of)
        else:  # turn_left
            player_structs[actual_player].state[
                move.counter_group_id] = turn_left(
                    player_structs[actual_player].state[move.counter_group_id],
                    move.of)

    only_merges = filter(lambda x: isinstance(x, Merge), moves)
    for merge in only_merges:
        places = []
        counter_ids = []
        for group in merge.groups:
            counter_ids.extend(group.counter_set)
            places.append(player_structs[actual_player].remove_group(group))

        new_counter_group = CounterGroup(*counter_ids)
        player_structs[actual_player].add_group(new_counter_group, max(places))

    extra_round_for_knocked = False
    for counter_group, place in list(
            player_structs[actual_player].state.iteritems()):
        for other_counter_group, other_place in list(
                player_structs[other_player(actual_player)].state.iteritems()):
            if same_place(place, other_place):
                _knock_counter_group(other_counter_group,
                                     other_player(actual_player),
                                     player_structs)
                extra_round_for_knocked = True

    return extra_round_for_knocked
Esempio n. 8
0
def _knock_counter_group(other_counter_group, player, player_structs):
    #   * set to -1
    #   * split groups
    player_structs[player].remove_group(other_counter_group)
    for counter in other_counter_group.counter_set:
        player_structs[player].add_group(CounterGroup(counter), -1)