コード例 #1
0
        //TODO: CalculateAge from BirthDate
        public void CalculateAge()
        {
            _ageCalculated = true;

            PersonAge personAge = null;

            try
            {
                personAge = SharedKernel.Custom.Utils.CalculateAge(BirthDate);
            }
            catch (Exception ex)
            {
            }

            if (null == personAge)
            {
                return;
            }

            Age            = personAge.Age;
            _ageCalculated = false;
            var ageUnit = AgeUnitOptions.FirstOrDefault(x => x.Value == personAge.AgeUnit);

            _ageUnitCalculated = true;
            SelectedAgeUnit    = ageUnit;
            _ageUnitCalculated = false;
        }
コード例 #2
0
        public override GenRange Calculate(BodyMassIndex bmi, PersonAge age)
        {
            Range <Rating> rangeForPower;

            if (bmi.BMI > 23 && bmi.Height.Centimeters >= 185)
            {
                rangeForPower = MaxRange;
            }
            else if (bmi.BMI < 22)
            {
                rangeForPower = MinRange;
            }
            else
            {
                rangeForPower = MediumRange;
            }

            // take player's age into account
            if (age > PersonAge.FromYears(25))
            {
                rangeForPower = new Range <Rating>(rangeForPower.Lower * 1.05, rangeForPower.Upper * 1.05);
            }
            else if (age < PersonAge.FromYears(20))
            {
                rangeForPower = new Range <Rating>(rangeForPower.Lower * 0.8, rangeForPower.Upper * 0.9);
            }
            return(new GenRange(FeatureType.Power, rangeForPower));
        }
コード例 #3
0
 public void SetUp()
 {
     _personAge = new PersonAge(3);
     _dob       = DateTime.Today.AddYears(-10);
     _dob       = _dob.AddMonths(-2);
     _dob       = _dob.AddDays(-1);
 }
コード例 #4
0
        public override GenRange Calculate(BodyMassIndex bmi, PersonAge age)
        {
            Range <Rating> rangeForSpeed;

            if (bmi.BMI > 22.8)
            {
                rangeForSpeed = MinRange;
            }
            else if (bmi.BMI < 21.2)
            {
                rangeForSpeed = MaxRange;
            }
            else
            {
                rangeForSpeed = MediumRange;
            }

            // take player age into account
            if (age > PersonAge.FromYears(30))
            {
                rangeForSpeed = new Range <Rating>(rangeForSpeed.Lower * 0.82, rangeForSpeed.Upper * 0.88);
            }
            else if (age < PersonAge.FromYears(23))
            {
                rangeForSpeed = new Range <Rating>(rangeForSpeed.Lower * 1.052, rangeForSpeed.Upper * 1.055);
            }
            return(new GenRange(FeatureType.Acceleration, rangeForSpeed));
        }
コード例 #5
0
ファイル: PersonAge.cs プロジェクト: AdrianFreemantle/DDD
        public virtual bool Equals(PersonAge other)
        {
            if (null != other && other.GetType() == GetType())
            {
                return other.Age == Age;
            }

            return false;
        }
コード例 #6
0
        public void should_CalculateBirthDate_From_AgeInMonths_LessThan12()
        {
            var checkDate = DateTime.Today.AddMonths(-1);

            _personAge = PersonAge.CreateFromMonths(1);
            var dob = Utils.CalculateBirthDate(_personAge);

            Assert.AreEqual(checkDate, dob);
            Console.WriteLine($"{_personAge} Born: {dob:yyyy MMMM dd}");
        }
コード例 #7
0
        public void ImproveRatingFromAge_2()
        {
            Rating rating          = new Rating(0.8);
            var    ageRating       = new AgeRating(PersonAge.FromYears(27), rating);
            var    newRatingForAge = Phase1Evolution.Value.ImproveRatingFromAge(ageRating, Duration.FromMonths(1));

            Assert.IsNotNull(newRatingForAge);
            Assert.AreEqual(Duration.FromMonths(27 * 12 + 1).Years, newRatingForAge.Age.Years);
            Assert.AreEqual(0.81, newRatingForAge.Rating.Value);
        }
