예제 #1
0
        public KickResult KickBall()
        {
            var elapsed = (_elapsedMilliseconds / _discrTimeStep) * _discrTimeStep;

            var time = elapsed / 1000.0;

            var ballShift = _physics.EvaluteShift(time);

            var kickResult = new KickResult(ballShift, time);

            return kickResult;
        }
        public KickResult KickBall()
        {
            var error = _random.Sample();

            var x = (_holePositionX - _ballPositionX) + error;

            var elapsedTime = _ballKick.EvaluteElapsedTime(new Vector2(x, 0));

            var kickResult = new KickResult(_ballKick.EvaluteShift(elapsedTime), elapsedTime);

            return kickResult;
        }
        public KickResult KickBall()
        {
            var error = Normal.Sample(_playerModel.ErrorMean, _playerModel.ErrorStddev);

            var x0 = _hole.Position.X - _ball.Position.X;

            var x = x0 + error;

            var elapsedTime = _ballKick.EvaluteElapsedTime(new Vector2(x, 0));

            var kickResult = new KickResult(_ballKick.EvaluteShift(elapsedTime), elapsedTime);

            return kickResult;
        }
        public KickResult KickBall()
        {
            var lastUserStrike = _player.Strikes.Last();

            var probability = lastUserStrike.IsHit
                ? _competitorModel.BotHitProbabilityIfUserHit
                : _competitorModel.BotHitProbabilityIfUserMiss;

            double error = SampleError(probability);

            var x = _hole.Position.X - _ball.Position.X + error;

            //TODO: Возможно ошибка
            //var elapsedTime = (x - _strikeModel.Model.Delay) / _strikeModel.Model.Velocity;

            var elapsedTime = _ballKick.EvaluteElapsedTime(new Vector2(x, 0));

            var kickResult = new KickResult(_ballKick.EvaluteShift(elapsedTime), elapsedTime);

            return kickResult;
        }
예제 #5
0
        public static Strike CreateStrike(Ball ball, Hole hole, StrikeInfo currentKick, KickResult kickResult,
            TimeSpan timeBeforeSpaceDown = new TimeSpan())
        {
            var kickedBall = new Ball()
            {
                Size = ball.Size,
                Position = ComputeBallPosition(ball, kickResult)
            };

            var miss = GetMiss(hole, kickedBall);

            var strikeTimeSpan = TimeSpan.FromSeconds(kickResult.ElapsedTime);

            var strike = new Strike
            {
                Number = currentKick.RepeatTimes,
                StrikeInfo = currentKick,
                DateTime = System.DateTime.Now,
                ErrorDistance = kickedBall.Position.X - hole.Position.X,
                IsHit = Math.Abs(miss - 0.0) < 0.001,
                MissDistance = Math.Round(miss, 3),
                MissTime = Math.Round(miss / currentKick.Model.Velocity, 3),
                BeforeStrikeTimeSpan = timeBeforeSpaceDown,
                StrikeTimeSpan = strikeTimeSpan,
                TotalTimeSpan = timeBeforeSpaceDown + strikeTimeSpan,
                StartBallPosition = ball.Position.Copy(),
                StartHolePosition = hole.Position.Copy()
            };

            return strike;
        }
예제 #6
0
 private static Vector2 ComputeBallPosition(Ball ball, KickResult kickResult)
 {
     return new Vector2(ball.Position.X + kickResult.BallShift.X,
                         ball.Position.Y + kickResult.BallShift.Y);
 }