thinkpad20

progress on freecell game

Apr 4th, 2012
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 6.26 KB | None | 0 0
  1. import random
  2. import numpy
  3.  
  4. class Table(object):
  5.     """The table where FreeCell is played. Consists of 8 CardStacks,
  6.       4 FreeCells and 4 BuildLists. Initialized with a deck of 52 cards."""
  7.     def __init__(self, deck):
  8.         self.deck = deck
  9.         self.stack1 = CardStack()
  10.         self.stack2 = CardStack()
  11.         self.stack3 = CardStack()
  12.         self.stack4 = CardStack()
  13.         self.stack5 = CardStack()
  14.         self.stack6 = CardStack()
  15.         self.stack7 = CardStack()
  16.         self.stack8 = CardStack()
  17.         self.cell1 = FreeCell()
  18.         self.cell2 = FreeCell()
  19.         self.cell3 = FreeCell()
  20.         self.cell4 = FreeCell()
  21.         self.build1 = BuildList()
  22.         self.build2 = BuildList()
  23.         self.build3 = BuildList()
  24.         self.build4 = BuildList()
  25.     def dealCards(self):
  26.         self.stack1.populate(DECK[:7])
  27.         self.stack2.populate(DECK[7:14])
  28.         self.stack3.populate(DECK[14:21])
  29.         self.stack4.populate(DECK[21:28])
  30.         self.stack5.populate(DECK[28:34])
  31.         self.stack6.populate(DECK[34:40])
  32.         self.stack7.populate(DECK[40:46])
  33.         self.stack8.populate(DECK[46:])
  34.     def isGameComplete(self):
  35.         return self.build1.isFull() and self.build2.isFull() and self.build3.isFull() and self.build4.isFull()
  36.     def moveCard(self,source,dest):
  37.         card = source.getTopCard()
  38.         if dest.allowAdd(card):
  39.             source.takeCard()
  40.             dest.addCard(card)
  41.         print self
  42.         if self.isGameComplete():
  43.             print "Game complete! Yay!"
  44.     def __str__(self):
  45.         #stringToReturn = "FreeCells" + cell1.
  46.         return stringToReturn
  47.        
  48.                
  49.            
  50.  
  51. class CardStack(object):
  52.     """An ordered list of cards. Card at the end of the list is available."""
  53.     def __init__(self):
  54.         self.cardList = []
  55.     def populate(self, cardsToAdd):
  56.         self.cardList = cardsToAdd
  57.         print "Added %d cards to list." % len(cardsToAdd)
  58.     def isEmpty(self):
  59.         return len(self.cardList) == 0
  60.     def showCardList(self):
  61.         for card in self.cardList:
  62.             print card
  63.     def getTopCard(self):
  64.         return self.cardList[-1]
  65.     def allowAdd(self, cardToAdd):
  66.         topCard = self.getTopCard()
  67.         return cardToAdd.getColor() != topCard.getColor() and topCard.getNumber() - 1 == cardToAdd.getNumber()
  68.     def addCard(self,card):
  69.         self.cardList.append(card)
  70.     def addCards(self, listOfCards):
  71.         for card in listOfCards:
  72.             self.cardList.append(card)
  73.     def takeCard(self):
  74.         self.pop()
  75.     def takeCards(self, numCards):
  76.         cardsToTransfer = []
  77.         for n in range(numCards):
  78.             cardsToTransfer.append(self.cardList.pop())
  79.         return cardsToTransfer
  80.     def __str__(self):
  81.         if self.cardList == []:
  82.             stringToReturn = "No cards."
  83.         else:
  84.             stringToReturn = ""
  85.             for card in self.cardList:
  86.                 stringToReturn += card.__str__() + "\n"
  87.         return stringToReturn
  88.  
  89. class FreeCell(CardStack):
  90.     """Can contain 1 or 0 cards."""
  91.     def __init__(self):
  92.         CardStack.__init__(self)
  93.     def allowAdd(self):
  94.         return self.isEmpty()
  95.  
  96. class BuildList(CardStack):
  97.     def __init__(self):
  98.         CardStack.__init__(self)
  99.     def allowAdd(self, cardToAdd):
  100.         """Returns true if self can be placed on other in a build list."""
  101.         if self.cardList == [] and cardToAdd.getNumber == 1:
  102.             return True
  103.         else:
  104.             topCard = self.getTopCard()
  105.             return topCard.getSuit() == cardToAdd.getSuit() and topCard.getNumber() + 1 == cardToAdd.getNumber()
  106.     def isFull(self):
  107.         return self.getTopCard().getNumber() == 13
  108.        
  109.  
  110. class Card(object):
  111.     """A card in a standard deck."""
  112.     def __init__(self, number, suit):
  113.         self.number = number
  114.         self.suit = suit
  115.         if self.suit == "Hearts" or self.suit == "Diamonds":
  116.             self.color = "red"
  117.         if self.suit == "Spades" or self.suit == "Clubs":
  118.             self.color = "black"
  119.     def getNumber(self):
  120.         return self.number
  121.     def getColor(self):
  122.         return self.color
  123.     def getSuit(self):
  124.         return self.suit
  125.     def __str__(self):
  126.         if self.number < 11 and self.number > 1:
  127.             stringToReturn = str(self.number) + " of " + self.suit
  128.         else:
  129.             if self.number == 1:
  130.                 stringToReturn = "Ace"
  131.             if self.number == 11:
  132.                 stringToReturn = "Jack"
  133.             if self.number == 12:
  134.                 stringToReturn = "Queen"
  135.             if self.number == 13:
  136.                 stringToReturn = "King"
  137.             stringToReturn += " of " + self.suit
  138.         return stringToReturn
  139.  
  140. S1 = Card(1,"Spades")
  141. S2 = Card(2,"Spades")
  142. S3 = Card(3,"Spades")
  143. S4 = Card(4,"Spades")
  144. S5 = Card(5,"Spades")
  145. S6 = Card(6,"Spades")
  146. S7 = Card(7,"Spades")
  147. S8 = Card(8,"Spades")
  148. S9 = Card(9,"Spades")
  149. S10 = Card(10,"Spades")
  150. S11 = Card(11,"Spades")
  151. S12 = Card(12,"Spades")
  152. S13 = Card(13,"Spades")
  153. H1 = Card(1,"Hearts")
  154. H2 = Card(2,"Hearts")
  155. H3 = Card(3,"Hearts")
  156. H4 = Card(4,"Hearts")
  157. H5 = Card(5,"Hearts")
  158. H6 = Card(6,"Hearts")
  159. H7 = Card(7,"Hearts")
  160. H8 = Card(8,"Hearts")
  161. H9 = Card(9,"Hearts")
  162. H10 = Card(10,"Hearts")
  163. H11 = Card(11,"Hearts")
  164. H12 = Card(12,"Hearts")
  165. H13 = Card(13,"Hearts")
  166. C1 = Card(1,"Clubs")
  167. C2 = Card(2,"Clubs")
  168. C3 = Card(3,"Clubs")
  169. C4 = Card(4,"Clubs")
  170. C5 = Card(5,"Clubs")
  171. C6 = Card(6,"Clubs")
  172. C7 = Card(7,"Clubs")
  173. C8 = Card(8,"Clubs")
  174. C9 = Card(9,"Clubs")
  175. C10 = Card(10,"Clubs")
  176. C11 = Card(11,"Clubs")
  177. C12 = Card(12,"Clubs")
  178. C13 = Card(13,"Clubs")
  179. D1 = Card(1,"Diamonds")
  180. D2 = Card(2,"Diamonds")
  181. D3 = Card(3,"Diamonds")
  182. D4 = Card(4,"Diamonds")
  183. D5 = Card(5,"Diamonds")
  184. D6 = Card(6,"Diamonds")
  185. D7 = Card(7,"Diamonds")
  186. D8 = Card(8,"Diamonds")
  187. D9 = Card(9,"Diamonds")
  188. D10 = Card(10,"Diamonds")
  189. D11 = Card(11,"Diamonds")
  190. D12 = Card(12,"Diamonds")
  191. D13 = Card(13,"Diamonds")
  192.  
  193. 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]
  194.  
  195. print len(DECK), "cards in deck."
  196. random.shuffle(DECK)
  197. print "Deck has been shuffled."
  198. c1 = CardStack()
Add Comment
Please, Sign In to add comment