Esempio n. 1
0
        public void RestartGame()
        {
            log.Debug("restart game");
            foreach (var player in CurrentGameState.Players)
            {
                player.Rank = 0;
            }

            this.CurrentHandState = new CurrentHandState(this.CurrentGameState);
            this.CurrentHandState.LeftCardsCount = TractorRules.GetCardNumberofEachPlayer(this.CurrentGameState.Players.Count);
            CurrentHandState.IsFirstHand         = true;
            UpdatePlayersCurrentHandState();
            var currentHandId = this.CurrentHandState.Id;

            DistributeCards();
            if (this.CurrentHandState.Id != currentHandId)
            {
                return;
            }
            Thread.Sleep(5000);
            if (this.CurrentHandState.Trump != Suit.None)
            {
                DistributeLast8Cards();
            }
            else if (PlayersProxy.Count == 4)
            {
                RestartGame();
            }
        }
Esempio n. 2
0
        //发牌
        public void DistributeCards()
        {
            CurrentHandState.CurrentHandStep = HandStep.DistributingCards;
            UpdatePlayersCurrentHandState();
            string currentHandId = this.CurrentHandState.Id;

            this.CardsShoe.Shuffle();
            int cardNumberofEachPlayer = TractorRules.GetCardNumberofEachPlayer(this.CurrentGameState.Players.Count);
            int j = 0;

            var LogList = new Dictionary <string, StringBuilder>();

            foreach (var player in PlayersProxy)
            {
                LogList[player.Key] = new StringBuilder();
            }

            for (int i = 0; i < cardNumberofEachPlayer; i++)
            {
                foreach (var player in PlayersProxy)
                {
                    var index = j++;
                    if (this.CurrentHandState.Id == currentHandId)
                    {
                        player.Value.GetDistributedCard(CardsShoe.Cards[index]);
                        LogList[player.Key].Append(CardsShoe.Cards[index].ToString() + ", ");
                    }
                    else
                    {
                        return;
                    }

                    this.CurrentHandState.PlayerHoldingCards[player.Key].AddCard(CardsShoe.Cards[index]);
                }
                Thread.Sleep(500);
            }

            log.Debug("distribute cards to each player: ");
            foreach (var logItem in LogList)
            {
                log.Debug(logItem.Key + ": " + logItem.Value.ToString());
            }

            foreach (var keyvalue in this.CurrentHandState.PlayerHoldingCards)
            {
                log.Debug(keyvalue.Key + "'s cards:  " + keyvalue.Value.ToString());
            }

            CurrentHandState.CurrentHandStep = HandStep.DistributingCardsFinished;
            UpdatePlayersCurrentHandState();
        }
Esempio n. 3
0
        public void StartNextHand(PlayerEntity nextStarter)
        {
            UpdateGameState();
            this.CurrentHandState                = new CurrentHandState(this.CurrentGameState);
            this.CurrentHandState.Starter        = nextStarter.PlayerId;
            this.CurrentHandState.Rank           = nextStarter.Rank;
            this.CurrentHandState.LeftCardsCount = TractorRules.GetCardNumberofEachPlayer(this.CurrentGameState.Players.Count);

            log.Debug("start next hand, starter: " + this.CurrentHandState.Starter + " Rank: " + this.CurrentHandState.Rank.ToString());

            UpdatePlayersCurrentHandState();

            var currentHandId = this.CurrentHandState.Id;

            DistributeCards();
            if (this.CurrentHandState.Id != currentHandId)
            {
                return;
            }

            Thread.Sleep(5000);
            if (this.CurrentHandState.Trump != Suit.None)
            {
                DistributeLast8Cards();
            }

            else if (PlayersProxy.Count == 4)
            {
                //如果庄家TEAM亮不起,则庄家的下家成为新的庄家
                var nextStarter2 = CurrentGameState.GetNextPlayerAfterThePlayer(false, CurrentHandState.Starter);
                this.CurrentHandState.Starter = nextStarter2.PlayerId;
                this.CurrentHandState.Rank    = nextStarter2.Rank;
                log.Debug("starter team fail to make trump, next starter: " + this.CurrentHandState.Starter + " Rank: " + this.CurrentHandState.Rank.ToString());

                UpdatePlayersCurrentHandState();

                //10 seconds to make trump
                Thread.Sleep(10000);
                if (this.CurrentHandState.Trump != Suit.None)
                {
                    DistributeLast8Cards();
                }
                else if (PlayersProxy.Count == 4)
                {
                    //如果下家也亮不起,重新发牌
                    StartNextHand(nextStarter);
                }
            }
        }
Esempio n. 4
0
        //player get card
        public void GetDistributedCard(int number)
        {
            this.CurrentPoker.AddCard(number);
            if (PlayerOnGetCard != null)
            {
                PlayerOnGetCard(number);
            }

            if (this.CurrentPoker.Count == TractorRules.GetCardNumberofEachPlayer(this.CurrentGameState.Players.Count) && this.PlayerId != this.CurrentHandState.Last8Holder)
            {
                if (AllCardsGot != null)
                {
                    AllCardsGot();
                }
            }
            else if (this.CurrentPoker.Count == TractorRules.GetCardNumberofEachPlayer(this.CurrentGameState.Players.Count) + 8)
            {
                if (AllCardsGot != null)
                {
                    AllCardsGot();
                }
            }
        }