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); } }
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; } }
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); } }
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}你要质疑吗?"); } } }
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(); }
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(); }