def test_accuse_bad_guess_of_cards(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('1', '1L', '2L') # opponent id, first card, second card joe = HumanPlayer('joe') joe._hand = [(4, 'L'), (8, 'L'), (5, 'H'), (8, 'H')] ai = AIPlayer('ai') ai._hand = [(1, 'L'), (3, 'L'), (1, 'H'), (9, '$')] state = GameState() state.turn = 23 state.current_player = joe state.players = [joe, ai] state.evidence_cards = [(5, '$'), (5, 'L')] with captured_output() as (out, err): self.assertTrue(accuse_command(state)) self.assertEqual('Accuse\n\n' 'Your guess is: Incorrect', output(out)) accusation = state.accusations.pop() self.assertEqual('joe', accusation['player'].name) self.assertEqual('ai', accusation['accused'].name) self.assertEqual([(1, 'L'), (2, 'L')], accusation['cards']) self.assertEqual('incorrect', accusation['outcome']) self.assertEqual('ended', state.status) finally: Interactive.raw_input = old_raw_input
def test_accuse_bad_guess_of_murderer(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('1', '3L', '5L') # opponent id, first card, second card joe = HumanPlayer('joe') joe._hand = [(4, 'L'), (7, 'L'), (5, 'H'), (8, 'H')] ai1 = AIPlayer('ai1') ai1._hand = [(1, 'L'), (3, 'L'), (1, 'H'), (9, '$')] ai2 = AIPlayer('ai2') ai2._hand = [(8, 'L'), (3, 'H'), (2, '$'), (3, '$')] state = GameState() state.turn = 23 state.current_player = joe state.players = [joe, ai1, ai2] state.evidence_cards = [(3, 'L'), (5, 'L')] with captured_output() as (out, err): self.assertTrue(accuse_command(state)) self.assertEqual('Accuse\n\n' 'Your guess is: Incorrect', output(out)) self.assertEqual('ended', state.status) finally: Interactive.raw_input = old_raw_input
def test_interrogate_for_the_same_two_cards_asks_for_rank_or_suit(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('1', '3L', '3L', 'suit') # opponent id, low card, high card player = HumanPlayer('joe') tom = AIPlayer('Tom') tom._hand = [(1, 'L'), (3, 'L'), (6, 'L'), (2, 'H'), (8, '$'), (9, '$')] state = GameState() state.turn = 10 state.current_player = player state.players = [player, tom] state.question_cards = [(1, '$'), (3, 'L'), (3, 'L')] with captured_output() as (out, err): turn_ended = interrogate_command(state) self.assertEqual('Interrogate\n' 'Question cards: 1$ 3L 3L\n' 'Cards in this range: 3', output(out)) turn = state.history.pop() self.assertEqual(10, turn['turn']) self.assertEqual('joe', turn['player'].name) self.assertEqual('Tom', turn['opponent'].name) self.assertEqual('interrogate', turn['action']) self.assertEqual('3L->3L [suit]', str(turn['range'])) self.assertEqual(3, turn['result']) self.assertTrue(turn_ended) finally: Interactive.raw_input = old_raw_input
def test_secret_asks_for_two_cards_puts_the_range_in_history_and_display_the_result(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('1', '9$', '1H') # opponent id, low card, high card player = HumanPlayer('joe') donna = AIPlayer('donna') donna._hand = [(1, 'L'), (3, 'L'), (6, 'L'), (2, 'H'), (8, '$'), (9, '$')] state = GameState() state.turn = 1 state.current_player = player state.players = [player, donna] state.question_cards = [(1, 'L'), (3, 'L'), (7, 'L')] with captured_output() as (out, err): turn_ended = secret_command(state) self.assertEqual('Secret\n' 'Cards in this range: 2', output(out)) turn = state.history.pop() self.assertEqual(1, turn['turn']) self.assertEqual('joe', turn['player'].name) self.assertEqual('donna', turn['opponent'].name) self.assertEqual('secret', turn['action']) self.assertEqual(['L', 'H', '$'], turn['range'].suits) self.assertEqual([9, 1], turn['range'].ranks) self.assertEqual(2, turn['result']) self.assertTrue(turn_ended) self.assertEqual(0, state.current_player.secret) finally: Interactive.raw_input = old_raw_input
def test_interrogate_asks_for_two_cards_puts_the_range_in_history_and_display_the_result(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('1', '3L', '7L') # opponent id, low card, high card player = HumanPlayer('joe') tom = AIPlayer('tom') tom._hand = [(1, 'L'), (3, 'L'), (6, 'L'), (2, 'H'), (8, '$'), (9, '$')] state = GameState() state.turn = 10 state.current_player = player state.players = [player, tom] state.question_cards = [(1, 'L'), (3, 'L'), (7, 'L')] with captured_output() as (out, err): turn_ended = interrogate_command(state) self.assertEqual('Interrogate\n' 'Question cards: 1L 3L 7L\n' 'Cards in this range: 2', output(out)) turn = state.history.pop() self.assertEqual(10, turn['turn']) self.assertEqual('joe', turn['player'].name) self.assertEqual('tom', turn['opponent'].name) self.assertEqual('interrogate', turn['action']) self.assertEqual(['L'], turn['range'].suits) self.assertEqual([3, 4, 5, 6, 7], turn['range'].ranks) self.assertEqual(2, turn['result']) self.assertTrue(turn_ended) finally: Interactive.raw_input = old_raw_input
def test_players_except(self): state = GameState() tom = HumanPlayer('tom') tim = AIPlayer('tim') tam = AIPlayer('tam') ari = AIPlayer('ari') state.players = [tom, tim, tam, ari] self.assertEqual([tom, tam], state.players_except(tim, ari))
def test_players_except_should_return_gracefully_if_player_not_in_players(self): state = GameState() tom = HumanPlayer('tom') tim = AIPlayer('tim') state.players = [tom] try: self.assertEqual([tom], state.players_except(tim)) except ValueError: self.fail("GameState.players_except(person) should not fail if person is not in players")
def test_print_summary_at_start(self): human = HumanPlayer('john') human._hand = [(3, 'L'), (5, 'H'), (9, '$')] state = GameState() state.human_player = human state.players = [human] with captured_output() as (out, err): print_summary(state) self.assertEqual('Game Summary\n' 'Your hand: 3L 5H 9$\n' 'Secret to play: [john: 1]', output(out))
def test_determine_murderer_when_its_another_player(self): state = GameState() john = HumanPlayer('john') jim = AIPlayer('jim') jack = AIPlayer('jack') state.current_player = john state.players = [john, jim, jack] state.extra_card = (8, 'L') john._hand = [(5, 'L'), (9, 'H'), (6, '$')] jim._hand = [(4, 'L'), (7, 'L'), (3, '$')] jack._hand = [(1, 'L'), (3, 'H'), (5, '$')] accusation_cards = [(5, 'L'), (7, '$')] # => murder card = 3H self.assertEqual(jack, determine_murderer(state, accusation_cards))
def main(): print 'Welcome to Deduce or Die! IA' print nb_players = ask_for('Number of players : ', int, ['3', '4', '5', '6']) human_player_name = ask_for('Type your name : ') state = GameState() players, state.human_player = prepare_players(nb_players, human_player_name) state.players = players motive_deck = prepare_game_deck(nb_decks=1) state.interrogation_deck = prepare_game_deck(nb_decks=2) state.discard_deck = [] state.evidence_cards = [motive_deck.pop(), motive_deck.pop()] deal_deck(motive_deck, players) assert len(motive_deck) <= 1 if len(motive_deck) == 1: state.extra_card = motive_deck[0] else: state.extra_card = None for player in state.players: if not player.is_human(): player.setup_ai(state) print_summary(state) determine_low_suit(state) print print_low_suit(players) state.turn = 1 while state.status != 'ended': play_turn(state) end_game_summary(state) print
def test_print_summary_with_extra_card_and_low_suit(self): human = HumanPlayer('john') human._hand = [(3, 'L'), (5, 'H'), (9, '$')] human.set_low_suit('H') state = GameState() state.human_player = human state.players = [human] state.extra_card = (5, 'L') with captured_output() as (out, err): self.assertFalse(print_summary(state)) self.assertEqual( 'Game Summary\n' 'Your hand: 3L 5H 9$\n' 'Extra card: 5L\n' 'Low Suits: [john: H]\n' 'Secret to play: [john: 1]', output(out))
def test_choose_an_opponent(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('5', '2') player = HumanPlayer('joe') ai1 = AIPlayer('ai1') ai2 = AIPlayer('ai2') ai3 = AIPlayer('ai3') state = GameState() state.turn = 1 state.current_player = player state.players = [ai2, player, ai3, ai1] with captured_output() as (out, err): chosen_opponent = choose_an_opponent(state) self.assertEqual(ai3, chosen_opponent) finally: Interactive.raw_input = old_raw_input
def test_interrogate_lets_you_cancel_and_do_nothing(self): try: old_raw_input = raw_input Interactive.raw_input = mock_raw_input('1', '3L', 'cancel') player = HumanPlayer('joe') tom = AIPlayer('tom') state = GameState() state.current_player = player state.players = [player, tom] state.history = [] state.question_cards = [(1, 'L'), (3, 'L'), (7, 'L')] with captured_output() as (out, err): turn_ended = interrogate_command(state) self.assertEqual('Interrogate\n' 'Question cards: 1L 3L 7L', output(out)) self.assertEqual(0, len(state.history)) self.assertFalse(turn_ended) finally: Interactive.raw_input = old_raw_input
def test_determine_current_player_after_a_few_rounds(self): state = GameState() state.players = ['one', 'two', 'three'] state.turn = 8 self.assertEqual('two', determine_current_player(state))
def test_determine_current_player_turn1(self): state = GameState() state.players = ['one', 'two', 'three'] state.turn = 1 self.assertEqual('one', determine_current_player(state))