コード例 #8
0
        public static ReadOnlyCollection <GenRange> Generate(BodyMassIndex bmi, PersonAge age)
        {
            var list = new List <GenRange>();

            list.Add(new BmiRangeForPowerCalculator().Calculate(bmi, age));
            list.Add(new BmiRangeForHeaderCalculator().Calculate(bmi, age));
            list.Add(new BmiRangeForSpeedCalculator().Calculate(bmi, age));
            list.Add(new BmiRangeForAccelerationCalculator().Calculate(bmi, age));

            return(list.AsReadOnly());
        }
コード例 #9
0
        public void CalculateBirthDate()
        {
            var personAge = PersonAge.Create(Age, SelectedAgeUnit.Value);

            try
            {
                BirthDate = SharedKernel.Custom.Utils.CalculateBirthDate(personAge);
            }
            catch (Exception ex)
            {
            }
        }
コード例 #10
0
        public Date Generate()
        {
            // retrieve game current date
            DateTime gameDate = _game.CurrentDate;

            // create a random player between 14 and 18 years old
            PersonAge age = _ageRandomiser.Randomise(
                PersonAge.FromDays(14 * 365),
                PersonAge.FromDays(18 * 365 + 1));

            return(new Date(gameDate.AddDays(-age.Days)));
        }
コード例 #11
0
        public FeatureImprovementRatio GetImprovementFromAge(PersonAge age)
        {
            CheckRule(new PersonAgeMustBeWithinAgeRangeRule(age, AgeRange));

            // recalculer l'abscisse pour que 0 <= x <= 1
            double x = (age.Years - AgeRange.Lower.Years) / Duration.FromAgeRange(AgeRange).Years;

            // calculer y entre 0 et 1
            double y = Math.Pow(x, EvolutionCurve.Value) * MaxFeatureImprovement.Value;


            return(new FeatureImprovementRatio(y));
        }
コード例 #12
0
        public override GenRange Calculate(BodyMassIndex bmi, PersonAge age)
        {
            Range <Rating> rangeForHeader;

            if (bmi.Height >= _minimuHeightForMaxRange)
            {
                rangeForHeader = MaxRange;
            }
            else if (bmi.Height < _minimuHeightForMinRange)
            {
                rangeForHeader = MinRange;
            }
            else
            {
                rangeForHeader = MediumRange;
            }
            return(new GenRange(FeatureType.Header, rangeForHeader));
        }
コード例 #13
0
        public AgeRating ImproveRatingFromAge(AgeRating currentAgeRating, Duration evolutionDuration)
        {
            if (currentAgeRating is null)
            {
                throw new ArgumentNullException(nameof(currentAgeRating));
            }
            if (evolutionDuration is null)
            {
                throw new ArgumentNullException(nameof(evolutionDuration));
            }

            // on ajoute la durée à l'âge du joueur (PersonAge + Duration = PersonAge)
            PersonAge futureAge = currentAgeRating.Age + evolutionDuration;

            FeatureImprovementRatio improvement = GetImprovementFromAge(futureAge) - GetImprovementFromAge(currentAgeRating.Age);

            return(new AgeRating(futureAge, improvement.ImproveRating(currentAgeRating.Rating)));
        }
コード例 #14
0
        public void should_Display_Full_AgeUnit()
        {
            _personAge = new PersonAge(10);
            var display = _personAge.ToFullAgeString();

            Assert.That(display, Does.Contain("Years"));
            Console.WriteLine(_personAge.ToFullAgeString());

            _personAge.Months = 2;
            display           = _personAge.ToFullAgeString();
            Assert.That(display, Does.Contain("Months"));
            Console.WriteLine(_personAge.ToFullAgeString());

            _personAge.Days = 4;
            display         = _personAge.ToFullAgeString();
            Assert.That(display, Does.Contain("Days"));
            Console.WriteLine(_personAge.ToFullAgeString());
        }
