Exemplo n.º 1
0
	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);
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
	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
Exemplo n.º 4
0
	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")