예제 #1
0
        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 следующего игрока
        }
예제 #2
0
        //========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;
            }
        }