Ejemplo n.º 1
0
 def build_deck(self, cards):
     deck = Deck()
     for card in cards:
         if card is None:
             card = Card()
         deck.add_card(card)
     return deck
Ejemplo n.º 2
0
def main():
    # create window for uno
    root = tk.Tk()
    root.title("Uno++")

    # build a list of players for the game
    players = [
        HumanPlayer("Ravi"),
        HumanPlayer(generate_name()),
        ComputerPlayer(generate_name())
    ]

    # build a pickup pile
    pickup_pile = Deck(build_deck(FULL_DECK))
    pickup_pile.shuffle()

    # deal players cards from the pickup pile
    for player in players:
        cards = pickup_pile.pick(7)
        player.get_deck().add_cards(cards)

    # create and play the game
    game = UnoGame(pickup_pile, players)
    app = UnoApp(root, game)
    app.play()

    # update window dimensions
    root.update()
    root.minsize(root.winfo_width(), root.winfo_height())
    root.mainloop()
Ejemplo n.º 3
0
def main():
    # create window for coders
    root = tk.Tk()
    root.title("Sleeping Coders")

    # build a list of players for the game
    players = [Player(generate_name()), Player(generate_name())]

    # build a pickup pile
    pickup_pile = Deck(build_deck(FULL_DECK))
    for i in range(5):
        pickup_pile.copy(pickup_pile)
    pickup_pile.shuffle()

    # deal players cards from the pickup pile
    for player in players:
        cards = pickup_pile.pick(5)
        player.get_hand().add_cards(cards)

    # build a list of sleeping coder cards
    coders = CODERS[:]

    # create and play the game
    game = CodersGame(pickup_pile, coders, players)
    app = CoderApp(root, game)
    app.play()

    # update window dimensions
    root.update()
    root.minsize(root.winfo_width(), root.winfo_height())
    root.mainloop()
Ejemplo n.º 4
0
    def __init__(self, deck, players):
        """
        Construct a game of uno from a pickup pile and list of players.

        Parameters:
            deck (Deck): The pile of cards to pickup from.
            players (list<Player>): The players in this game of uno.
        """
        self.pickup_pile = deck
        self.players = players

        self._turns = TurnManager(players)

        self.putdown_pile = Deck(self.pickup_pile.pick())
        self.special_pile = Deck()

        self._is_over = False
        self.winner = None
Ejemplo n.º 5
0
    def new_game(self):
        """Start a new game"""
        # clone the old players
        players = []
        for player in self.game.players:
            players.append(player.__class__(player.get_name()))

        # generate a new deck
        pickup_pile = Deck(build_deck(FULL_DECK))
        pickup_pile.shuffle()

        # make players pickup cards
        for player in players:
            cards = pickup_pile.pick(7)
            player.get_deck().add_cards(cards)

        self.game = UnoGame(pickup_pile, players)
        self.render_decks()
        self.update()
Ejemplo n.º 6
0
    def __init__(self, deck, coders, players):
        """
        Construct a game of Sleeping Coders from a pickup pile, a list of coder
        cards and a list of players.

        Parameters:
            deck (Deck): The pile of cards to pickup from.
            coders (List<Card>): The list of sleeping coder cards.
            players (list<Player>): The players in this game.
        """
        self._pickup_pile = deck
        self._coders = coders
        self.players = players

        self._turns = TurnManager(players)

        self.putdown_pile = Deck()

        self._is_over = False
        self.winner = None

        self._action = None
Ejemplo n.º 7
0
def init():
    anna = ComputerPlayer("Anna Truffet")

    players = [
        anna,
        HumanPlayer("Henry O'Brien"),
        ComputerPlayer("Josh Arnold")
    ]

    deck = Deck(
        [Card(1, "red"),
         Card(2, "blue"),
         Card(3, "red"),
         Card(4, "green")])

    game = UnoGame(deck, players)

    return anna, players, deck, game
