示例#1
0
    def __init__(self):
        self.cards = []

        for rank in range(1, 14):
            self.cards.append(Card(rank, "Clubs"))
            self.cards.append(Card(rank, "Hearts"))
            self.cards.append(Card(rank, "Spades"))
            self.cards.append(Card(rank, "Diamonds"))

        random.shuffle(self.cards)
示例#2
0
    def parse(sheet, complexObjects):
        decks = []

        if (sheet.ncols == 1):
            return decks

        current_deck = None
        row = 0
        while row < sheet.nrows:
            if sheet.cell(rowx=row, colx=0).value == 'Deck':
                # a new deck begins
                if current_deck and current_deck.cards:
                    decks.append(current_deck)
                current_deck = Deck(sheet.cell(rowx=row, colx=1).value)
            else:
                # add card to current deck
                try:
                    card = DeckParser.findObject(
                        sheet.cell(rowx=row, colx=0).value, complexObjects)
                    amount = read_number(sheet.cell(rowx=row, colx=1).value)
                except ValueError as e:
                    raise ValueError(
                        str(e) + " (while generating content for " +
                        current_deck.name + ")") from None

                id = current_deck.nextId()
                current_deck.addCard(Card(card, amount, id))
            row += 1

        if current_deck and current_deck.cards:
            decks.append(current_deck)
        return decks
示例#3
0
    def is_sequential(self, ace_high=False) -> bool:
        cards = []

        if ace_high:
            for card in self.cards:
                if card.rank == 1:
                    cards.append(Card(14, card.suit))
                else:
                    cards.append(card)
        else:
            cards = self.cards[:]

        sorted_cards = sorted(cards, key=lambda c: c.rank)

        rank = sorted_cards.pop(0).rank

        for card in sorted_cards:
            rank += 1

            if card.rank != rank:
                return False

        return True
示例#4
0
 def test_points(self, rank, points):
     """test cards ranked 1-14"""
     self.assertEqual(
         Card(rank, Suit.Clubs).points(), points, f"it returns {points}")
示例#5
0
 def test_display_name_with_diamonds(self, rank, name):
     """test cards ranked 1-14 with a suit of diamonds"""
     self.assertEqual(Card(rank, Suit.Diamonds).display_name(), name)
示例#6
0
 def test_display_name_with_hearts(self, rank, name):
     """test cards ranked 1-14 with a suit of hearts"""
     self.assertEqual(Card(rank, Suit.Hearts).display_name(), name)
示例#7
0
 def test_display_name_with_spades(self, rank, name):
     """test cards ranked 1-14 with a suit of spades"""
     self.assertEqual(Card(rank, Suit.Spades).display_name(), name)
示例#8
0
 def test_display_name_with_clubs(self, rank, name):
     """test cards ranked 1-14 with a suit of clubs"""
     self.assertEqual(Card(rank, Suit.Clubs).display_name(), name)
示例#9
0
 def setUp(self):
     self.deck = Deck()
     self.deck.add_card(Card(1, Suit.Clubs))
示例#10
0
class TestDeckPoints(unittest.TestCase):
    @parameterized.expand([
        (Deck([]), 0), (Deck([Card(1, Suit.Clubs)]), 15),
        (Deck([Card(14, Suit.Clubs)]), 15),
        (Deck([Card(1, Suit.Clubs),
               Card(2, Suit.Clubs),
               Card(3, Suit.Clubs)]), 25),
        (Deck([Card(1, Suit.Clubs),
               Card(9, Suit.Clubs),
               Card(10, Suit.Clubs)]), 30),
        (Deck(
            [Card(10, Suit.Clubs),
             Card(11, Suit.Clubs),
             Card(12, Suit.Clubs)]), 30),
        (Deck([Card(2, Suit.Clubs),
               Card(3, Suit.Clubs),
               Card(4, Suit.Clubs)]), 15),
        (Deck([Card(2, Suit.Clubs),
               Card(3, Suit.Clubs),
               Card(13, Suit.Clubs)]), 20)
    ])
    def test_points(self, deck: Deck, points: int):
        self.assertEqual(deck.points(), points)
示例#11
0
 def setUp(self):
     self.deck = Deck()
     # TODO: clearing should not be needed
     self.deck.cards.clear()
     self.deck.add_card(Card(1, Suit.Clubs))
     self.deck.add_card(Card(7, Suit.Hearts))
示例#12
0
def test_deck():
    deck = Deck()
    
    assert Card(Suit.HEARTS, Rank.ACE) in deck
    assert len(deck) == 32
    assert len(set(deck)) == 32
示例#13
0
import pytest
from domain.card import Suit, Rank, Card, CardKey, Deck

@pytest.mark.parametrize("c1, c2, trump, lead_suit", [
    (Card(Suit.HEARTS, Rank.ACE), Card(Suit.HEARTS, Rank.TEN), Suit.SPADES, Suit.HEARTS),
    (Card(Suit.SPADES, Rank.TEN), Card(Suit.HEARTS, Rank.ACE), Suit.SPADES, Suit.HEARTS),
    (Card(Suit.HEARTS, Rank.TEN), Card(Suit.CLUBS, Rank.ACE), Suit.SPADES, Suit.HEARTS),
    (Card(Suit.HEARTS, Rank.TEN), Card(Suit.CLUBS, Rank.ACE), Suit.NO_TRUMPS, Suit.HEARTS),
    (Card(Suit.HEARTS, Rank.TEN), Card(Suit.CLUBS, Rank.ACE), Suit.ALL_TRUMPS, Suit.HEARTS),
    (Card(Suit.SPADES, Rank.JACK), Card(Suit.SPADES, Rank.ACE), Suit.SPADES, Suit.HEARTS),
    (Card(Suit.HEARTS, Rank.ACE), Card(Suit.HEARTS, Rank.JACK), Suit.SPADES, Suit.HEARTS),
    (Card(Suit.HEARTS, Rank.JACK), Card(Suit.HEARTS, Rank.ACE), Suit.ALL_TRUMPS, Suit.HEARTS),
    ])
def test_compare(c1, c2, trump, lead_suit):
    
    key = CardKey(trump, lead_suit)
    
    assert key.key()(c1) > key.key()(c2)


def test_deck():
    deck = Deck()
    
    assert Card(Suit.HEARTS, Rank.ACE) in deck
    assert len(deck) == 32
    assert len(set(deck)) == 32