class Rules(Game): """Rules for the game of 500""" def __init__(self): super(Rules, self).__init__() self.deckStyle = 'French' self.deck = Deck(self.deckStyle) print self.deck self.playerLimit = [4] self.gameLimit = 0 self.roundLimit = 0 self.handLimit = 0 def deck(self): for cards in [(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3),(0,4),(1,4)]: card = Card(self.deckStyle, cards[0], cards[1]) self.deck.remove(card) def dealing(self, players): for player in range(self.playerLimit): return player
class Rules(Game): """Rules for the game of Oh Hell!""" def __init__(self): self.deckStyle = 'French' self.deck = Deck(self.deckStyle) self.playerLimit = [3,4,5,6,7] self.handLimit = [11,13,15,17,19,21,23] super(Rules, self).__init__() self.handCounter = 0 self.hands = [Hand(n, self.handLimit) for n in range(self.handLimit)] def limitHands(self): i = 1 while self.playerLimit * i < len(self.deck.cards): print i i = i + 1 # pass self.handLimit = 'xx' def setupDeck(self): for cards in [(0,2),(1,2),(2,2),(3,2),(0,3),(1,3),(2,3),(3,3),(0,4),(1,4)]: card = Card(self.deckStyle, cards[0], cards[1]) self.deck.remove(card) def deal(self): self.setupDeck() self.deck.shuffle() cards = self.deck.cards for player in self.players: for n in range(self.hands[self.handCounter].cardLimit): player.hand.append(cards.pop()) for player in self.players: print str(player), ':' holding = u"" for card in player.hand: holding = holding + card.__unicode__() + ' ' print holding print '\n\n\n'
class Player(): def __init__(self, name): self.name = name self.hand = Deck() self.pile = Deck() self.money = 0 self.discard = Deck() self.startDeck() self.drawHand() self.actions = 1 self.buys = 1 def endTurn(self): for card in reversed(self.hand.deck): self.discard.add(card) self.hand.remove(card) self.drawHand() self.actions = 1 self.buys = 1 self.money = 0 def emptyDiscard(self): for card in reversed(self.discard.deck): self.pile.add(card) self.discard.remove(card) self.pile.shuffle() def drawCardPile(self): if len(self.pile.deck) == 0: self.emptyDiscard() self.hand.add(self.pile.drawCard()) def addMoney(self, value): self.money = self.money + value def drawHand(self): '''since you start with 10 cards you should never have less than 5 cards''' for _x in range(5): if len(self.pile.deck) == 0: self.emptyDiscard() self.drawCardPile() for card in self.hand.deck: if card.kind == "T": self.addMoney(card.value) def startDeck(self): '''Each player will start with 7 copper and 3 estates ''' for _x in range(7): self.pile.add(copy.deepcopy(cards.copper)) for _x in range(3): self.pile.add(copy.deepcopy(cards.estate)) self.pile.shuffle() def finalScore(self): score = 0 decks = [self.pile.deck, self.discard.deck, self.hand.deck] for pile in decks: for card in pile: if card.kind == "V": if card.name == "Gardens": score += int((self.pile.size + self.discard.size + self.hand.size)/10) else: score += card.value return score
import time from cards import make_hand, Hand, Deck, best_score start = time.clock() h1 = make_hand("Qc, Qs, Td, 5c") h2 = make_hand("Qh, Th, 7s, 2c") base_deck = Deck() for card in h1: base_deck.remove(card) for card in h2: base_deck.remove(card) base_cards = base_deck.cards wins = 0 for i in range(10000): deck = Deck(initial=base_cards) board = Hand( [deck.deal(), deck.deal(), deck.deal(), deck.deal(), deck.deal()]) if (best_score(h1, board) >= best_score(h2, board)): wins += 1 print(wins / 10000.0) end = time.clock() print("Completed in {}".format(end - start))