예제 #1
0
 private void FinishDoubt(Desk desk, Player player, bool doubt)
 {
     if (doubt)
     {
         if (desk.LastNonDrawFourCard == null)
         {
             desk.AddMessage("无法质疑: 没有上一张牌.");
             desk.FinishDraw(player);
             return;
         }
         var valid = _firstSubmitDrawFourPlayer.Cards.ContainsColor(desk.LastNonDrawFourCard.Color) ||
                     _firstSubmitDrawFourPlayer.Cards.ContainsValue(desk.LastNonDrawFourCard.Value);
         if (valid) // doubt is valid
         {
             desk.FinishDraw(_firstSubmitDrawFourPlayer);
         }
         else
         {
             desk.OverlayCardNum += 2;
             desk.FinishDraw(player);
         }
     }
     else
     {
         desk.FinishDraw(player);
     }
 }
예제 #2
0
 private void BehaveDrawTwo(Player nextPlayer, Desk desk)
 {
     if (nextPlayer.Cards.ContainsType(CardType.DrawTwo))
     {
         nextPlayer.AddMessage("你现在可以选择 叠加+2 或者 摸牌来让前面叠加的+2加到你身上");
     }
     else
     {
         desk.FinishDraw(desk.CurrentPlayer);
         desk.State = GamingState.Gaming;
     }
 }
예제 #3
0
 private void FinishDoubt(Desk desk, Player player, bool doubt)
 {
     if (doubt)
     {
         var valid = _firstSubmitDrawFourPlayer.Cards.ContainsColor(desk.LastNonDrawFourCard.Color) ||
                     _firstSubmitDrawFourPlayer.Cards.ContainsValue(desk.LastNonDrawFourCard.Value);
         if (valid) // doubt is valid
         {
             desk.FinishDraw(_firstSubmitDrawFourPlayer);
         }
         else
         {
             desk.OverlayCardNum += 2;
             desk.FinishDraw(player);
         }
     }
     else
     {
         desk.FinishDraw(player);
     }
 }
예제 #4
0
 private void BehaveDrawFour(Player nextPlayer, Desk desk)
 {
     if (nextPlayer.Cards.ContainsType(CardType.DrawFour))
     {
         nextPlayer.AddMessage("你现在可以选择 叠加+4 或者 摸牌来让前面叠加的+2加到你身上");
     }
     else
     {
         if (desk.OverlayCardNum > 4)
         {
             desk.FinishDraw(nextPlayer);
         }
         else
         {
             desk.State = GamingState.Doubting;
             desk.AddMessage($"{nextPlayer.AtCode}你要质疑吗?");
         }
     }
 }
예제 #5
0
        public override void Parse(Desk desk, Player player, string command)
        {
            if (!desk.Players.Contains(player))
            {
                return;
            }
            if (ParseUnoCommand(desk, player, command))
            {
                return;
            }
            if (!IsValidPlayer(desk, player))
            {
                return;
            }

            // uno draw
            switch (command)
            {
            case "摸":
            case "摸牌":
            case "mo":
            case "draw":
            case "画画":
                switch (desk.State)
                {
                case GamingState.Gaming:
                    player.AddCardsAndSort(1);
                    desk.AddMessageLine("已为你摸牌.");
                    break;

                case GamingState.WaitingDrawTwoOverlay:
                case GamingState.WaitingDrawFourOverlay:
                    desk.FinishDraw(desk.CurrentPlayer);
                    break;

                case GamingState.Doubting:
                    desk.AddMessage("我在问你要不要质疑! 不是问你摸不摸!");
                    return;
                }

                MoveNext(desk);
                desk.SendLastCardMessage();
                return;
            }

            // uno doubt
            if (desk.State == GamingState.Doubting)
            {
                switch (command)
                {
                case "质疑":
                    FinishDoubt(desk, player, true);
                    return;

                case "不质疑":
                    FinishDoubt(desk, player, false);
                    return;

                default:
                    desk.AddMessage("不是一个标准的质疑命令.");
                    return;
                }
            }

            // uno submit card
            var card = command.ToCard();

            if (card == null)
            {
                desk.AddMessage("无法匹配你想出的牌.");
                return;
            }

            if (!UnoRule.IsValid(card, desk.LastCard, desk.State))
            {
                desk.AddMessage("你想出的牌并不匹配 UNO 规则.");
                return;
            }

            if (!card.IsValidForPlayerAndRemove(player))
            {
                desk.AddMessage("你的手里并没有这些牌.");
                return;
            }

            desk.LastCard = card;
            if (card.Type != CardType.DrawFour)
            {
                desk.LastNonDrawFourCard = card;
            }

            if (player.Cards.Count == 0)
            {
                desk.FinishGame(player);
                return;
            }

            player.LastSendTime = DateTime.Now;
            desk.LastSendPlayer = player;
            Behave(desk, player, card);
            desk.SendLastCardMessage();
        }
