public Competitor(double ballPositionX, double holePositionX, IRandom random, IBallKickPhysics ballKick)
 {
     _ballPositionX = ballPositionX;
     _holePositionX = holePositionX;
     _random = random;
     _ballKick = ballKick;
 }
        public static IPlayer CreateCompetitor(StrikeInfo strikeModel, Ball ball, Hole hole, User player, ExperimentHistory history, IBallKickPhysics ballKick)
        {
            if (history == null)
                throw new NullReferenceException("history");

            IPlayer competitor;

            var competitorModel = strikeModel.CompetitorModel;

            if (competitorModel == null)
                throw new NullReferenceException("Модель соперника не задана");

            if (competitorModel is UniformCompetitorModel)
            {
                competitor = new UniformCompetitor(ball, hole, strikeModel.CompetitorModel as UniformCompetitorModel, player, ballKick);
            }
            else if (competitorModel is NormalAdaptiveCompetitorModel)
            {
                var errorGenerator = new NormalAdaptiveCompetitorRandom(strikeModel.CompetitorModel as NormalAdaptiveCompetitorModel, history);

                competitor = new Competitor(ball.Position.X, hole.Position.X, errorGenerator, ballKick);
            }
            else if (competitorModel is UniformAdaptiveCompetitorModel)
            {
                var errorGenerator = new UniformAdaptiveCompetitorRandom(strikeModel.CompetitorModel as UniformAdaptiveCompetitorModel, history, strikeModel.Hole.Size, strikeModel.Ball.Size);

                competitor = new Competitor(ball.Position.X, hole.Position.X, errorGenerator, ballKick);
            }
            else
            {
                throw new InvalidOperationException($"Модель соперника \"{competitorModel.GetType().Name}\" не поддерживается");
            }

            return competitor;
        }
        public NormalRandomPlayer(Ball ball, Hole hole, NormalPlayerModel playerModel, IBallKickPhysics ballKick)
        {
            _ball = ball;
            _hole = hole;
            _ballKick = ballKick;

            _playerModel = playerModel;
        }
        public UniformCompetitor(Ball ball, Hole hole, UniformCompetitorModel competitorModel, User player, IBallKickPhysics ballKick)
        {
            _player = player;
            _ballKick = ballKick;
            _ball = ball;
            _hole = hole;
            _competitorModel = competitorModel;

            if (_competitorModel == null)
                throw new NullReferenceException("Не задана модель соперника");
        }
 public Player(int discrTimeStep, long elapsedMilliseconds, IBallKickPhysics physics)
 {
     _discrTimeStep = discrTimeStep;
     _elapsedMilliseconds = elapsedMilliseconds;
     _physics = physics;
 }