Ejemplo n.º 8
0
class UnoGame:
    """
    A game of Uno++.
    """
    def __init__(self, deck, players):
        """
        Construct a game of uno from a pickup pile and list of players.

        Parameters:
            deck (Deck): The pile of cards to pickup from.
            players (list<Player>): The players in this game of uno.
        """
        self.pickup_pile = deck
        self.players = players

        self._turns = TurnManager(players)

        self.putdown_pile = Deck(self.pickup_pile.pick())
        self.special_pile = Deck()

        self._is_over = False
        self.winner = None

    def next_player(self):
        """
        Changes to the next player in the game and returns an instance of them.

        Returns:
            (Player): The next player in the game.
        """
        return self._turns.next()

    def current_player(self):
        """
        (Player) Returns the player whose turn it is currently.
        """
        return self._turns.current()

    def skip(self):
        """Prevent the next player from taking their turn."""
        self._turns.skip()

    def reverse(self):
        """Transfer the turn back to the previous player and reverse the order."""
        self._turns.reverse()

    def get_turns(self):
        """(TurnManager) Returns the turn manager for this game."""
        return self._turns

    def is_over(self):
        """
        (bool): True iff the game has been won. Assigns the winner variable.
        """
        for player in self.players:
            if player.has_won():
                self.winner = player
                self._is_over = True

        return self._is_over

    def select_card(self, player, card):
        """Perform actions for a player selecting a card

        Parameters:
            player (Player): The selecting player.
            card (Card): The card to select.
        """
        card.play(player, self)
        if card.__class__ in SPECIAL_CARDS:
            self.special_pile.add_card(card)
        else:
            self.putdown_pile.add_card(card)

    def take_turn(self, player):
        """
        Takes the turn of the given player by having them select a card.

        Parameters:
            player (Player): The player whose turn it is.
        """
        card = player.pick_card(self.putdown_pile)

        if card is None:
            player.get_deck().add_cards(self.pickup_pile.pick())
            return

        if card.matches(self.putdown_pile.top()):
            self.select_card(player, card)

    def take_turns(self):
        """
        Plays an entire round by taking the turn for each player in the game.
        """
        for player in self.players:
            self.take_turn(player)

            if player.has_won():
                return
Ejemplo n.º 9
0
class CodersGame:
    """
    A game of Sleeping Coders.
    """
    def __init__(self, deck, coders, players):
        """
        Construct a game of Sleeping Coders from a pickup pile, a list of coder
        cards and a list of players.

        Parameters:
            deck (Deck): The pile of cards to pickup from.
            coders (List<Card>): The list of sleeping coder cards.
            players (list<Player>): The players in this game.
        """
        self._pickup_pile = deck
        self._coders = coders
        self.players = players

        self._turns = TurnManager(players)

        self.putdown_pile = Deck()

        self._is_over = False
        self.winner = None

        self._action = None

    def get_pickup_pile(self):
        """(Deck): Returns the pickup file of a game."""
        return self._pickup_pile

    def get_sleeping_coders(self):
        """(List[Card]): Returns the list of coders who are still asleep in the game."""
        return self._coders

    def get_sleeping_coder(self, slot):
        """(Card): Returns the sleeping coder card at the given slot.

        Parameters:
            slot (int): The slot within the sleeping coders collection to get.
        """
        return self._coders[slot]

    def set_sleeping_coder(self, slot, card):
        """Set the coder at the given slot in the sleeping coders collection

        Parameters:
            slot (int): The slot within the sleeping coders collection to set.
            card (Card): The card to place in the given slot.
        """
        self._coders[slot] = card

    def pick_card(self, blocked_classes=()):
        """
        Pick a the first card from the pickup pile that is not an instance of
        any of the classes in the blocked_classes.

        Parameters:
            blocked_classes (tuple<Card>): The classes that the card cannot be
                                           an instance of.

        Returns:
            (List[Card]): The card picked from the top of the pickup pile.
        """
        while True:
            picked_card = self._pickup_pile.pick()

            if not any((isinstance(picked_card, card_class)
                        for card_class in blocked_classes)):
                return picked_card

    def next_player(self):
        """
        Changes to the next player in the game and returns an instance of them.

        Returns:
            (Player): The next player in the game.
        """
        return self._turns.next()

    def current_player(self):
        """
        (Player) Returns the player whose turn it is currently.
        """
        return self._turns.current()

    def skip(self):
        """Prevent the next player from taking their turn."""
        self._turns.skip()

    def reverse(self):
        """Transfer the turn back to the previous player and reverse the order."""
        self._turns.reverse()

    def get_turns(self):
        """(TurnManager) Returns the turn manager for this game."""
        return self._turns

    def is_over(self):
        """
        (bool): True iff the game has been won. Assigns the winner variable.
        """
        if self._pickup_pile.get_amount() == 0:
            return True

        for player in self.players:
            if player.has_won():
                self.winner = player
                self._is_over = True

        return self._is_over

    def select_card(self, player, card):
        """Perform actions for a player selecting a card

        Parameters:
            player (Player): The selecting player.
            card (Card): The card to select.
        """
        card.play(player, self)
        self.putdown_pile.add_card(card)

    def get_action(self):
        """
        Get the current action being performed.
        """
        return self._action

    def set_action(self, action):
        """
        Set the current action being performed to action.

        Possible Actions:
            NO_ACTION: No action is being performed.
            PICKUP_CODER: Tutor card played to pickup a coder.
            STEAL_CODER: Keyboard Kidnapper played to steal another players coder.
            SLEEP_CODER: All-nighter played to put another players coder to sleep.

        Parameters:
            action (str): The current action.
        """
        self._action = action

    def get_last_card(self):
        """
        (Card): Get the last card that was played.
        """
        return self.putdown_pile.top()
