コード例 #1
0
        /// <summary>
        /// 开始游戏流程
        /// </summary>
        public async void StartGame()
        {
            this.cts = new System.Threading.CancellationTokenSource();
            Size     = options != null ? options.initCommunitySize : 0;//初始化社群规模
            //Self = Players[1];
            if (options == null || options.firstPlayer == 0)
            {
                ActivePlayer = Players[0];
            }
            else
            {
                int firstPlayerIndex = options.firstPlayer < 0 ? ram.Next(0, Players.Count) : options.firstPlayer;
                var ps = Players.GetRange(0, firstPlayerIndex);
                Players.RemoveRange(0, firstPlayerIndex);
                Players.AddRange(ps);
            }
            if (options == null || options.chooseCharacter)      //选择角色
            {
                if (options == null || !options.doubleCharacter) //单角色三选一
                {
                    Task <Response>[] chooseHero = await waitAnswerAll(Players, p => WaitAnswer(new ChooseHeroRequest()
                    {
                        PlayerId = p.Id,
                        HeroIds  = new List <int>(characterDeck.GetRange(Players.IndexOf(p) * 3, 3).Select(c => c.Id))
                    }.SetTimeOut(RequestTime)), t =>
                    {
                        ChooseHeroResponse response = t.Result as ChooseHeroResponse;
                        Player player = GetPlayer(response.PlayerId);
                        player.Hero   = characterDeck.Find(c => c.Id == response.HeroId);
                        player.Hero.Init(this, player);
                        return(Task.CompletedTask);
                    });

                    //foreach (var response in chooseHero)
                    //{
                    //    var chooseHeroResponse = response.Result as ChooseHeroResponse;
                    //    Player player = GetPlayer(chooseHeroResponse.PlayerId);
                    //    player.Hero = characterDeck.Find(c => c.Id == chooseHeroResponse.HeroId);
                    //    player.Hero.Init(this, player);
                    //}
                }
                else
                {
                    //TODO:双角色六选二
                }
            }
            //游戏开始时 所有玩家抽两张牌
            foreach (var player in Players)
            {
                await player.DrawActionCard(this, 2);
            }
            //游戏执行阶段
            await EventSystem.Call(EventEnum.GameStart, 0);

            await NewRound();
        }
コード例 #2
0
        /// <summary>
        /// 开始游戏流程
        /// </summary>
        public async void StartGame()
        {
            this.cts = new System.Threading.CancellationTokenSource();
            Size     = options != null ? options.initCommunitySize : 0;//初始化社群规模
            //Self = Players[1];
            if (options == null || options.firstPlayer == 0)
            {
                ActivePlayer = Players[0];
            }
            else
            {
                int firstPlayerIndex = options.firstPlayer < 0 ? ram.Next(0, Players.Count) : options.firstPlayer;
                var ps = Players.GetRange(0, firstPlayerIndex);
                Players.RemoveRange(0, firstPlayerIndex);
                Players.AddRange(ps);
            }
            if (options == null || options.chooseCharacter)      //选择角色
            {
                if (options == null || !options.doubleCharacter) //单角色三选一
                {
                    Task <Response>[] chooseHero = new Task <Response> [Players.Count];
                    for (int i = 0; i < Players.Count; i++)
                    {
                        Player p = Players[i];
                        chooseHero[i] = WaitAnswer(new ChooseHeroRequest()
                        {
                            PlayerId = p.Id, HeroIds = new List <int>(characterDeck.GetRange(i * 3, 3).Select(c => c.Id))
                        }.SetTimeOut(RequestTime));
                    }

                    await Task.WhenAll(chooseHero);

                    foreach (var response in chooseHero)
                    {
                        var    chooseHeroResponse = response.Result as ChooseHeroResponse;
                        Player player             = GetPlayer(chooseHeroResponse.PlayerId);
                        player.Hero = characterDeck.Find(c => c.Id == chooseHeroResponse.HeroId);
                        player.Hero.Init(this, player);
                    }
                    Log.Debug($"所有玩家选择英雄完毕!");
                }
                else
                {
                    //TODO:双角色六选二
                }
            }
            //游戏开始时 所有玩家抽两张牌
            foreach (var player in Players)
            {
                await player.DrawActionCard(this, 2);
            }
            //游戏执行阶段
            await EventSystem.Call(EventEnum.GameStart, 0);

            await NewRound();
        }