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