public void PlayerBet(int _idPlayer, int _rate) { Client player = GetPlayerById(_idPlayer); if (_idPlayer != idActivePlayer) { Console.WriteLine($"Ne tot igrok poxodil"); return; } //делаем проверки на сделанную ставку if (_rate == -1) //игрок упал { //PlayerFold(_idPlayer); Console.WriteLine("делаем проверки на сделанную ставку"); player.playerStatus = PlayerStatus.fold; ServerSend.PlayerStatus(_idPlayer, PlayerStatus.fold); return; } if (player.money < _rate) //--досточно ли денег на счету пользователя { Console.WriteLine("досточно ли денег на счету пользователя"); //send денег на счету мало return; } if (sumBet > _rate + player.sumBetRound) //--ставка меньше чем минимальная ставка на этом кону { Console.WriteLine("ставка меньше чем минимальная ставка на этом кону"); //send маленькая ставка return; } player.money -= _rate; // списываем деньги со счета игрока bank += _rate; // добавляем в банк player.sumBetRound += _rate; // добавляем в общий котел игрока (суммарно сколько он поставил за раунд) //TODO тут нужно сложнее. минимальная ставка может быть меньше!!! нужно делать проверку по суммарнной ставке пользователя за раунд if (sumBet > player.sumBetRound) { sumBet = player.sumBetRound; //минимальная ставка равна текущей ставке } player.isBetTemp = true; //отправляем всем игрокам уведомление что игрок сделал ставку ServerSend.PlayerBet(_idPlayer, _rate); //если все сделали одинаковую ставку. то выкладываем карты и активным игроком становится первый в списке if (CheckRound()) { // Console.WriteLine("ALL BET!!! next round"); NextRound(); int colCardSend = 1; switch (stage) { case Stage.flop: colCardSend = 3; stage = Stage.turn; break; case Stage.turn: stage = Stage.river; break; case Stage.river: stage = Stage.lastBet; break; case Stage.lastBet: ServerSend.WinResult("aaa"); gameStatus = GameStatus.start; return; } for (int i = 0; i < colCardSend; i++) { Card card = deck.GetNextCard(); ServerSend.CardOnDeck(card); } } //в противном случае NextActivePlayer(); //ищем следующего игрока ServerSend.ActivPlayer(idActivePlayer); //говорим всем id следующего игрока }
//========GAME MANAGER====== public void GameLogicUpdate() { switch (gameStatus) { case GameStatus.waitPlayers: if (playersInRoom.Count >= 2) { gameStatus = GameStatus.start; } break; case GameStatus.start: if (playersInRoom.Count >= 2) { deck.Shuffle(); stage = Stage.flop; ServerSend.StartNewGame(); foreach (KeyValuePair <int, Client> kvp in playersInRoom) { Card card1 = deck.GetNextCard(); Card card2 = deck.GetNextCard(); int playerId = kvp.Value.id; kvp.Value.playerStatus = PlayerStatus.inGame; //Sent client Cards, status ServerSend.PlayerInGame(playerId); ServerSend.Preflop(playerId, card1, card2); Console.WriteLine("InGame: " + kvp.Value.username); Console.WriteLine("Preflop: " + card1.ToString() + "-- " + card2.ToString()); } gameStatus = GameStatus.rates; idActivePlayer = playersInRoom[0].id; ServerSend.ActivPlayer(idActivePlayer); //Sent chat to all - Game start } else { gameStatus = GameStatus.waitPlayers; } break; case GameStatus.distribution: if (playersInRoom.Count < 2) { gameStatus = GameStatus.waitPlayers; } // Console.WriteLine("Distribution!"); //Send each by 2 card //Sent first action to rate // gameStatus = GameStatus.rates; break; case GameStatus.rates: if (playersInRoom.Count < 2) { gameStatus = GameStatus.waitPlayers; } string userWin = ""; int playerCount = 0; foreach (KeyValuePair <int, Client> kvp in playersInRoom) { if (kvp.Value.playerStatus == PlayerStatus.inGame) { playerCount += 1; userWin = kvp.Value.username; } } if (playerCount < 2) { ServerSend.WinResult(userWin.ToString()); gameStatus = GameStatus.start; } // отправить первому в списке чтоб делал ставку //first rates // send all rates // if all rate - gameStatus = GameStatus.rates; break; //Send next action to rate break; default: Console.WriteLine("неизвестный статус"); break; } }