private async Task gameflow() { await init(); Dictionary <int, IResponse> initReplaceResponses = await answers.askAll(sortedPlayers.Select(p => p.id).ToArray(), new InitReplaceRequest() { }, option.timeoutForInitReplace); foreach (var result in initReplaceResponses) { THHPlayer player = getPlayer(result.Key); await player.initReplace(this, getCards((result.Value as InitReplaceResponse).cardsId)); } await start(); currentPlayer = sortedPlayers[0]; for (int i = 0; i < 100; i++) { await turnStart(currentPlayer); await turnLoop(currentPlayer); await turnEnd(currentPlayer); currentPlayer = getPlayerForNextTurn(currentPlayer); } await gameEnd(new THHPlayer[0]); }
private async Task gameflow(Action onInited = null) { await init(); Task <Dictionary <int, IResponse> > task = answers.askAll(sortedPlayers.Select(p => p.id).ToArray(), new InitReplaceRequest() { }, option.timeoutForInitReplace); onInited?.Invoke(); Dictionary <int, IResponse> initReplaceResponses = await task; if (!isRunning) { return; } foreach (var result in initReplaceResponses) { THHPlayer player = getPlayer(result.Key); if (result.Value is InitReplaceResponse initReplace) { await player.initReplace(this, getCards(initReplace.cardsId)); } else if (result.Value is SurrenderResponse surrender) { await this.surrender(player); } } await start(); currentPlayer = sortedPlayers[0]; for (int i = 0; i < 100; i++) { await turnStart(currentPlayer); await turnLoop(currentPlayer); await turnEnd(currentPlayer); currentPlayer = getPlayerForNextTurn(currentPlayer); } await gameEnd(new THHPlayer[0]); }