コード例 #1
0
def create_room(server, client, options):
    new_game = Game()

    if options and 'room_id' in options:
        new_game = Game(options['room_id'])

    new_game.add_player(client)
    new_game_id = new_game.get_id()

    server.rooms[new_game_id] = new_game
    client.send_action(200, {'id': new_game_id})
    return
コード例 #2
0
def main():
    """Play two bots and print the results."""
    args = create_parser().parse_args()
    bots_types = ['Bot', 'MonteCarloSearchTreeBot', 'Human']
    bot_names = {
        'Bot': 'random',
        'MonteCarloSearchTreeBot': 'mcst',
        'Human': 'You'
    }

    game_state = Game.new_game_state()
    game_state = Game.set_print_moves(game_state, True)

    statcache = StatCache()
    statcache.past_states.append(game_state)

    for pid in args.players:
        bot = eval("{}".format(bots_types[pid]))()
        statcache.bots.append(bot)

        player_state = Game.new_player_state_object(
            hit_points=args.starting_hit_points,
            bot_type=bot_names[bots_types[pid]])
        game_state = Game.add_player(game_state, player_state)

    Game.play_out(game_state, statcache)
コード例 #3
0
class GameSetupTestCase(TestCase):
    @classmethod
    def setUpClass(cls):
        cls.settings = config.get_settings(SETTINGS_LOCATION, refresh=True)

    def setUp(self):
        self.pg = Game()
        self.pg.settings = self.settings

    def test_add_player(self):
        players = [Player('Evie'), Player('Amelia')]

        for player in players:
            self.pg.add_player(player)

            with self.subTest(player=player):
                self.assertIs(self.pg, player.game)
                self.assertIn(player, self.pg.players)
                self.assertEqual(player.name, self.pg.players[-1].name)

    def test_get_infection_rate(self):
        self.pg.get_infection_rate()
        self.assertEqual(2, self.pg.infection_rate)

    def test_get_new_cities(self):
        self.pg.get_new_cities()

        self.assertEqual(40, len(self.pg.city_map))
        self.assertIn('London', self.pg.city_map)

        city = self.pg.city_map['London']
        self.assertEqual('London', city.name)
        self.assertEqual('Blue', city.colour)
        self.assertEqual('Yellow', self.pg.city_map['Washington'].colour)

        self.assertEqual(6, len(city.connected_cities))
        self.assertIn(self.pg.city_map['Washington'], city.connected_cities)
        self.assertNotIn(self.pg.city_map['Liverpool'], city.connected_cities)

    def test_make_cities(self):
        # TODO: get around implicit method call
        self.pg.get_new_cities()
        city = self.pg.city_map['London']

        self.assertEqual(6, len(city.connected_cities))
        self.assertIn(self.pg.city_map['Washington'], city.connected_cities)
        self.assertNotIn(self.pg.city_map['Liverpool'], city.connected_cities)

    def test_get_new_decks(self):
        self.pg.get_new_decks()

        deck = self.pg.player_deck
        self.assertEqual('London', deck.cards[0].name)
        self.assertEqual('Black', deck.cards[29].colour)

        deck = self.pg.infect_deck
        self.assertEqual('London', deck.cards[0].name)
        self.assertEqual('Black', deck.cards[29].colour)

    def test_get_new_diseases(self):
        self.pg.get_new_diseases()

        self.assertEqual('Red', self.pg.diseases['Red'].colour)
        self.assertEqual(30, self.pg.disease_cubes['Blue'])

    def test_set_starting_epidemics(self):
        self.pg.set_starting_epidemics()
        self.assertEqual(4, self.pg.starting_epidemics)

    def test_setup_game(self):
        del self.pg.settings

        players = [Player('Evie'), Player('Amelia')]
        for player in players:
            self.pg.add_player(player)

        self.pg.setup_game(SETTINGS_LOCATION)

        self.assertEqual(self.pg.settings, self.settings)

        self.assertEqual(0, self.pg.epidemic_count)
        self.assertEqual(0, self.pg.outbreak_count)
        self.assertFalse(self.pg.game_won)
        self.assertFalse(self.pg.game_over)

        self.assertIn('Yellow', City.cube_colours)
        City.cube_colours = []

        self.assertEqual(2, self.pg.infection_rate)

        self.assertIn('New York', self.pg.city_map)
        self.newyork = self.pg.city_map['New York']
        self.assertEqual('New York', self.newyork.name)
        self.assertEqual('Yellow', self.newyork.colour)
        self.assertEqual(3, len(self.newyork.connected_cities))

        top_player_card = self.pg.player_deck.take_top_card()
        top_infect_card = self.pg.infect_deck.take_top_card()
        self.assertEqual('London', top_player_card.name)
        self.assertEqual('London', top_infect_card.name)

        self.assertEqual('Red', self.pg.diseases['Red'].colour)
        self.assertEqual(30, self.pg.disease_cubes['Black'])

        self.assertEqual(4, self.pg.starting_epidemics)
