Esempio n. 1
0
        public bool FindPath(Hockeyist self, Point to, Point lookAt)
        {
            if (lookAt == null)
            {
                return(StopOn(new AHock(self), to));
            }

            var okDist = HoRadius * 1.5;

            var minTime = Inf;
            var selTurn = 0.0;
            var selSpUp = 0.0;

            for (var dir = -1; dir <= 1; dir += 2)
            {
                var hock = new AHock(self);
                for (var ticksDirect = 0; ticksDirect < 100; ticksDirect++)
                {
                    var curTime = ticksDirect;
                    var ho      = hock.Clone();
                    while (Math.Abs(ho.GetAngleTo(lookAt)) > Deg(8))
                    {
                        ho.Move(0, TurnNorm(ho.GetAngleTo(lookAt), ho.AAgility));
                        curTime++;
                    }
                    if (curTime < minTime && ho.GetDistanceTo(to) < okDist)
                    {
                        minTime = curTime;
                        if (ticksDirect == 0)
                        {
                            selSpUp = 0.0;
                            selTurn = TurnNorm(ho.GetAngleTo(lookAt), hock.AAgility);
                        }
                        else if (dir > 0)
                        {
                            selTurn = self.GetAngleTo(to.X, to.Y);
                            selSpUp = GetSpeedTo(selTurn);
                        }
                        else
                        {
                            selTurn = RevAngle(self.GetAngleTo(to.X, to.Y));
                            selSpUp = -GetSpeedTo(selTurn);
                        }
                    }
                    if (dir > 0)
                    {
                        GetTicksToUpN(hock, to, 0, 1);
                    }
                    else
                    {
                        GetTicksToDownN(hock, to, 0, 1);
                    }
                }
            }
            move.SpeedUp = selSpUp;
            move.Turn    = selTurn;
            return(minTime != Inf);
        }
Esempio n. 2
0
        public void Move(Hockeyist self, World world, Game game, Move move)
        {
            if (self.State == HockeyistState.Swinging)
            {
                move.Action = ActionType.Strike;
                return;
            }

            Init(self, world, game, move);
            if (PuckUnderOurControl)
            {
                if (ThisHasPuck)
                {
                    if (InStrikeZone())
                    {
                        if (Hypot(self.SpeedX, self.SpeedY) > 0.069)
                        {
                            move.SpeedUp = -1;
                        }
                        if (Math.Abs(TurnToNetFarCorner(self, move)) < STRIKE_ANGLE)
                        {
                            move.Action = ActionType.Swing;
                        }
                    }
                    else
                    {
                        GoToNearestStrikeZone();
                    }
                }
                else
                {
                    var nearestOpponent = GetNearestOpponent();
                    if (nearestOpponent != null)
                    {
                        if (self.GetDistanceTo(nearestOpponent) > game.StickLength)
                        {
                            move.SpeedUp = 1.0D;
                        }
                        else if (Math.Abs(self.GetAngleTo(nearestOpponent)) < 0.5D * game.StickSector)
                        {
                            move.Action = ActionType.Strike;
                        }
                        move.Turn = self.GetAngleTo(nearestOpponent);
                    }
                }
            }
            else
            {
                move.SpeedUp = 1.0D;
                move.Turn    = self.GetAngleTo(world.Puck);
                move.Action  = ActionType.TakePuck;
            }
        }
Esempio n. 3
0
 void DoMove(Hockeyist self, Point to, int direction)
 {
     if (direction > 0)
     {
         move.Turn    = self.GetAngleTo(to.X, to.Y);
         move.SpeedUp = GetSpeedTo(move.Turn);
     }
     else
     {
         move.Turn    = RevAngle(self.GetAngleTo(to.X, to.Y));
         move.SpeedUp = -GetSpeedTo(move.Turn);
     }
 }
Esempio n. 4
0
        public void Move(Hockeyist self, World world, Game game, Move move)
        {
            if (self.State == HockeyistState.Swinging)
            {
                move.Action = ActionType.Strike;
                return;
            }

            if (world.Puck.OwnerPlayerId == self.PlayerId)
            {
                if (world.Puck.OwnerHockeyistId == self.Id)
                {
                    Player opponentPlayer = world.GetOpponentPlayer();

                    double netX = 0.5D * (opponentPlayer.NetBack + opponentPlayer.NetFront);
                    double netY = 0.5D * (opponentPlayer.NetBottom + opponentPlayer.NetTop);
                    netY += (self.Y < netY ? 0.5D : -0.5D) * game.GoalNetHeight;

                    double angleToNet = self.GetAngleTo(netX, netY);
                    move.Turn = angleToNet;

                    if (Math.Abs(angleToNet) < STRIKE_ANGLE)
                    {
                        move.Action = ActionType.Swing;
                    }
                }
                else
                {
                    Hockeyist nearestOpponent = getNearestOpponent(self.X, self.Y, world);
                    if (nearestOpponent != null)
                    {
                        if (self.GetDistanceTo(nearestOpponent) > game.StickLength)
                        {
                            move.SpeedUp = 1.0D;
                        }
                        else if (Math.Abs(self.GetAngleTo(nearestOpponent)) < 0.5D * game.StickSector)
                        {
                            move.Action = ActionType.Strike;
                        }
                        move.Turn = self.GetAngleTo(nearestOpponent);
                    }
                }
            }
            else
            {
                move.SpeedUp = 1.0D;
                move.Turn    = self.GetAngleTo(world.Puck);
                move.Action  = ActionType.TakePuck;
            }
        }
Esempio n. 5
0
        public static bool CanStrike(this Hockeyist self, Unit unit)
        {
            var angle = self.GetAngleTo(unit);

            return((Math.Abs(angle) <= 0.5 * Current.Game.StickSector) &&
                   (self.GetDistanceTo(unit) <= Current.Game.StickLength));
        }
Esempio n. 6
0
        private double TurnToNetFarCorner(Hockeyist self, Move move)
        {
            double x;
            double y;

            GetNetFarCorner(out x, out y);

            var angleToNet = self.GetAngleTo(x, y);

            move.Turn = angleToNet;
            return(angleToNet);
        }
Esempio n. 7
0
        private void GoToNearestStrikeZone()
        {
            double x, y;

            GetNearestStrikeZoneCenter(out x, out y);
            var angle = self.GetAngleTo(x, y);

            if (Math.Abs(angle) > STRIKE_ANGLE)
            {
                move.Turn = angle;
            }
            move.SpeedUp = 1.0D;
        }
Esempio n. 8
0
 private bool isOpponentsInfront()
 {
     if (Math.Abs(self.GetAngleTo(opponentMinions[0])) < Math.PI / 4 &&
         Math.Abs(self.GetAngleTo(opponentMinions[1])) < Math.PI / 4)
     {
         return(true);
     }
     return(false);
 }
Esempio n. 9
0
 public static bool CanStrike(Hockeyist ho, Unit to)
 {
     return(Math.Abs(ho.GetAngleTo(to)) <= Game.StickSector / 2 &&
            ho.GetDistanceTo(to) <= Game.StickLength &&
            ho.RemainingKnockdownTicks == 0);
 }