Beispiel #1
0
        public GameStage(
            Rules rules,
            PlayerGroupInfo playerGroupInfo,
            Action confirmAction)
        {
            Rules           = rules;
            PlayerGroupInfo = playerGroupInfo;
            ConfirmAction   = confirmAction;
            CurrentPlayer   = GetRandomPlayer();
            var deck      = CardPile.CreateDeckPile();
            var gameRound = new GameRound(Rules, PlayerGroupInfo, ConfirmAction, CurrentPlayer, deck);

            GameRoundList.Add(gameRound);
        }
Beispiel #2
0
        private GameResult GetGameResult()
        {
            var team1FinalScore = GameRoundList
                                  .Where(g => g.RoundResult != null)
                                  .Sum(g => g.RoundResult.Team1FinalScore);
            var team2FinalScore = GameRoundList
                                  .Where(g => g.RoundResult != null)
                                  .Sum(g => g.RoundResult.Team2FinalScore);
            // TODO: Maybe also count results from the current round to end early
            var endScore = Rules.EndScore;
            var hasEnded = team1FinalScore >= endScore || team2FinalScore >= endScore;

            if (!hasEnded)
            {
                return(null);
            }

            TeamInfo winner;
            var      bothOverEndScore = team1FinalScore >= endScore && team2FinalScore >= endScore;

            if (bothOverEndScore)
            {
                winner = GameRoundList
                         .Where(g => g.RoundResult != null)
                         .Last()
                         .RoundResult
                         .WinningTeam;
            }
            else
            {
                winner = team1FinalScore > team2FinalScore
                    ? PlayerGroupInfo.Team1
                    : PlayerGroupInfo.Team2;
            }
            var gameResult = new GameResult
            {
                WinningTeam     = winner,
                PlayerGroupInfo = PlayerGroupInfo,
                Team1FinalScore = team1FinalScore,
                Team2FinalScore = team2FinalScore
            };

            return(gameResult);
        }
Beispiel #3
0
 public void ProcessAction(ActionBase action)
 {
     Log.Information(action.ToString());
     CurrentGameRound.ProcessAction(action);
     if (CurrentGameRound.RoundResult != null)
     {
         Log.Information(CurrentGameRound.RoundResult.ToString());
         ConfirmAction?.Invoke();
         GameResult = GetGameResult();
         if (GameResult == null)
         {
             CurrentPlayer = PlayerGroupInfo.GetNextPlayer(CurrentPlayer.PlayerId);
             var deck      = CardPile.CreateDeckPile();
             var gameRound = new GameRound(Rules, PlayerGroupInfo, ConfirmAction, CurrentPlayer, deck);
             GameRoundList.Add(gameRound);
         }
         else
         {
             Log.Information(GameResult.ToString());
         }
     }
 }