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(); } }
//发牌 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(); }
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); } } }
//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(); } } }