Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import random
- import numpy
- class Table(object):
- """The table where FreeCell is played. Consists of 8 CardStacks,
- 4 FreeCells and 4 BuildLists. Initialized with a deck of 52 cards."""
- def __init__(self, deck):
- self.deck = deck
- self.stack1 = CardStack()
- self.stack2 = CardStack()
- self.stack3 = CardStack()
- self.stack4 = CardStack()
- self.stack5 = CardStack()
- self.stack6 = CardStack()
- self.stack7 = CardStack()
- self.stack8 = CardStack()
- self.cell1 = FreeCell()
- self.cell2 = FreeCell()
- self.cell3 = FreeCell()
- self.cell4 = FreeCell()
- self.build1 = BuildList()
- self.build2 = BuildList()
- self.build3 = BuildList()
- self.build4 = BuildList()
- def dealCards(self):
- self.stack1.populate(DECK[:7])
- self.stack2.populate(DECK[7:14])
- self.stack3.populate(DECK[14:21])
- self.stack4.populate(DECK[21:28])
- self.stack5.populate(DECK[28:34])
- self.stack6.populate(DECK[34:40])
- self.stack7.populate(DECK[40:46])
- self.stack8.populate(DECK[46:])
- def isGameComplete(self):
- return self.build1.isFull() and self.build2.isFull() and self.build3.isFull() and self.build4.isFull()
- def moveCard(self,source,dest):
- card = source.getTopCard()
- if dest.allowAdd(card):
- source.takeCard()
- dest.addCard(card)
- print self
- if self.isGameComplete():
- print "Game complete! Yay!"
- def __str__(self):
- #stringToReturn = "FreeCells" + cell1.
- return stringToReturn
- class CardStack(object):
- """An ordered list of cards. Card at the end of the list is available."""
- def __init__(self):
- self.cardList = []
- def populate(self, cardsToAdd):
- self.cardList = cardsToAdd
- print "Added %d cards to list." % len(cardsToAdd)
- def isEmpty(self):
- return len(self.cardList) == 0
- def showCardList(self):
- for card in self.cardList:
- print card
- def getTopCard(self):
- return self.cardList[-1]
- def allowAdd(self, cardToAdd):
- topCard = self.getTopCard()
- return cardToAdd.getColor() != topCard.getColor() and topCard.getNumber() - 1 == cardToAdd.getNumber()
- def addCard(self,card):
- self.cardList.append(card)
- def addCards(self, listOfCards):
- for card in listOfCards:
- self.cardList.append(card)
- def takeCard(self):
- self.pop()
- def takeCards(self, numCards):
- cardsToTransfer = []
- for n in range(numCards):
- cardsToTransfer.append(self.cardList.pop())
- return cardsToTransfer
- def __str__(self):
- if self.cardList == []:
- stringToReturn = "No cards."
- else:
- stringToReturn = ""
- for card in self.cardList:
- stringToReturn += card.__str__() + "\n"
- return stringToReturn
- class FreeCell(CardStack):
- """Can contain 1 or 0 cards."""
- def __init__(self):
- CardStack.__init__(self)
- def allowAdd(self):
- return self.isEmpty()
- class BuildList(CardStack):
- def __init__(self):
- CardStack.__init__(self)
- def allowAdd(self, cardToAdd):
- """Returns true if self can be placed on other in a build list."""
- if self.cardList == [] and cardToAdd.getNumber == 1:
- return True
- else:
- topCard = self.getTopCard()
- return topCard.getSuit() == cardToAdd.getSuit() and topCard.getNumber() + 1 == cardToAdd.getNumber()
- def isFull(self):
- return self.getTopCard().getNumber() == 13
- class Card(object):
- """A card in a standard deck."""
- def __init__(self, number, suit):
- self.number = number
- self.suit = suit
- if self.suit == "Hearts" or self.suit == "Diamonds":
- self.color = "red"
- if self.suit == "Spades" or self.suit == "Clubs":
- self.color = "black"
- def getNumber(self):
- return self.number
- def getColor(self):
- return self.color
- def getSuit(self):
- return self.suit
- def __str__(self):
- if self.number < 11 and self.number > 1:
- stringToReturn = str(self.number) + " of " + self.suit
- else:
- if self.number == 1:
- stringToReturn = "Ace"
- if self.number == 11:
- stringToReturn = "Jack"
- if self.number == 12:
- stringToReturn = "Queen"
- if self.number == 13:
- stringToReturn = "King"
- stringToReturn += " of " + self.suit
- return stringToReturn
- S1 = Card(1,"Spades")
- S2 = Card(2,"Spades")
- S3 = Card(3,"Spades")
- S4 = Card(4,"Spades")
- S5 = Card(5,"Spades")
- S6 = Card(6,"Spades")
- S7 = Card(7,"Spades")
- S8 = Card(8,"Spades")
- S9 = Card(9,"Spades")
- S10 = Card(10,"Spades")
- S11 = Card(11,"Spades")
- S12 = Card(12,"Spades")
- S13 = Card(13,"Spades")
- H1 = Card(1,"Hearts")
- H2 = Card(2,"Hearts")
- H3 = Card(3,"Hearts")
- H4 = Card(4,"Hearts")
- H5 = Card(5,"Hearts")
- H6 = Card(6,"Hearts")
- H7 = Card(7,"Hearts")
- H8 = Card(8,"Hearts")
- H9 = Card(9,"Hearts")
- H10 = Card(10,"Hearts")
- H11 = Card(11,"Hearts")
- H12 = Card(12,"Hearts")
- H13 = Card(13,"Hearts")
- C1 = Card(1,"Clubs")
- C2 = Card(2,"Clubs")
- C3 = Card(3,"Clubs")
- C4 = Card(4,"Clubs")
- C5 = Card(5,"Clubs")
- C6 = Card(6,"Clubs")
- C7 = Card(7,"Clubs")
- C8 = Card(8,"Clubs")
- C9 = Card(9,"Clubs")
- C10 = Card(10,"Clubs")
- C11 = Card(11,"Clubs")
- C12 = Card(12,"Clubs")
- C13 = Card(13,"Clubs")
- D1 = Card(1,"Diamonds")
- D2 = Card(2,"Diamonds")
- D3 = Card(3,"Diamonds")
- D4 = Card(4,"Diamonds")
- D5 = Card(5,"Diamonds")
- D6 = Card(6,"Diamonds")
- D7 = Card(7,"Diamonds")
- D8 = Card(8,"Diamonds")
- D9 = Card(9,"Diamonds")
- D10 = Card(10,"Diamonds")
- D11 = Card(11,"Diamonds")
- D12 = Card(12,"Diamonds")
- D13 = Card(13,"Diamonds")
- DECK = [S1,S2,S3,S4,S5,S6,S7,S8,S9,S10,S11,S12,S13,H1,H2,H3,H4,H5,H6,H7,H8,H9,H10,H11,H12,H13,C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,D1,D2,D3,D4,D5,D6,D7,D8,D9,D10,D11,D12,D13]
- print len(DECK), "cards in deck."
- random.shuffle(DECK)
- print "Deck has been shuffled."
- c1 = CardStack()
Add Comment
Please, Sign In to add comment