import random def main(): class Card: # makes Card objects. For deck generation. def __init__(self, value, suit, number, isTrump): self.value = value self.suit = suit self.number = number self.isTrump = isTrump def setTrump(self): self.isTrump = True def setValue(self, value): self.value = value class Deck: # generates deck. This implementatior requires a new deck to be generated per round def __init__(self): self.cards = [] for i in [2,3,4,5,6,7,8,9,10,11,12,13,14]: for j in ["heart", "diamond", "spade", "club"]: card = Card(i,j,i,False) self.cards.append(card) bigjoker = Card(18,"trump", 18, True) smalljoker = Card(17,"trump", 17, True) self.cards += [smalljoker,bigjoker] ### Code later: Player count determines number of decks. int(playernum/2) = decknum deck1 = Deck() deck2 = Deck() deck3 = Deck() testdeck3 = deck1.cards + deck2.cards +deck3.cards def setTrump(deck, suit, number): for i in range(len(deck)): # sets high trump number value to 16 if deck[i].suit == suit and deck[i].number == number: deck[i].setTrump() # sets high trump value to 16, below the small joker (17) deck[i].setValue(16) # sets low trump number value to 15 (above Ace (14)) elif deck[i].suit != suit and deck[i].number == number: deck[i].setTrump() deck[i].setValue(15) # sets non-trump number trumps to trump status True elif deck[i].suit == suit and deck[i].number != number: deck[i].setTrump() # Adds 1 to values of numbers below trump number so that they are consecutive with # numbers above the trump value. eg: 4 is trump, this makes 3 and 5 consecutive by # changing 3'ss value to 4. 2 is changed to 3 to make 2 consecutive with 3's new value. if deck[i].number < number: deck[i].setValue(deck[i].value+1) # same as above but for non-trumps. else: if deck[i].number < number: deck[i].setValue(deck[i].value+1) ### Test code for setTrump() # print "setTrump test:" # setTrump(testdeck3, "heart", 4) # print "Trump suit: heart" # for k in testdeck3: # if k.isTrump == True: # print k.number, k.suit, k.value, k.isTrump # print "Trump value cards: 4" # for m in testdeck3: # if m.number < 4: # print m.number, m.suit, m.value, m.isTrump ### Sample hand generator function for 7 person game: 22 cards per player, 8 cards in the bottom ### Actual dealing function should deal one card at a time to each hand. # def dealhand(deck): # hand = [] # for i in range(22): # newcard = random.choice(deck) # hand.append(newcard) # deck.remove(newcard) # return hand # hand1 = dealhand(testdeck3) # print len(testdeck3) # print "Hand: \n" # for i in hand1: # print i.number, i.suit, i.value, i.isTrump ### Starting player picks any single, pair, triple, or tractor. ### Starting play check for suits/trumps if they match within the move/play. # Note to self, need to sort "cards" first by value def suitCheck(cards): # cards is a list of Card objects if len(cards)<1: # move has to be at least one card to be valid return False, "less than 1 card" elif len(cards)==1: # 1 card is always a valid starting move return True, "1 card" else: # multiple cards # Suit Check. Needs a trump check too because trump status is separate. # better solutions? for i in range(len(cards)-1): if cards[i].isTrump != cards[i+1].isTrump: return False, "Trump and non-trump" print "why no work" elif cards[i].isTrump == cards[i+1].isTrump and cards[i].isTrump == False: if cards[i].suit != cards[i+1].suit: return False, "both non-trumps, not same suit" if cards[0].isTrump == cards[1].isTrump and cards[0].isTrump == True: return True, "trump" else: return True, cards[0].suit # # test suitCheck: suit/trump match check # card1 = Card(3, "heart", 3, False) # card2 = Card(4, "heart", 4, False) # card3 = Card(2, "heart", 15, True) # card4 = Card(2, "spade", 16, True) # card5 = Card(3, "spade", 3, True) # card6 = Card(3, "club", 3, False) # testhand = [card1, card2, card3, card4, card5, card6] # print "Test case 0: obviously invalid play" # print suitCheck(testhand) # for i in testhand: # print i.suit, i.isTrump # print "\n" # print "Test case 1: all nontrumps, same suit" # print suitCheck([card1, card2]) # for i in [card1, card2]: # print i.suit, i.isTrump # print "\n" # print "Test case 2: all trumps, same suit" # print suitCheck([card5, card4]) # for i in [card5, card4]: # print i.suit, i.isTrump, # print "\n" # print "Test case 3: all nontrumps, different suit" # print suitCheck([card1, card6]) # for i in [card1, card6]: # print i.suit, i.isTrump # print "\n" # print "Test case 4: all trumps, different suit" # print suitCheck([card3, card4]) # for i in [card3, card4]: # print i.suit, i.isTrump # print "\n" # print "Test case 5: trump and nontrump, same suit" # print suitCheck([card2, card3]) # for i in [card2, card3]: # print i.suit, i.isTrump # print "\n" # print "Test case 6: trump and nontrump, different suit" # print suitCheck([card2, card4]) # for i in [card2, card4]: # print i.suit, i.isTrump # print "\n" ### Value check: for n>1, see if all values are the same. If not, do tractor check. # for i in len(cards): # if cards[i].value != cards[i+1].value: #TRACTOR CHECK FUCK # pairs/triples/etc # else: # return True, "pair, triple, etc" main()
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question