コード例 #15
0
        public BodyMassIndex Generate(Country country, Gender playerGender, Percentile percentile, Date dob)
        {
            // retrieve game current date
            DateTime gameDate = _game.CurrentDate;

            // get player age
            PersonAge playerAge = PersonAge.FromDate(dob, gameDate);

            playerAge = playerAge.AsRoundedYears();             // round the value to be able to filter on it.

            AbstractPercentileGrowthSet growthset = _percentileGrowthSetRepository.GetPercentileGrowthSet(playerGender);

            PercentileGrowth percentileGrowth = growthset.GetForPercentile(percentile);

            StatureForAge stature      = percentileGrowth.GetStatureForAge(playerAge);
            WeightForAge  weightForAge = percentileGrowth.GetWeightForAge(playerAge);

            return(new BodyMassIndex(stature.Stature, weightForAge.Mass));
        }
コード例 #16
0
        public async Task <Player> GenerateAsync(Gender?playerGender = null, Country[] countries = null, PlayerPosition playerPosition = null)
        {
            if (playerGender == null)
            {
                playerGender = _genderGenerator.Generate();
            }

            if (countries == null)
            {
                countries = _countriesGenerator.Generate().Value;
            }

            PersonName playerName = await _nameGenerator.GenerateAsync(
                playerGender.Value,
                countries.FirstOrDefault());

            Date dob = _dobGenerator.Generate();

            PersonAge playerAge = PersonAge.FromDate(dob, _game.CurrentDate);

            Location birthLocation = await _birthLocationGenerator.GenerateAsync(countries.FirstOrDefault());

            Foot               playerFoot       = _favouriteFootGenerator.Generate();
            Percentile         percentile       = _percentileGenerator.Generate();
            BodyMassIndex      bmi              = _bmiGenerator.Generate(countries.FirstOrDefault(), playerGender.Value, percentile, dob);
            PlayerPosition     position         = _playerPositionGenerator.Generate();
            PhysicalFeatureSet playerFeatureSet = _physicalFeatureSetGenerator.Generate(position, bmi, countries.FirstOrDefault(), playerAge);

            // first name & last name => according to the player's country
            return(new PlayerBuilder()
                   .WithName(playerName)
                   .WithGender(playerGender.Value)
                   .WithBirthInfo(new BirthInfo(dob, birthLocation))
                   .WithFoot(playerFoot)
                   .WithPercentile(percentile)
                   .WithBodyMassIndex(bmi)
                   .WithPlayerPosition(position)
                   .WithFeatureSet(playerFeatureSet)
                   .WithCountries(countries)
                   .Build());
        }
コード例 #17
0
        public PhysicalFeatureSet Generate(PlayerPosition position, BodyMassIndex bmi, Country country, PersonAge playerAge)
        {
            PlayerPositionGenerationRangeDefinition playerPositionGenRange = PlayerPositionGenerationRangeDefinition.GetFromPosition(position);

            ReadOnlyCollection <GenRange> positionGenRanges = playerPositionGenRange.GetGenerationRangeDefinitions();
            ReadOnlyCollection <GenRange> bmiGenRanges      = BodyMassIndexGenerationRangeDefinition.Generate(bmi, playerAge);

            // plages de génération différentes en fonction de
            // - la position du joueur
            // - du BMI
            // - du pays (à voir plus tard)
            // - [TODO] de l'âge du joueur

            PhysicalFeatureSet set = PhysicalFeatureSet.CreateFeatureSet(position.PositionCategory);

            Parallel.ForEach(set.PhysicalFeatures, feature =>
            {
                //	foreach (PhysicalFeature feature in set.PhysicalFeatures)
                //{
                Rating rating;

                GenRange genRangeFromPosition = positionGenRanges.FirstOrDefault(c => c.FeatureType == feature.FeatureType);
                GenRange genRangeFromBmi      = bmiGenRanges.FirstOrDefault(c => c.FeatureType == feature.FeatureType);

                if (genRangeFromBmi != null && genRangeFromPosition != null)
                {
                    Range <Rating> range = Range <Rating> .MergeRanges(new Range <Rating>[]
                    {
                        genRangeFromBmi.RatingRange,
                        genRangeFromPosition.RatingRange
                    });
                    rating = _randomiser.Randomise(range);
                }
                else
                {
                    if (genRangeFromPosition != null)
                    {
                        rating = _randomiser.Randomise(genRangeFromPosition.RatingRange);
                    }
                    else
                    {
                        //if (feature.FeatureType == FeatureType.Morale)
                        //{
                        //	rating = _randomiser.Randomise();
                        //}
                        //else
                        //{
                        rating = _randomiser.Randomise(_youngPlayerFeatureRatingRange);
                        //}
                    }
                }
                feature.ChangeRating(rating);
                //}
            });
            return(set);
        }
