예제 #1
0
class TestDeck(unittest.TestCase):
    def setUp(self):
        self.deck = Deck()

    def test_is_constructed(self):
        self.assertIsInstance(self.deck, Deck)
        self.assertTrue(len(self.deck.cards), 52)

    def test_card_draw(self):
        self.assertIsInstance(self.deck.draw(), Card)

    def test_discard(self):
        card = self.deck.draw()
        self.deck.discard(card)
        self.assertTrue(len(self.deck.discard_pile), 1)

    def test_deck_reshuffled_if_all_cards_drawn(self):
        # draw and discard all cards
        for i in range(52):
            card = self.deck.draw()
            self.deck.discard(card)

        # draw initiates reshuffle
        card = self.deck.draw()
        self.deck.discard(card)
        self.assertEqual(len(self.deck.cards), 51)
        self.assertEqual(len(self.deck.discard_pile), 1)
예제 #2
0
class BlackJack:
    def __init__(self):
        self.deck = Deck()
        self.players = [Dealer(), Player()]
        self.max_players = max_players

    def add_player(self, player):
        if len(self.players) <= 8:
            raise TooManyPlayers

        self.players.append(player)

    def initial_deal(self):
        self.deck.shuffle()
        self.deck.cut()

    def deal(self):
        for player in players:
            player.hand.add_card(self.deck.draw())
예제 #3
0
class Game():
    def __init__(self,
                 gameid,
                 draw_pile=None,
                 players=[],
                 game_board=[],
                 prev_turn=[]):
        if not draw_pile:
            self.draw_pile = Deck()
            self.draw_pile.shuffle()
        else:
            self.draw_pile = draw_pile

        self.players = players
        self.game_board = game_board
        self.id = gameid
        self.prev_turn = prev_turn

    def deal_start(self):
        """
        deals the cards for the start of the game
        @return: tuple( hand:3Card deck table: 4 card Deck)
        """
        hand = Deck([])
        table = Deck([])
        for i in range(0, 3):
            hand.cards.append(self.draw_pile.draw())
        for i in range(0, 4):
            table.cards.append(self.draw_pile.draw())
        return (hand, table)

    def deal(self):
        """
        deals a card if permitted
        @return: None if there are no Cards, a Card off the top of the deck otherwise
        """
        if self.draw_pile.deck_length == 0:
            return None
        return self.draw_pile.draw()

    def join(self, player_user):
        """
        adds a player to the game
        @param: players username
        @return: False if player exists, True otherwise
        """
        if player_user in self.players:
            return False
        self.players.append(player_user)
        return True

    def burn_deck(self):
        """
        gets rid of the current game stack
        """
        self.game_board = []

    def process_turn(self, turn):
        """
        process turn for player
        @param: player_user: the username for the player
        @param: turn: the list of Cards submitted for a players turn
        @return: False if the turn couln't be processed, True otherwise
        """
        if len(turn) == 0:
            return False
        for card in turn:
            self.game_board.append(card)
        player = self.players.pop()
        self.players = [player] + self.players
        if len(self.game_board) > 3:
            if self.game_board[-1].rank == self.game_board[
                    -2].rank == self.game_board[-3].rank == self.game_board[
                        -4].rank:
                self.burn_deck()
        return True
예제 #4
0
from card import Deck, Player

deck = Deck()
cardInPlay = None
players = []
currentPlayerIndex = 0
direction = 1
skipMod = 1

for n in range(4):
    players.append(Player(n))

for m in range(7):
    players[0].addToHand(deck.draw())
    players[1].addToHand(deck.draw())
    players[2].addToHand(deck.draw())
    players[3].addToHand(deck.draw())

cardInPlay = deck.draw()

winner = False

def nextPlayerHandler():
    global currentPlayerIndex, skipMod, direction

    num = currentPlayerIndex + direction * skipMod

    if num > 3:
        return num - 4
    elif num < 0:
        return num + 4