class Game: def __init__(self): self.eliminatedPlayers = [] ##check if eliminated, check if p1.hasTurn self.removedCards = [] self.currentStack = LinkList() self.players = [] #arranged by card rank self.deck = None self.currTurn = 0 self.sevenflag = None #high or low def addPlayer(self, p): #how many players? -- 2-4? #add players in as they join the server self.players.append(Player(p)) def start(self): self.deck = Deck() self.deck.shuffle() #deal out 9 cards to each player for p in self.players: count = 0 while count < 9: if count <= 2: p.hiddenStack.add(self.deck.draw()) else: p.hand.add(self.deck.draw()) count += 1 self.players[0].shownStack.add(self.players[0].hand.removeHead()) self.players[0].shownStack.add(self.players[0].hand.removeHead()) self.players[0].shownStack.add(self.players[0].hand.removeHead()) self.players[1].shownStack.add(self.players[1].hand.removeHead()) self.players[1].shownStack.add(self.players[1].hand.removeHead()) self.players[1].shownStack.add(self.players[1].hand.removeHead()) #determine and order players with the lowest card ASC #self.sortPlayers() def sortPlayers(self): newOrder = {} for i in self.players: mini = 'aS' curr = i.hand.head while curr != None: if Game.getValue(curr.val) < Game.getValue(mini): mini = curr.val curr = curr.next newOrder[Game.getValue(mini)] = i print(newOrder) self.players = list(newOrder.values()) print(self.players) self.players[0].hand.show() print() self.players[1].hand.show() #i.hand.show() def rotateTurn(self): if self.currTurn is 3: self.currTurn = 0 else: self.currTurn += 1 def calcCards(self, prevCard, card, sevenFlag=''): ##returns true from following these rules:: #if fourOfAKind #if a seven was previously played #if card is a 7 #if a '10' was played #if a '2' was played #if the card played is higher than the previous card value = False if self.isFourofAKind(card): curr = self.currentStack.head while curr != None: self.removedCards.append(self.currentStack.removeHead()) curr = curr.next self.removedCards.append(card) value = True #player goes again elif Game.getValue(prevCard) is 7: if self.sevenflag is 'high': value = card > 7 else: value = card < 7 elif Game.getValue(card) is 7: if self.sevenflag is not None: self.sevenflag = sevenFlag else: print('error') #rotateTurn +1 elif Game.getValue(card) is 10: curr = self.currentStack.head while curr != None: self.removedCards.append(self.currentStack.removeHead()) curr = curr.next self.removedCards.append(card) value = True #player goes again elif Game.getValue(card) is 2: #player plays again pass print('static') else: value = Game.getValue(card) > Game.getValue(prevCard) return value def isFourofAKind(self, card): #look at the previous 3 cards curr = self.currentStack.head value = False count = 0 while curr != None: if card is curr.val: count += 1 if count is 3: value = True break curr = curr.next return value def searchPlayer(self, name): for p in self.players: if name == p.name: return True return False @staticmethod def getValue(card): val = 0 if len(card) is 3: val = int(card[:2]) else: try: val = int(card[0]) except Exception: print('here') val = values[card[0]] return val