Example #1
0
        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));
            }
        }
Example #2
0
        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();
        }