bool PlayersReadyThisRound() { int roundPlayers = 0; int readyPlayers = 0; for (int i = 0; i < players.Count; i++) { if (players[i] != null) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); if (!PI.gameEnded && !PI.fold) { roundPlayers++; if (PI.actualBid == highestBid && PI.movesThisRound > 0 || PI.allIn || PI.lastPlayer) { readyPlayers++; } } } } if (roundPlayers == readyPlayers) { return(true); } else { return(false); } }
void ClearTable() { for (int i = 0; i < players.Count; i++) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); if (PI.cardsInHand.Count == 2) { PI.cardsInHand.Clear(); } } for (int i = 0; i < cardsInHandsObjects.Count; i++) { Destroy(cardsInHandsObjects[i]); NetworkServer.Destroy(cardsInHandsObjects[i]); } cardsInHandsObjects.Clear(); for (int i = 0; i < cardsOnTable.Count; i++) { Destroy(cardsOnTableObjects[i]); NetworkServer.Destroy(cardsOnTableObjects[i]); } cardsOnTableObjects.Clear(); cardsOnTable.Clear(); }
void CheckTurnVar(PlayerInteractions _PI) { if (_PI.fold || _PI.gameEnded || _PI.allIn || !_PI.turn) { nextPlayerTrigger = true; } int all = 0; int readyPlayers = 0; for (int i = 0; i < players.Count; i++) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); if (PI != _PI) { all++; if (PI.fold || PI.gameEnded || PI.allIn) { readyPlayers++; } } } if (readyPlayers == all && _PI.actualBid == highestBid) { _PI.lastPlayer = true; nextPlayerTrigger = true; } }
void NextPlayerTurn() { PlayerInteractions PI = players[actualPlayerTurn].GetComponent <PlayerInteractions>(); if (PI == null) { NextPlayerTrigger(); } else { CheckTurnVar(PI); } if (nextPlayerTrigger) { PI.turn = false; PI.SpawnChipsObjects(); if (PI.actualBid > highestBid) { highestBid = PI.actualBid; } if (PlayersReadyThisRound()) { NextRound(); } NextPlayerTrigger(); } }
void EndDeal() { List <int> winningPlayers = new List <int>(); for (int i = 0; i < players.Count; i++) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); PI.turn = false; PI.ready = false; if (PI.fold || PI.gameEnded) { continue; } if (winningPlayers.Count == 0) { winningPlayers.Add(i); } PlayerInteractions PIwinning = players[winningPlayers[0]].GetComponent <PlayerInteractions>(); CheckPokerHand(PI); if (winningPlayers[0] != i) { CheckBetterHand(winningPlayers[0], i, PI, PIwinning, winningPlayers); } } moneyToWin /= winningPlayers.Count; for (int i = 0; i < players.Count; i++) { for (int j = 0; j < winningPlayers.Count; j++) { if (winningPlayers[j] == i) { players[i].GetComponent <PlayerInteractions>().actualMoney += moneyToWin; } } } moneyToWin = 0; if (winningPlayers.Count > 1) { StartCoroutine(WaitForNextDeal("Draw")); } else { PlayerInfo Pinfo = players[winningPlayers[0]].GetComponent <PlayerInfo>(); StartCoroutine(WaitForNextDeal(Pinfo.playerName + " wins!")); } }
IEnumerator WaitForNextDeal(string winner) { for (int i = 0; i < players.Count; i++) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); PI.winnerAnnouncment = winner; } yield return(new WaitForSeconds(6)); deal = true; }
void CheckBetterHand(int lastWinner, int thisPlayer, PlayerInteractions PI, PlayerInteractions PIwinning, List <int> listOfWinners) { if (PI.pokerHandNumber > PIwinning.pokerHandNumber) { listOfWinners.Clear(); listOfWinners.Add(thisPlayer); return; } else if (PI.pokerHandNumber == PIwinning.pokerHandNumber) { for (int i = 0; i < PI.pokerHandsCards.Count; i++) { if (PI.pokerHandsCards[i] > PIwinning.pokerHandsCards[i]) { listOfWinners.Clear(); listOfWinners.Add(thisPlayer); return; } else if (PI.pokerHandsCards[i] < PIwinning.pokerHandsCards[i]) { return; } } for (int i = 0; i < PI.biggestCards.Count; i++) { if (PI.biggestCards[i] > PIwinning.biggestCards[i]) { listOfWinners.Clear(); listOfWinners.Add(thisPlayer); return; } else if (PI.biggestCards[i] < PIwinning.biggestCards[i]) { return; } } } else if (PI.pokerHandNumber < PIwinning.pokerHandNumber) { return; } listOfWinners.Add(thisPlayer); return; }
void NextRound() { round++; for (int i = 0; i < players.Count; i++) { if (players[i] != null) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); if (!PI.gameEnded) { moneyToWin += PI.actualBid; PI.actualBidFloat = 1; PI.actualBid = 0; PI.highestBid = 0; PI.movesThisRound = 0; PI.SpawnChipsObjects(); PI.turn = false; } } } if (round == 1) { AddCardsOnTable(3); players[actualSmallBlind].GetComponent <PlayerInteractions>().turn = true; } else if (round == 2 || round == 3) { AddCardsOnTable(1); players[actualSmallBlind].GetComponent <PlayerInteractions>().turn = true; } else if (round == 4) { playerTurn = false; for (int i = 0; i < players.Count; i++) { players[i].GetComponent <PlayerInteractions>().cardsDealed = false; } EndDeal(); } highestBid = 0; }
void NextPlayerTrigger() { actualPlayerTurn++; if (actualPlayerTurn == players.Count) { actualPlayerTurn = 0; } PlayerInteractions PInext = players[actualPlayerTurn].GetComponent <PlayerInteractions>(); PInext.highestBid = highestBid; if (!PInext.allIn && !PInext.fold && !PInext.gameEnded) { PInext.turn = true; } nextPlayerTrigger = false; }
void SetBlinds() { PlayerInteractions smallBlind = players[actualSmallBlind].GetComponent <PlayerInteractions>(); smallBlind.actualBid = 25; smallBlind.actualMoney -= 25; PlayerInteractions bigBlind = players[actualBigBlind].GetComponent <PlayerInteractions>(); bigBlind.actualBid = 50; bigBlind.actualMoney -= 50; highestBid = 50; for (int i = 0; i < players.Count; i++) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); PI.SpawnChipsObjects(); PI.highestBid = highestBid; } }
public void GiveCardsToPlayers() { int playersInGame = 0; for (int i = 0; i < players.Count; i++) { PlayerInteractions PI = players[i].GetComponent <PlayerInteractions>(); if (PI.actualMoney <= 0) { PI.gameEnded = true; } else { PI.cardsDealed = true; PI.gameEnded = false; PI.fold = false; PI.allIn = false; PI.lastPlayer = false; PI.turn = false; PI.ready = ready; playersInGame++; } for (int j = 0; j < 2; j++) { PI.cardsInHand.Add(cards[actualCard]); actualCard++; GameObject card = Instantiate(PI.cardsInHand[j], PI.cardsPositionsInHand[j].position, PI.cardsPositionsInHand[j].rotation); NetworkServer.Spawn(card, players[i]); card.GetComponent <Card>().toFollow = PI.cardsPositionsInHand[j]; cardsInHandsObjects.Add(card); } } if (playersInGame == 1) { NetworkManager.singleton.StopServer(); } }
void CheckPokerHand(PlayerInteractions _PI) { Card[] cardsToCheck = new Card[7]; int cardsSum = 0; for (int i = 0; i < cardsOnTableObjects.Count; i++) { cardsToCheck[i] = cardsOnTableObjects[i].GetComponent <Card>(); cardsSum++; } for (int i = 0; i < _PI.cardsInHand.Count; cardsSum++, i++) { cardsToCheck[cardsSum] = _PI.cardsInHand[i].GetComponent <Card>(); } List <int> usedIndex = new List <int>(); usedIndex.Clear(); switch (1) { case 1: if (RoyalFlush(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 10; Debug.Log("Royal Flush"); break; } else { goto case 2; } case 2: if (StraightFlush(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 9; Debug.Log("Straight Flush"); break; } else { goto case 3; } case 3: if (FourOfKind(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 8; Debug.Log("Four of a Kind"); break; } else { goto case 4; } case 4: if (FullHouse(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 7; Debug.Log("Full House"); break; } else { goto case 5; } case 5: if (Flush(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 6; Debug.Log("Flush"); break; } else { goto case 6; } case 6: if (Straight(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 5; Debug.Log("Straight"); break; } else { goto case 7; } case 7: if (ThreeOfKind(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 4; Debug.Log("Three of a Kind"); break; } else { goto case 8; } case 8: if (TwoPairs(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 3; Debug.Log("Two Pairs"); break; } else { goto case 9; } case 9: if (OnePair(cardsToCheck, usedIndex)) { _PI.pokerHandNumber = 2; Debug.Log("One Pair"); break; } else { goto case 10; } case 10: _PI.pokerHandNumber = 1; _PI.biggestCard = BiggestCard(cardsToCheck, usedIndex); Debug.Log("Biggest Card"); break; } List <int> notUsedIndex = new List <int>(); for (int i = 0; i < cardsToCheck.Length; i++) { for (int j = 0; j < usedIndex.Count; j++) { if (i == usedIndex[j]) // check used index { goto EndLoop; } } notUsedIndex.Add(i); EndLoop : continue; } int restCards = 5 - usedIndex.Count; List <int> biggestPokerHandCards = new List <int>(); List <int> biggestCards = new List <int>(); foreach (int index in usedIndex) { biggestPokerHandCards.Add(cardsToCheck[index].number); } biggestPokerHandCards.Sort(); biggestPokerHandCards.Reverse(); while (restCards <= 5) { biggestCards.Add(BiggestCard(cardsToCheck, usedIndex)); restCards++; } _PI.pokerHandsCards = biggestPokerHandCards; _PI.biggestCards = biggestCards; }