private async Task reportWinner() { game.EndTime = DateTime.Now; TimeSpan gameDuration = game.EndTime - game.StartTime; var scores = new List <(int score, ApiPlayer player)>(); foreach (ApiPlayer currentPlayer in game.Players) { var playerScore = 2 * game.GetNumTerritories(currentPlayer) + game.GetNumPlacedArmies(currentPlayer); scores.Add((playerScore, currentPlayer)); } var orderedScores = scores.OrderByDescending(s => s.score); var gameOverRequest = new GameOverRequest { FinalBoard = game.Board.SerializableTerritories, GameDuration = gameDuration.ToString(), WinnerName = orderedScores.First().player.Name, FinalScores = orderedScores.Select(s => $"{s.player.Name} ({s.score})") }; foreach (ApiPlayer currentPlayer in game.Players) { var response = await(currentPlayer.HttpClient.PostAsJsonAsync("/gameOver", gameOverRequest)); } }
private async Task newDoBattle() { game.StartTime = DateTime.Now; int CardBonusCount = 0; while (game.Players.Count() > 1 && game.GameState == GameState.Attacking && game.Players.Any(p => game.PlayerCanAttack(p))) { for (int i = 0; i < game.Players.Count() && game.Players.Count() > 1; i++) { var currentPlayer = game.Players.Skip(i).First() as ApiPlayer; if (game.GetNumTerritories(currentPlayer) > 0) { var usedCardBonus = await DeployPlayerArmies(currentPlayer, CardBonusCount); if (usedCardBonus) { CardBonusCount++; } if (!removedPlayers.Contains(currentPlayer)) { await DoPlayerBattle(currentPlayer); } if (!removedPlayers.Contains(currentPlayer)) { await PlayerManeuver(currentPlayer); } else { i--; } } } } logger.LogInformation("Game Over"); game.SetGameOver(); }