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); } }
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); }