コード例 #4
0
class GameTestCase(unittest.TestCase):
    def setUp(self):
        self.player1 = Player('Evie')
        self.player2 = Player('Amelia')
        self.pg = Game()
        self.pg.add_player(self.player1)
        self.pg.add_player(self.player2)
        self.pg.setup_game(SETTINGS_LOCATION)

    def test_all_one_colour(self):
        card_names = [
            'London', 'Oxford', 'Cambridge', 'Brighton', 'Southampton'
        ]
        self.assertTrue(self.pg.all_one_colour(card_names))

        card_names[3] = 'Moscow'
        self.assertFalse(self.pg.all_one_colour(card_names))

    def test_all_diseases_cured(self):
        self.assertFalse(self.pg.all_diseases_cured())

        self.pg.diseases['Yellow'].cured = True
        self.assertFalse(self.pg.all_diseases_cured())

        self.pg.diseases['Blue'].cured = True
        self.pg.diseases['Black'].cured = True
        self.assertFalse(self.pg.all_diseases_cured())

        self.pg.diseases['Red'].cured = True
        self.assertTrue(self.pg.all_diseases_cured())

    def test_add_epidemics(self):
        self.pg.add_epidemics()
        self.assertFalse(self.pg.has_x_cube_city(3))
        for i in range(0, 11):
            self.pg.draw_card(self.player1)
        self.assertEqual(1, self.pg.epidemic_count)
        self.assertTrue(self.pg.has_x_cube_city(3))

    def test_infect_city(self):
        self.pg.infect_city('London', 'Blue')
        self.assertEqual(1, self.pg.city_map['London'].cubes['Blue'])

        self.pg.disease_cubes['Blue'] = 0
        with self.assertRaises(GameCrisisException):
            self.pg.infect_city('London', 'Blue')

    def test_infect_city_phase(self):
        self.pg.infect_city_phase()
        self.assertEqual(1, self.pg.city_map['London'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(2, len(self.pg.infect_deck.discard))
        self.assertEqual('London', self.pg.infect_deck.discard[0].name)
        self.assertEqual(28, self.pg.disease_cubes['Blue'])

    def test_epidemic_phase(self):
        self.pg.epidemic_phase()
        self.assertEqual(3, self.pg.city_map['Belgorod'].cubes['Black'])
        top_infect_card = self.pg.infect_deck.take_top_card()
        self.assertEqual('Belgorod', top_infect_card.name)
        self.assertEqual('Black', top_infect_card.colour)
        self.assertEqual(1, self.pg.epidemic_count)
        self.assertEqual(0, len(self.pg.infect_deck.discard))

    def test_outbreak_trigger(self):
        for i in range(4):
            self.pg.infect_city('London', 'Blue')
        self.assertEqual(3, self.pg.city_map['London'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Cambridge'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Brighton'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Washington'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Bejing'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Moscow'].cubes['Blue'])
        self.assertEqual(1, self.pg.outbreak_count)

    def test_outbreak(self):
        self.pg.outbreak('London', 'Blue')
        self.assertEqual(1, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Cambridge'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Brighton'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Washington'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Bejing'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Moscow'].cubes['Blue'])

        self.pg.outbreak_count = 7
        self.pg.outbreak_stack.clear()
        with self.assertRaises(GameCrisisException):
            self.pg.outbreak('London', 'Blue')

    def test_shuffle(self):
        import random
        random.seed(42)

        self.assertEqual('London', self.pg.player_deck.take_top_card().name)
        self.pg.player_deck.shuffle()
        self.assertNotEqual('Oxford', self.pg.player_deck.take_top_card().name)

        self.assertEqual('London', self.pg.infect_deck.take_top_card().name)
        self.pg.infect_deck.shuffle()
        self.assertNotEqual('Oxford', self.pg.infect_deck.take_top_card().name)

    def test_start_game(self):
        self.pg.start_game()
        self.top_player_card = self.pg.player_deck.take_top_card()
        self.top_infect_card = self.pg.infect_deck.take_top_card()
        self.assertEqual(9, len(self.pg.infect_deck.discard))
        self.assertEqual(0, len(self.pg.player_deck.discard))
        self.assertTrue(self.pg.has_x_cube_city(3))
        self.assertEqual(3, self.pg.get_count_x_cube_city(3))
        self.assertTrue(self.pg.has_x_cube_city(2))
        self.assertEqual(3, self.pg.get_count_x_cube_city(2))
        self.assertTrue(self.pg.has_x_cube_city(1))
        self.assertEqual(3, self.pg.get_count_x_cube_city(1))
        self.assertEqual(4, len(self.player1.hand))
        self.assertEqual(4, len(self.player2.hand))
        self.assertNotEqual('London', self.top_player_card.name)
        self.assertNotEqual('London', self.top_infect_card.name)
        self.assertEqual('London', self.pg.players[0].location.name)
        self.assertEqual('London', self.pg.players[1].location.name)
        self.assertTrue(self.pg.city_map['London'].has_lab)

        for i in range(10):
            self.pg.draw_card(self.player1)
        self.assertEqual(1, self.pg.epidemic_count)

    def test_initial_infect_phase(self):
        self.pg.inital_infect_phase()
        self.assertEqual(3, self.pg.city_map['London'].cubes['Blue'])
        self.assertEqual(3, self.pg.city_map['Oxford'].cubes['Blue'])
        self.assertEqual(3, self.pg.city_map['Cambridge'].cubes['Blue'])
        self.assertEqual(2, self.pg.city_map['Brighton'].cubes['Blue'])
        self.assertEqual(2, self.pg.city_map['Southampton'].cubes['Blue'])
        self.assertEqual(2, self.pg.city_map['Bristol'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Plymouth'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Liverpool'].cubes['Blue'])
        self.assertEqual(1, self.pg.city_map['Manchester'].cubes['Blue'])
        self.assertEqual(9, len(self.pg.infect_deck.discard))
        self.assertEqual(12, self.pg.disease_cubes['Blue'])

    def test_draw_initial_hands(self):
        test_cards = self.pg.player_deck.cards[:8]
        self.pg.draw_initial_hands()

        for i, player in enumerate(self.pg.players):
            with self.subTest(i=i, player=player):
                self.assertEqual(4, len(player.hand))
                self.assertEqual(test_cards[i * 4 + 3].name,
                                 player.hand[3].name)

    def test_draw_card(self):
        self.pg.draw_card(self.player1)
        self.assertEqual('London', self.player1.hand[0].name)

        self.pg.player_deck.cards = []
        with self.assertRaises(GameCrisisException):
            self.pg.draw_card(self.player1)

    def test_get_new_diseaes(self):
        self.assertFalse(self.pg.diseases['Blue'].cured)
        self.assertFalse(self.pg.diseases['Red'].cured)
        self.pg.diseases['Blue'].cured = True
        self.assertTrue(self.pg.diseases['Blue'].cured)

    def test_reset_distances(self):
        self.pg.reset_distances()
        self.player1.set_location('London')
        self.pg.start_turn(self.player1)
        self.pg.draw_card(self.player1)
        self.assertTrue(self.player1.build_lab())
        self.assertEqual(999, self.pg.city_map['London'].distance)
        self.assertEqual(999, self.pg.city_map['Moscow'].distance)
        self.pg.set_lab_distances()
        self.assertNotEqual(999, self.pg.city_map['London'].distance)
        self.assertNotEqual(999, self.pg.city_map['Moscow'].distance)
        self.pg.reset_distances()
        self.assertEqual(999, self.pg.city_map['London'].distance)
        self.assertEqual(999, self.pg.city_map['Moscow'].distance)

    def test_set_city_distance_name(self):
        self.pg.set_city_distance_name('Leeds')
        self.assertEqual(2, self.pg.city_map['London'].distance)
        self.assertEqual(3, self.pg.city_map['Moscow'].distance)

    def test_set_cities_distances_names(self):
        cities = ['Leeds', 'Atlanta', 'Moscow']
        self.pg.set_cities_distances_names(cities)
        self.assertEqual(1, self.pg.city_map['London'].distance)
        self.assertEqual(0, self.pg.city_map['Moscow'].distance)

    def test_set_lab_distances(self):
        for i in range(21):
            self.pg.draw_card(self.player1)
        self.player1.set_location('London')
        self.pg.start_turn(self.player1)
        self.assertTrue(self.player1.build_lab())
        self.player1.set_location('New York')
        self.pg.draw_card(self.player1)
        self.assertTrue(self.player1.build_lab())
        self.player1.set_location('Jinan')
        self.pg.set_lab_distances()
        self.assertEqual(0, self.pg.city_map['London'].distance)
        self.assertEqual(1, self.pg.city_map['Moscow'].distance)
        self.assertEqual(3, self.player1.get_distance_from_lab())