예제 #6
0
        public override void Parse(Desk desk, Player player, string command)
        {
            command = ToGenericCommand(command);
            switch (command)
            {
            case "lastCard":
                desk.SendLastCardMessage();
                return;
            }
            if (!desk.Players.Contains(player))
            {
                return;
            }
            if (ParseUnoCommand(desk, player, command))
            {
                return;
            }
            switch (command)
            {
            case "publicCard":
                player.PublicCard = true;
                desk.AddMessage("明牌成功.");
                return;

            case "myRound":
                desk.AddMessage("是是, 我们都知道是你的回合");
                return;

            case "autoSubmit":
                desk.AddMessage("完成.");
                player.AutoSubmitCard = true;
                return;

            case "disableAutoSubmit":
                desk.AddMessage("完成.");
                player.AutoSubmitCard = false;
                return;
            }



            var card = command.ToCard();

            if (card != null && UnoRule.IsValidForFollowCard(card, desk.LastCard, desk.State))
            {
                if (!card.IsValidForPlayerAndRemove(player))
                {
                    desk.AddMessage("你的手里并没有这些牌.");
                    return;
                }

                After(desk, player, card);
                CurrentIndex = desk.PlayerList.FindIndex(p => p == player);
                MoveNext(desk);
                desk.SendLastCardMessage();
            }
            if (!IsValidPlayer(desk, player))
            {
                return;
            }
            // uno draw
            switch (command)
            {
            case "draw":
                switch (desk.State)
                {
                case GamingState.Gaming:
                    TimerDraw(desk, player, desk.LastCard);
                    return;

                case GamingState.WaitingDrawTwoOverlay:
                case GamingState.WaitingDrawFourOverlay:
                    desk.FinishDraw(desk.CurrentPlayer);
                    break;

                case GamingState.Doubting:
                    desk.AddMessage("我在问你要不要质疑! 不是问你摸不摸!");
                    return;
                }

                MoveNext(desk);
                desk.SendLastCardMessage();
                return;
            }

            // uno doubt
            if (desk.State == GamingState.Doubting)
            {
                switch (command)
                {
                case "doubt":
                    FinishDoubt(desk, player, true);
                    return;

                case "nonDoubt":
                    FinishDoubt(desk, player, false);
                    return;

                default:
                    desk.AddMessage("不是一个标准的质疑命令.");
                    return;
                }
            }

            // uno submit card

            if (card == null)
            {
                desk.AddMessage("无法匹配你想出的牌.");
                return;
            }

            if (!UnoRule.IsValid(card, desk.LastCard, desk.State))
            {
                desk.AddMessage("你想出的牌并不匹配 UNO 规则.");
                return;
            }

            if (!card.IsValidForPlayerAndRemove(player))
            {
                desk.AddMessage("你的手里并没有这些牌.");
                return;
            }



            After(desk, player, card);
            desk.SendLastCardMessage();
        }