def revealCards(self, gameObject, cards): data = {} data['agenda'] = "cardReveal" data['data'] = [] for card in cards: data['data'].append(gameObject.convertNotation(Card.get_rank_int(card), Card.get_suit_int(card))) comms.broadcastToPlayers(gameObject.players, data);
def startGame(self): data = {} data['agenda'] = "gameStart" data['data'] = {'players': [], 'startingCash': []} for user in self.lobby['users'].values(): self.addPlayer(Player(self.startingCash, user)) #add user to data object for sending of initial players data['data']['players'].append({ 'playerSid': user['sid'], 'username': User.getUsername(user['sid']) }) comms.broadcastToPlayers(self.players, data) result = self.startNewRound() if (result == False): for x in range(len(self.players) - 1, -1, -1): self.removePlayerFromGame(x) #endGameUsers se dodaja ko nekdo zapusti igro ali zmaga return self.endGameUsers
def bettingPhase(self, gameObject, startPlayerIndex): playerCount=len(self.roundPlayers) currentPI=startPlayerIndex for p in range(0, playerCount): #init. playerStatus array-all to false, except those who folded (set to None) if(self.playerStatus[p]!=None): self.playerStatus[p]=False while(True): if(self.countActivePlayers(playerCount)==1): #check if more than 1 player is still active (un-folded) return False if(self.playerStatus[currentPI]==None): #skip player that folded currentPI=self.nextPlayer(currentPI, playerCount) else: print("Current min. bet: " + str(self.currentMinBet) + "\r\nCurrent pot: " + str(self.pot)) if(self.checkArray(self.playerStatus)): break print(" Player "+str(currentPI)) #tell everyone else its his turn data = {} data['agenda'] = "playersTurn" data['data'] = gameObject.players[currentPI].id comms.broadcastToEveryoneExcept(gameObject.players, gameObject.players[currentPI], data) data = {} data['agenda'] = "yourTurn" print("Sending yourTurn to {}".format(gameObject.players[currentPI].id)) comms.send(gameObject.players[currentPI].socket, data) rec = comms.receive(gameObject.players[currentPI].socket) action = rec['agenda'] if(action=="check"): self.roundPlayers[currentPI].placeBet(self, self.currentMinBet) self.playerStatus[currentPI]=True data = {} data['agenda'] = "playerCheck" data['data'] = gameObject.players[currentPI].id #player ki je raisal: SID comms.broadcastToPlayers(gameObject.players, data) currentPI=self.nextPlayer(currentPI, playerCount) elif(action=="raise"): #DONE(test) check, da raisa vec kot je min SERVER SIDE inputRaise = int(rec['data']) #if(inputRaise<=0): # inputRaise=minRaise #elif(inputRaise>self.roundPlayers[currentPI].money): # inputRaise=self.roundPlayers[currentPI].money #DONE-end betPlaced=self.roundPlayers[currentPI].placeBet(self, self.currentMinBet + inputRaise) self.playerStatus[currentPI]=True self.resetPlayerStatusAfterRaise(currentPI) #self.currentMinBet+=inputRaise self.currentMinBet=betPlaced print("RAISE: {}".format(inputRaise)) data = {} data['agenda'] = "playerRaise" data['data'] = [gameObject.players[currentPI].id, inputRaise] #player ki je raisal: SID, stevilo comms.broadcastToPlayers(gameObject.players, data) currentPI=self.nextPlayer(currentPI, playerCount) elif(action=="fold"): self.playerStatus[currentPI]=None data = {} data['agenda'] = "playerFold" data['data'] = gameObject.players[currentPI].id #player ki je raisal: SID comms.broadcastToPlayers(gameObject.players, data) currentPI=self.nextPlayer(currentPI, playerCount) elif(action=="leave"): #poslji mu ok za left? self.removePlayer(gameObject, currentPI) # print("\n><\n><\nround:{}, game:{}\n><\n><\n".format(len(self.roundPlayers), len(gameObject.players))) if currentPI > 0: if currentPI == playerCount - 1: currentPI -= 1 #fix index problems from leaver playerCount -= 1 return True
def endRound(self, gameObject, winners): #winners=[0,1] data = {} data['agenda'] = "playerWonRound" data['data'] = {'winnerSid': [], 'earnings': [], 'playerSid':[], 'playerHands':[], 'currentCash':[]} if(len(winners)==1): #only 1 winner gameObject.players[winners[0]].money+=self.pot print("Player " + str(winners[0]) + " WON") data['data']['winnerSid'] = gameObject.players[winners[0]].id #front checks len(data['playerSid']) data['data']['earnings'] = self.pot else: #OH LORD HELP US, CE BO TO DELALO mainPot=0 sidePot=0 leftoverMainPot=0 leftoverSidePot=0 retVal=self.getMinBetAndSecondMinBetAndItsIndexes() minBetIndex=retVal[0] minBet=retVal[1] secondMinIndex=retVal[2] secondMinBet=retVal[3] sidePotWinners=[] for i in range(len(self.roundPlayers)): #get main pot #calculate mainPot if(self.playerStatus[i] is not None): mainPot+=minBet #advanced black magic sidePot calculations if(self.playerStatus[i] is not None and self.roundPlayers[i].currentBet > minBet): sidePot+=(secondMinBet-minBet) if(self.roundPlayers[i].currentBet>secondMinBet): self.roundPlayers[i].returnMoney((self.roundPlayers[i].currentBet-secondMinBet)) sidePotWinners.push(i) self.roundPlayers[i].currentBet=secondMinBet #needed? if(len(winners)==0): mainPotSplit=mainPot else: mainPotSplit=math.floor(mainPot/len(winners)) leftoverMainPot=mainPot%len(winners) if(len(sidePotWinners)==0): sidePotSplit=sidePot sidePotWinners=winners else: sidePotSplit=math.floor(sidePot/len(sidePotWinners)) leftoverSidePot=sidePot%len(sidePotWinners) for j in range(len(winners)): if(self.roundPlayers[j].currentBet==minBet): gameObject.players[winners[j]].money+=mainPotSplit if(self.roundPlayers[j].currentBet > minBet): gameObject.players[winners[j]].money+=sidePotSplit #split leftover earnings amongst players (remainder at pot/ammountOfWinners; example=> 15/2=7=>remainder:1; first winners gets the leftover money) #requires in-depth testing mainLeftoverEarnings=[] for p in winners: mainLeftoverEarnings.append(0) mainPotPI=0 while(leftoverMainPot>0): mainLeftoverEarnings[mainPotPI]+=1 leftoverMainPot-=1 mainPotPI+=1 if(mainPotPI>len(winners)): mainPotPI=0 sideLeftoverEarnings=[] for p in sidePotWinners: sideLeftoverEarnings.addpend(0) sidePotPI=0 while(leftoverSidePot>0): sideLeftoverEarnings[sidePotPI]+=1 leftoverSidePot-=1 sidePotPI+=1 if(sidePotPI>len(sidePotWinners)): sidePotPI=0 mainPotPI2=0 sidePotPI2=0 for p in winners: earnings=mainPotSplit if(mainPotPI2<len(winners)): earnings+=mainLeftoverEarnings[mainPotPI2] mainPotPI2+=1 data['data']['winnerSid'].append(gameObject.players[p].id) if(p in sidePotWinners): earnings+=sidePotSplit if(sidePotPI2<len(sideLeftoverEarnings)): earnings+=sideLeftoverEarnings[sidePotPI2] sidePotPI2+=1 data['data']['earnings'].append(earnings) #split the pot-DEPRECATED #potSplit=self.pot / len(winners) #print("Pot split between: ") #for p in winners: # gameObject.players[winnerIndex].money+=potSplit # print("Player " + str(winners[0]) + " ") # data['playerSid'].append(gameObject.players[p]) # data['earnings'].append(potSplit) for player in gameObject.players: data['data']['playerSid'].append(player.id) convertedHand = player.hand convertedHand[0] = gameObject.convertNotation(Card.get_rank_int(convertedHand[0]), Card.get_suit_int(convertedHand[0])) convertedHand[1] = gameObject.convertNotation(Card.get_rank_int(convertedHand[1]), Card.get_suit_int(convertedHand[1])) data['data']['playerHands'].append(convertedHand) data['data']['currentCash'].append(player.money) print(data) comms.broadcastToPlayers(gameObject.players, data); gameObject.roundCounter+=1 print("\r\n\r\n")