def test_get_top_card_suit(self):
     game = CrazyEights(4)
     game.discard.append(Card(Rank.ACE, Suit.SPADES))
     self.assertEqual(game.get_top_card_suit(), Suit.SPADES)
     game.discard.append(Card(Rank.EIGHT, Suit.SPADES))
     game.curr_suit = Suit.HEARTS
     self.assertEqual(game.get_top_card_suit(), Suit.HEARTS)
    def test_play(self):
        game = CrazyEights(4)
        tc = Card(Rank.KING, Suit.HEARTS)
        game.discard.append(tc)
        p1 = game.players.get(1)
        p2 = game.players.get(2)

        # Card cannot be played
        card = Card(Rank.TWO, Suit.CLUBS)
        p1.add_to_hand(card)
        self.assertFalse(game.play(1, card))
        self.assertEqual(len(p1.get_cards()), 6)
        self.assertEqual(game.discard[-1], tc)

        # Card matches rank
        card = Card(Rank.KING, Suit.SPADES)
        p1.add_to_hand(card)
        game.play(1, card, Suit.DIAMONDS)
        self.assertEqual(len(p1.get_cards()), 6)
        self.assertEqual(game.discard[-1], card)

        # Card is an eight, matches neither rank nor suit
        card = Card(Rank.EIGHT, Suit.CLUBS)
        p2.add_to_hand(card)
        game.play(2, card, Suit.DIAMONDS)
        self.assertEqual(len(p2.get_cards()), 5)
        self.assertEqual(game.discard[-1], card)
        self.assertEqual(game.curr_suit, Suit.DIAMONDS)
    def test_deal(self):
        game = CrazyEights(4)
        p1 = game.players.get(1)
        self.assertEqual(len(p1.get_cards()), 5)

        game.deal(5)
        self.assertEqual(len(p1.get_cards()), 10)
Example #4
0
 def __init__(self):
     self.mastermind_game = Mastermind()
     self.minesweeper_game = Minesweeper()
     self.crazy_eights_game = CrazyEights(CRAZY_EIGHTS_NUM_PLAYERS)
     self.blackjack_game = Blackjack()
     self.game_to_load = None
     self.current_game = None
    def test_turn(self):
        game = CrazyEights(4)
        [p.clear_hand()
         for p in game.players.values()]  # force players to draw

        game.turn(2)
        game.turn(3)
        game.turn(4)
 def test_playable(self):
     game = CrazyEights(4)
     card = Card(Rank.NINE, Suit.HEARTS)
     game.discard.append(card)
     self.assertFalse(game.playable(Card(Rank.ACE, Suit.SPADES)))
     self.assertTrue(game.playable(Card(Rank.NINE, Suit.SPADES)))
     self.assertTrue(game.playable(Card(Rank.ACE, Suit.HEARTS)))
     self.assertTrue(game.playable(Card(Rank.EIGHT, Suit.SPADES)))
    def test_clear(self):
        game = CrazyEights(4)
        game.reset()  # force starting hands to be scored and stored
        game.clear()

        for p in game.players.values():
            self.assertEqual(p.get_score(), 0)
        self.assertEqual(len(set(game.pts)), 1)
 def test_reset_round(self):
     game = CrazyEights(2)
     p1 = game.players.get(1)
     p2 = game.players.get(2)
     p1.clear_hand()
     p2.clear_hand()
     p1.add_to_hand(Card(Rank.ACE, Suit.CLUBS))
     p2.add_to_hand(Card(Rank.EIGHT, Suit.DIAMONDS))
     game.reset_round()
     self.assertEqual(p1.get_score(), 49)
    def test_reset(self):
        game = CrazyEights(4)
        game.reset()

        score_hist = False
        if game.game_hist:
            for p in game.game_hist[0][0].values():
                if p.get_score() > 0:
                    score_exists = True
                    break
        self.assertTrue(score_exists)
Example #10
0
    def handle_game_input(self, game_name: str, user_input: str):
        """Handles input given game name (mastermind, minesweeper, crazy eights, blackjack, etc) and user input and returns the correct output based on which
        game and the option that is selected. 

        Args:
            game_name (str): name of the game to check input against
            user_input (str): user input representing which choice from main menu options is chosen
        
        Returns:
            
        """
        if game_name.lower() == "mastermind":
            if user_input.lower() == "new game":
                self.mastermind_game = Mastermind()
                self.current_game = self.mastermind_game
                return "\nMastermind\n"
            elif user_input.lower() == "continue":
                return "\nMastermind\n"
            return self.handle_mastermind_input(user_input)
        elif game_name.lower() == "minesweeper":
            if user_input.lower() == "new game":
                self.minesweeper_game = Minesweeper()
                self.current_game = self.minesweeper_game
                return "Minesweeper\n" + self.minesweeper_game.draw_board()
            elif user_input.lower() == "continue":
                return "Minesweeper\n" + self.minesweeper_game.draw_board()
            return self.handle_minesweeper_input(user_input)
        elif game_name.lower() == "crazy eights":
            if user_input.lower() == "new game":
                self.crazy_eights_game = CrazyEights(CRAZY_EIGHTS_NUM_PLAYERS)
                self.current_game = self.crazy_eights_game
                return "\nCrazy Eights\n\n" + self.crazy_eights_game.game_state + "\nTop Card: " \
                       + self.crazy_eights_game.show_top_card() + " \n\nPlayer Hand: \n" \
                       + self.crazy_eights_game.show_player_hand(CRAZY_EIGHTS_PLAYER_NUM) + "\n"
            elif user_input.lower() == "continue":
                return "\nCrazy Eights\n\n" + self.crazy_eights_game.game_state + "\nTop Card: " \
                       + self.crazy_eights_game.show_top_card() + " \n\nPlayer Hand: \n" \
                       + self.crazy_eights_game.show_player_hand(CRAZY_EIGHTS_PLAYER_NUM) + "\n"
            return self.handle_crazy_eights_input(user_input)
        elif game_name.lower() == "blackjack":
            if user_input.lower() == "new game":
                self.blackjack_game = Blackjack()
                self.current_game = self.blackjack_game
                return "\n Blackjack\n" + "\nHouse's revealed card: " \
                       + str(self.blackjack_game.house.get_cards()[0].get_rank().value) + " \n\nPlayer Hand: \n" \
                       + str(self.blackjack_game.user.get_cards()[0].get_rank().value) + ", " \
                       + str(self.blackjack_game.user.get_cards()[1].get_rank().value) + "\n"
            elif user_input.lower() == "continue":
                win_status = self.blackjack_game.win_condition()
                return self.blackjack_game.display_state(win_status)
            return self.handle_blackjack_input(user_input)
        else:
            return "Invalid game provided."
    def test_play_options(self):
        game = CrazyEights(4)
        p1 = game.players.get(1)

        p1.clear_hand()
        cards = [
            Card(Rank.THREE, Suit.SPADES),
            Card(Rank.FOUR, Suit.DIAMONDS),
            Card(Rank.JACK, Suit.SPADES)
        ]
        [p1.add_to_hand(card) for card in cards]

        game.discard.append(Card(Rank.TEN, Suit.SPADES))
        card_ops = game.play_options(1)
        self.assertEqual(len(card_ops), 2)
        self.assertTrue(all(card in p1.get_cards() for card in card_ops))
 def test_draw(self):
     game = CrazyEights(2)
     game.draw(1)
     self.assertEqual(len(game.players.get(1).get_cards()), 8)