public void dealCards() { int index = nextToSeat(currentDealer); //deal first card for (int i = 0; i < maxPlayers; i++) { if (players[index] != null) { if (players[index].playerCards.Count >= 2) { players[index].playerCards.Clear(); } Card newCard = deck.Top(); var cardIndex = players[index].playerCards.Count; players[index].playerCards.Add(newCard); GameLog.logLine(gameId, GameLog.Actions.Deal_Card, cardIndex.ToString(), newCard.Type.ToString(), newCard.Value.ToString(), players[index].name, index.ToString()); } index = (index + 1) % maxPlayers; } index = nextToSeat(currentDealer); //deal second card for (int i = 0; i < maxPlayers; i++) { if (players[index] != null) { Card newCard = deck.Top(); var cardIndex = players[index].playerCards.Count; players[index].playerCards.Add(newCard); GameLog.logLine(gameId, GameLog.Actions.Deal_Card, cardIndex.ToString(), newCard.Type.ToString(), newCard.Value.ToString(), players[index].name, index.ToString()); } index = (index + 1) % maxPlayers; } flop = null; river = null; turn = null; }
private void checkWhoWins() { int highRank = -1; int winnerIndex = -1; for (int i = 0; i < players.Length - 1; i++) { if (players[i].playerState.Equals(Player.PlayerState.in_round) || players[i].playerState.Equals(Player.PlayerState.my_turn)) { if ((int)players[i].handRank > highRank) { winnerIndex = i; highRank = (int)players[i].handRank; } } } players[winnerIndex].playerState = PlayerState.winner; GameLog.logLine(gameId, GameLog.Actions.Player_Winner, players[winnerIndex].name); players[winnerIndex].Tokens += pot; playersStats[winnerIndex].totalGrossProfit += pot; if (playersStats[winnerIndex].highetsCashInAGame < players[winnerIndex].Tokens) { playersStats[winnerIndex].highetsCashInAGame = players[winnerIndex].Tokens; } for (int i = 0; i < playersStats.Length; i++) { if (players[i] != null && playersStats[i] != null) { leaderBoardUpdateCallback(new int[] { players[i].systemUserID, playersStats[i].highetsCashInAGame, playersStats[i].totalGrossProfit }); } } gameStatesObserver.Update(this); spectateObserver.Update(this); }
private void addToPot(int sum) { pot += sum; GameLog.logLine(gameId, GameLog.Actions.Pot_Changed, sum.ToString(), pot.ToString()); }
public ReturnMessage fold(Player p) { int fold = -1; for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState.Equals(Player.PlayerState.my_turn)) && players[i].Tokens != 0) { fold = players[i].TokensInBet; break; } } bool isFoldOver = true; for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState.Equals(Player.PlayerState.my_turn)) && players[i].TokensInBet != fold && players[i].Tokens != 0) { isFoldOver = false; } } int turn = checkWhosTurnIs(); players[turn].playerState = PlayerState.folded; int nextPlayer = nextToSeat(turn); players[nextPlayer].playerState = PlayerState.my_turn; if (numbersOfPlayersInRound() == 1 && !checkIfAnyPlayerIsWinner()) { players[nextPlayer].playerState = PlayerState.winner; GameLog.logLine(gameId, GameLog.Actions.Player_Winner, players[nextPlayer].name); players[nextPlayer].Tokens += pot; for (int i = 0; i < players.Length; i++) { if (players[i] != null && players[i].Tokens <= 0) { removeUser(players[i].systemUserID); } } if (numbersOfPlayersInRound() == 1) { rankMoneyUpdateCallback(new int[] { p.systemUserID, p.Tokens, moneyInGame }); } gameStatesObserver.Update(this); spectateObserver.Update(this); return(new ReturnMessage(true, "")); } if (isFoldOver) { continueGame(); } gameStatesObserver.Update(this); spectateObserver.Update(this); GameLog.logLine( gameId, GameLog.Actions.Action_Fold, p.name, turn.ToString()); return(new ReturnMessage(true, "")); }
public ReturnMessage bet(Player p, int amount) { ReturnMessage ans; ans = gamePreferences.canPerformGameActions(this, amount, "Bet"); if (!ans.success) { return(ans); } if (p.Tokens - amount < 0) { return(new ReturnMessage(false, "not enough coins")); } if (currentBet > amount && amount != p.Tokens) { return(new ReturnMessage(false, "need to bet more")); } p.Tokens -= amount; GameLog.logLine( gameId, GameLog.Actions.Action_Bet, p.name, amount.ToString()); pot += amount; GameLog.logLine(gameId, GameLog.Actions.Pot_Changed, amount.ToString(), pot.ToString()); int turn = checkWhosTurnIs(); players[turn].TokensInBet += amount; int bet = -1; for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState.Equals(Player.PlayerState.my_turn)) && players[i].Tokens != 0) { bet = players[i].TokensInBet; break; } } bool isBetOver = true; for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState.Equals(Player.PlayerState.my_turn)) && players[i].TokensInBet != bet)// && players[i].Tokens != 0) { isBetOver = false; } } players[turn].playerState = PlayerState.in_round; players[nextToSeat(turn)].playerState = PlayerState.my_turn; if (isBetOver) { continueGame(); } gameStatesObserver.Update(this); spectateObserver.Update(this); // TODO: Gili, you need to send the message to the other players return(new ReturnMessage(true, "")); }
private void continueGame() { switch (gameState) { case GameState.bFlop: //reveal flop flop = new List <Card>(); for (int i = 0; i < 3; i++) { Card flopCard = deck.Top(); flop.Add(flopCard); GameLog.logLine(gameId, GameLog.Actions.Flop, i.ToString(), flopCard.Type.ToString(), flopCard.Value.ToString()); } for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState == PlayerState.my_turn)) { players[i].TokensInBet = 0; } } minNumberOfPlayerRounds = numbersOfPlayersInRound(); gameState++; break; case GameState.bTurn: turn = deck.Top(); GameLog.logLine( gameId, GameLog.Actions.Turn, turn.Type.ToString(), turn.Value.ToString()); for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState == PlayerState.my_turn)) { players[i].TokensInBet = 0; } } minNumberOfPlayerRounds = numbersOfPlayersInRound(); gameState++; break; case GameState.bRiver: river = deck.Top(); GameLog.logLine( gameId, GameLog.Actions.River, river.Type.ToString(), river.Value.ToString()); for (int i = 0; i < players.Length; i++) { if (players[i] != null && (players[i].playerState == PlayerState.in_round || players[i].playerState == PlayerState.my_turn)) { players[i].TokensInBet = 0; } } minNumberOfPlayerRounds = numbersOfPlayersInRound(); gameState++; break; case GameState.aRiver: gameState++; Player p = decideWhoWon(); isGameIsOver = true; p.Tokens += pot; p.playerState = PlayerState.winner; for (int i = 0; i < players.Length; i++) { if (players[i] != null && players[i].Tokens <= 0) { removeUser(players[i].systemUserID); } } if (numbersOfPlayersInRound() == 1) { rankMoneyUpdateCallback(new int[] { p.systemUserID, p.Tokens, moneyInGame }); } gameStatesObserver.Update(this); spectateObserver.Update(this); break; } }
public void leaveGameSpectator(SystemUser user) { GameLog.logLine(gameId, GameLog.Actions.Spectate_Left, user.name); spectators.Remove(user); }
public ReturnMessage joinGame(SystemUser user, int seatIndex) { ReturnMessage m = gamePreferences.canPerformUserActions(this, user, "join"); if (!m.success) { return(m); } if (seatIndex > players.Length) { return(new ReturnMessage(false, "cannot seat here")); } if (players[seatIndex] != null) { return(new ReturnMessage(false, "seat is taken")); } // Buy in handle int buyIn = 50; BuyInPolicyDecPref buyInPref = (BuyInPolicyDecPref)gamePreferences.getOptionalPref(new BuyInPolicyDecPref(0, null)); if (buyInPref != null) { buyIn = buyInPref.buyInPolicy; } // Starting chips amount policy int startingChips = 1000; StartingAmountChipsCedPref startingChipsPref = (StartingAmountChipsCedPref)gamePreferences.getOptionalPref(new StartingAmountChipsCedPref(0, null)); if (startingChipsPref != null) { int policy = startingChipsPref.startingChipsPolicy; if (policy == 0) { startingChips = buyIn; } else { startingChips = policy; } } // The user pay to enter the game. //user.money -= buyIn; rankMoneyUpdateCallback(new int[] { user.id, 0, -buyIn }); Player p = new Player(user.id, user.name, startingChips, user.rank, user.userImageByteArray); players[seatIndex] = p; playersStats[seatIndex] = new LeaderboardsStats(); if (firstJoin) { currentDealer = seatIndex; firstJoin = false; } GameLog.logLine(gameId, GameLog.Actions.Player_Join, user.name, seatIndex.ToString(), startingChips.ToString()); spectateObserver.Update(this); gameStatesObserver.Update(this); moneyInGame += buyIn; return(new ReturnMessage(true, "")); }