Ejemplo n.º 10
0
print('-' * 5)

print('card.matchs(spical_card)')
print(card.matches(special_card))
print('-' * 5)

blue_card = ReverseCard(0, "blue")

print('special_card.matches(blue_card)')
print(special_card.matches(blue_card))
print('-' * 5)
print('*' * 40)

# Deck
cards = [card, special_card, blue_card]
deck = Deck(cards)

print('deck.get_cards()')
print(deck.get_cards())
print('-' * 5)
print('deck.get_amount()')
print(deck.get_amount())
print('-' * 5)
print('deck.top()')
print(deck.top())
print('-' * 5)
new_card = SkipCard(0, "green")
deck.add_card(new_card)
from os import system
system('pause')
deck.add_cards([card, special_card, blue_card])
Ejemplo n.º 11
0
def test_deck():
    # Setup
    card = Card(12, "red")
    special_card = Pickup2Card(0, "red")
    blue_card = ReverseCard(0, "blue")
    cards = [card, special_card, blue_card]
    deck = Deck(cards)

    # Testing
    print("Get Cards:", deck.get_cards(
    ))  #== [Card(12, 'red'), Pickup2Card(0, 'red'), ReverseCard(0, 'blue')])
    print("Amount:", deck.get_amount() == 3)

    print("Top:", deck.top())  #ReverseCard(0, blue)

    print()
    new_card = SkipCard(0, "green")
    deck.add_card(new_card)
    deck.add_cards([card, special_card, blue_card])
    print("new amount:", deck.get_amount() == 7)

    print(
        "New Deck:", deck.get_cards()
    )  # [Card(12, red), Pickup2Card(0, red), ReverseCard(0, blue), SkipCard(0, green), Card(12, red), Pickup2Card(0, red),ReverseCard(0, blue)])

    print("Pick:", deck.pick())  # [ReverseCard(0, blue)]
    print("Pick 2:",
          deck.pick(amount=2))  # [Pickup2Card(0, red), Card(12, red)]
    deck.shuffle()
    print(
        "New Deck", deck.get_cards()
    )  #[SkipCard(0, green), Card(12, red), Pickup2Card(0, red),ReverseCard(0, blue)]
Ejemplo n.º 12
0
from a2 import Card, Player, Pickup2Card, Pickup4Card, HumanPlayer, ComputerPlayer, Deck, ReverseCard, SkipCard
import a2_support

# Set Up Uno Game
anna = ComputerPlayer("Anna Truffet")
players = [anna, HumanPlayer("Henry O'Brien"), ComputerPlayer("Josh Arnold")]

deck = Deck(
    [Card(1, "red"),
     Card(2, "blue"),
     Card(3, "red"),
     Card(4, "green")])

game = a2_support.UnoGame(deck, players)


def test_reverse_card():
    print("reverse", '*' * 10)
    card = ReverseCard(0, "red")
    print(game.current_player().get_name())
    # 'Anna Truffet'
    print(game.next_player().get_name())
    # "Henry O'Brien"
    print(game.next_player().get_name())
    # 'Josh Arnold'
    print(game.next_player().get_name())
    # 'Anna Truffet'
    print("Reverse", '-' * 10)
    card.play(anna, game)
    print(game.next_player().get_name())
    # 'Josh Arnold'
Ejemplo n.º 13
0
from a2 import Pickup2Card, Card, ReverseCard, SkipCard, ComputerPlayer, HumanPlayer, Pickup4Card
from a2 import Deck
import a2_support

card = Card(42, "red")

special_card = Pickup2Card(0, "red")

blue_card = ReverseCard(0, "blue")

cards = [card, special_card, blue_card]

new_card = SkipCard(0, "green")

deck = Deck(cards)
anna = ComputerPlayer("Anna")
players = [anna, HumanPlayer("Henry"), ComputerPlayer("john")]

game = a2_support.UnoGame(deck, players)

for i in game.players:
    print(i.get_name())
    print(i.get_deck().get_cards())

special_card.play(anna, game)

for i in game.players:
    print(i)
    print(i.get_name())
    print(i.get_deck().get_cards())
    print(id(i.get_deck().get_cards()))