コード例 #1
0
        private int GetDemage(int currentHealth, BattleResultConfiguration config)
        {
            switch (config.HealthChangeType)
            {
            case ChangeValueTypes.Percent:
                return((int)Math.Round(currentHealth * config.HealthChange / 100.0));

            default:
                return(config.HealthChange);
            }
        }
コード例 #2
0
        public ActionResultBase Process(GameState state, GameConfiguration config)
        {
            AttackActionResult result = new AttackActionResult();

            int winProbability =
                Math.Min(
                    config.Battle.MinWinProbability + state.CurrentPlayer.Power * config.Battle.IncreasePowerProbability,
                    config.Battle.MaxWinProbability);

            int random = Generator.Next(1, 100);

            BattleResultConfiguration battleResult = null;

            //Win
            if (random <= winProbability)
            {
                battleResult = config.Battle.WinResult;
                result.IsWin = true;
                state.Attacks++;
            }
            //Loose
            else
            {
                battleResult = config.Battle.LooseResult;
            }

            state.CurrentPlayer.ApplyDamage(-GetDemage(state.CurrentPlayer.Health, battleResult));
            state.CurrentPlayer.AddCoins(battleResult.CoinsChange);
            result.Level = state.Attacks;

            if (state.CurrentPlayer.Health <= 0)
            {
                result.IsDead = true;
            }

            return(result);
        }