Exemple #1
0
class TestDeck(unittest.TestCase):
    def setUp(self):
        self.deck = Deck(cardSize=7, cardCount=3, numberMax=100)
        self.deck1 = Deck(0, 0, 0)

    def test_getCardCount(self):
        self.assertNotEqual(self.deck.getCardCount(), 0)
        self.assertEqual(self.deck.getCardCount(), 3)
        self.assertEqual(self.deck1.getCardCount(), 0)

    def test_getCard(self):
        self.assertIsNotNone(self.deck.getCard(1))
        self.assertIsNone(self.deck.getCard(0))
        self.assertIsNone(self.deck1.getCard(1))

        # This requires the students to name their card array __m_cards.
        # .. It also accesses a private member which may not be preferred.
        self.assertIs(self.deck._Deck__m_cards[0], self.deck.getCard(1))
        self.assertIs(self.deck._Deck__m_cards[1], self.deck.getCard(2))
        self.assertIs(self.deck._Deck__m_cards[2], self.deck.getCard(3))
        self.assertIsNot(self.deck._Deck__m_cards[0], self.deck.getCard(2))
        self.assertIsNot(self.deck._Deck__m_cards[1], self.deck.getCard(3))
        self.assertIsNot(self.deck._Deck__m_cards[2], self.deck.getCard(1))
Exemple #2
0
class UserInterface():
    def __init__(self):
        self.__m_currentDeck = None


    def run(self):
        """Present the main menu to the user and repeatedly prompt for a valid command"""
        print("Welcome to the Bingo! Deck Generator\n")
        menu = Menu("Main")
        menu.addOption("C", "Create a new deck")
        
        keepGoing = True
        while keepGoing:
            command = menu.show()
            if command == "C":
                self.__createDeck()
            elif command == "X":
                keepGoing = False


    def __createDeck(self):
        """Command to create a new Deck"""
        # TODO: Get the user to specify the card size, max number, and number of cards
        size = self.__getNumberInput("Card Size: ")
        while size < 3 or size > 15:
            print("That is not a valid size!\n")
            size = self.__getNumberInput("Card Size: ")

        max_num = self.__getNumberInput("\nMax Number: ")
        while max_num < 2*size*size or max_num > 4*size*size:
            print("That is not a valid max number!\n")
            max_num = self.__getNumberInput("Max Number: ")

        num_cards = self.__getNumberInput("\nNumber of Cards: ")
        while num_cards < 3 or num_cards > 10000:
            print("That is not a valid number of cards!\n")
            num_cards = self.__getNumberInput("Number of Cards: ", )
        # TODO: Create a new deck
        self.__m_currentDeck = Deck(size, num_cards, max_num)
        # TODO: Display a deck menu and allow use to do things with the deck
        self.__deckMenu()


    def __deckMenu(self):
        """Present the deck menu to user until a valid selection is chosen"""
        menu = Menu("Deck")
        menu.addOption("P", "Print a card to the screen")
        menu.addOption("D", "Display the whole deck to the screen")
        menu.addOption("S", "Save the whole deck to a file")

        keepGoing = True
        while keepGoing:
            command = menu.show()
            if command == "P":
                self.__printCard()
            elif command == "D":
                print()
                self.__m_currentDeck.print()
            elif command == "S":
                self.__saveDeck()
            elif command == "X":
                keepGoing = False


    def __printCard(self):
        """Command to print a single card"""
        cardToPrint = self.__getNumberInput("Id of card to print: ")#, 1, self.__m_currentDeck.getCardCount())
        if cardToPrint > 0 and cardToPrint <= self.__m_currentDeck.getCardCount():
            print()
            self.__m_currentDeck.print(idx=cardToPrint)
        else:
            print("Can't print card! Invalid card ID!")


    def __saveDeck(self):
        """Command to save a deck to a file"""
        fileName = self.__getStringInput("Enter output file name: ")
        if fileName != "":
            # TODO: open a file and pass to currentDeck.print()
            outputStream = open(fileName, 'w')
            self.__m_currentDeck.print(outputStream)
            outputStream.close()
            print("Done!")

    def __getNumberInput(self, prompt):
        return int(input(prompt))

    def __getStringInput(self, prompt):
        return input(prompt)