コード例 #18
0
 public abstract GenRange Calculate(BodyMassIndex bmi, PersonAge age);
コード例 #19
0
 public StatureForAge GetStatureForAge(PersonAge age)
 => _staturesForAges.FirstOrDefault(sfa => sfa.Age.Equals(age));
コード例 #20
0
 public WeightForAge GetWeightForAge(PersonAge age)
 => _weightForAges.FirstOrDefault(wfa => wfa.Age.Equals(age));
コード例 #21
0
 public void SetUp()
 {
     _personAge = new PersonAge(50);
 }
コード例 #22
0
 public PersonAgeMustBeWithinAgeRangeRule(PersonAge age, Range <PersonAge> validRange)
 {
     _age        = age;
     _validRange = validRange;
 }
コード例 #23
0
 public StatureForAge(int ageInYears, UnitsNet.Length stature)
 {
     Age     = PersonAge.FromYears(ageInYears);
     Stature = stature;
 }
コード例 #24
0
 public static Phase1Evolution Create(EvolutionCurve evolutionCurve)
 => new Phase1Evolution(new Range <PersonAge>(PersonAge.FromYears(AGE_MIN), PersonAge.FromYears(AGE_MAX)), evolutionCurve);
コード例 #25
0
 public WeightForAge(int ageInYears, UnitsNet.Mass mass)
 {
     Age  = PersonAge.FromYears(ageInYears);
     Mass = mass;
 }
コード例 #26
0
ファイル: AgeRating.cs プロジェクト: kwentinn/Footballista
 public AgeRating(PersonAge age, Rating rating)
 {
     Age    = age ?? throw new ArgumentNullException(nameof(age));
     Rating = rating ?? throw new ArgumentNullException(nameof(rating));
 }
コード例 #27
0
        public void Phase1Evolution_GetValue()
        {
            FeatureImprovementRatio improvement = Phase1Evolution.Value.GetImprovementFromAge(PersonAge.FromYears(16));

            Assert.IsNotNull(improvement);
            Assert.AreEqual(0.01, improvement.Value);
        }
コード例 #28
0
        public void Phase1Evolution_ImproveRating4()
        {
            FeatureImprovementRatio improvement = Phase1Evolution.Value.GetImprovementFromAge(PersonAge.FromYears(28));

            Rating rating    = new Rating(0.7);
            var    newRating = improvement.ImproveRating(rating);

            Assert.IsNotNull(newRating);
            Assert.AreEqual(0.99, newRating.Value);
        }
コード例 #29
0
        public void GetValue_Pass28_ShouldReturnValue()
        {
            FeatureImprovementRatio improvement = Phase1Evolution.Value.GetImprovementFromAge(PersonAge.FromYears(28));

            Assert.IsNotNull(improvement);
            Assert.AreEqual(0.5, improvement.Value);
        }