コード例 #1
0
ファイル: CommandParser.cs プロジェクト: Team-CLC/CardSharp
 private static void PlayerWin(Desk desk, Player player)
 {
     if (desk.State == GameState.Unknown)
     {
         return;
     }
     desk.FinishGame(player);
 }
コード例 #2
0
ファイル: GamingParser.cs プロジェクト: Team-CLC/UnoSharp
        private void After(Desk desk, Player player, Card card)
        {
            desk.LastCard = card;
            if (card.Type != CardType.DrawFour)
            {
                desk.LastNonDrawFourCard = card;
            }

            foreach (var deskPlayer in desk.Players.Where(deskPlayer => deskPlayer.Cards.Count == 0))
            {
                desk.FinishGame(deskPlayer);
                return;
            }

            player.LastSendTime = DateTime.Now;
            desk.LastSendPlayer = player;
            Behave(desk, player, card);
        }
コード例 #3
0
ファイル: CommandParser.cs プロジェクト: Team-CLC/CardSharp
        private static bool CheckGameFinished(Desk desk)
        {
            var farmers   = desk.Players.Where(p => p.Type == PlayerType.Farmer);
            var landlords = desk.Players.Where(p => p.Type == PlayerType.Landlord);

            if (farmers.All(p => p.GiveUp) || landlords.All(p => p.GiveUp))
            {
                desk.FinishGame(desk.Players.First(p => !p.GiveUp));
                return(true);
            }

            if (desk.CurrentPlayer.Cards.Count == 0)
            {
                PlayerWin(desk, desk.CurrentPlayer);
                return(true);
            }

            return(false);
        }
コード例 #4
0
        public void Parse(Desk desk, Player player, string command)
        {
            if (command.Contains("当前玩家有: ") && !command.Contains("UNO"))
            {
                desk.AddMessage($"我们目前检测到了一些小小的\"机器人冲突\". 输入[关闭机器人{RandomBotId}]来降低这个机器人在此群的地位.");
            }

            if (command == $"关闭机器人{RandomBotId}")
            {
                Desk.ShutedGroups.Add(desk.DeskId);
                desk.AddMessage($"已经关闭斗地主. 重新恢复为[恢复机器人{RandomBotId}]");
            }
            else if (command == $"恢复机器人{RandomBotId}")
            {
                Desk.ShutedGroups.RemoveAll(d => d == desk.DeskId);
                desk.AddMessage("已经重启斗地主.");
            }

            var pconfig = PlayerConfig.GetConfig(player);

            switch (command)
            {
            case "所有游戏":
                desk.BoardcastDesks();
                break;

            case "获取积分":
                var px = DateTime.Now - pconfig.LastTime;
                if (px.TotalSeconds.Seconds() > 12.Hours())
                {
                    pconfig.AddPoint();
                    desk.AddMessage($"领取成功. 你当前积分为{pconfig.Point}");
                }
                else
                {
                    desk.AddMessage(
                        $"你现在不能这么做. 你可以在{(12.Hours() - px).Humanize(culture: new CultureInfo("zh-CN"), maxUnit: TimeUnit.Hour)}后领取.");
                }

                break;

            case "我的信息":
                desk.AddMessage($"你的积分为 {pconfig.Point}");
                break;

            case "重新发牌":
                if (desk.State == GameState.Gaming || desk.State == GameState.DiscussLandlord)
                {
                    desk.SendCardsMessage();
                }
                break;

            case "命令列表":
                desk.AddMessage(@"=    命令列表    =

/////没牌的直接添加机器人好友(有牌的最好也添加)机器人会自动同意请求\\\\\
Powered by Cy.
Unpowered by LG.
命令说明:
         带有[D]的命令 还未开发完成
         带有[B]的命令 是测试功能,可能会更改
         带有[R]的命令 是正式功能,'一般'不会做更改
群聊命令:
[R]|上桌|fork table|:加入游戏
[R]|下桌|:退出游戏
[R]|过|不出|不要|出你妈|要你妈|pass|passs|passss|passsss|passsssssssssssssssss|:过牌
[R]|抢地主|抢他妈的|:抢地主
[R]|不抢|抢你妈|抢个鸡毛掸子|:不抢地主
[R]|开始游戏|:准备环节→开始游戏
[R]|重新发牌|:不是重置牌!是会把你的牌通过私聊再发一次!
[R]|加倍|:加倍或超级加倍在一局游戏中只能使用一次
[R]|超级加倍|:加倍再加倍
[B]|减倍|:减倍或超级减倍在一局游戏中只能使用一次
[B]|超级减倍|:减倍再减倍
[B]|SUDDEN_DEATH_DUEL_CARD|: 死亡决斗卡 将会把你所有的积分赌上桌,要么破产,要么暴富
[R]|下桌|:退出游戏,只能在准备环节使用
[R]|明牌|:显示自己的牌给所有玩家,明牌会导致积分翻倍,只能在发完牌后以及出牌之前使用。
[B]|托管|:自动出牌
[B]|结束托管|:结束自动出牌
[B]|弃牌|:放弃本局游戏,当地主或者两名农民弃牌游戏结束,弃牌农民玩家赢了不得分,输了双倍扣分
[B]|结束游戏|:只有参与游戏的人可以使用
[R]|获取积分|:获取积分,12小时可获取10000分。
[R]|我的信息|:你的积分
[B]|记牌器|:显示每种牌在场上还剩下多少张
[B]|安静出牌启用|:所有信息都会私聊发送
[B]|安静出牌禁用|:所有信息不都会私聊发送
[B]|自动过牌启用|:启用自动过牌
[B]|自动过牌禁用|:禁用自动过牌

如果崩溃请大家多多包涵,游戏愉快。
");
                break;

            case "安静出牌启用":
                desk.Silence = true;
                break;

            case "安静出牌禁用":
                desk.Silence = false;
                break;

            case "自动过牌启用":
                player.AutoPass = true;
                desk.AddMessage("Done.");
                break;

            case "自动过牌禁用":
                player.AutoPass = false;
                desk.AddMessage("Done.");
                break;
            }

            if (pconfig.IsAdmin)
            {
                switch (command)
                {
                case "结束游戏":
                    desk.FinishGame();
                    break;

                case "玩家牌":
                    if (!Player.ForceSendPlayers.Contains(player))
                    {
                        Player.ForceSendPlayers.Add(player);
                    }
                    player.ForceSend = true;
                    player.AddMessage(string.Join(Environment.NewLine, desk.Players.Select(p => $"{p.PlayerId} {p.Cards.ToFormatString()}")));
                    break;
                }

                if (command.StartsWith("设置积分"))
                {
                    var sp     = command.Split(" ");
                    var target = sp[1];
                    var point  = int.Parse(sp[2]);
                    var cfg    = PlayerConfig.GetConfig(new Player(target));
                    cfg.Point = point;
                    desk.AddMessage("Set done.");
                    cfg.Save();
                }

                if (command.StartsWith("Sudo"))
                {
                    var sp     = command.Split(' ');
                    var target = sp[1];
                    var cmd    = sp[2];
                    desk.AddMessageLine("[Begin sudo execution block]");
                    desk.ParseCommand(target, cmd);
                    desk.AddMessage(Environment.NewLine + "[End sudo execution block]");
                }
            }
        }
コード例 #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();
        }