コード例 #1
0
ファイル: MyStrategy.cs プロジェクト: znsoft/AiCup
 public int GetTicksToUpN(AHock ho, Point to, double takePuck = -1, int limit = 500)
 {
     var result = 0;
     for (; result < limit && (takePuck < 0 ? !CanStrike(ho, to) : ho.GetDistanceTo2(to) > takePuck*takePuck); result++)
     {
         ho.MoveTo(to);
     }
     return result;
 }
コード例 #2
0
ファイル: Attack.cs プロジェクト: znsoft/AiCup
        public Point FindWayPoint(Hockeyist self)
        {
            var okDist = 5 * HoRadius;

            var   bestTime = Inf;
            Point sel      = null;
            //TimerStart();
            var bot = Hockeyists.Count(x => !x.IsTeammate && IsInGame(x) && x.Y > RinkCenter.Y);
            var top = Hockeyists.Count(x => !x.IsTeammate && IsInGame(x) && x.Y <= RinkCenter.Y);

            foreach (Point p in WayPoints.ToArray().OrderBy(x => ((Point)x).GetDistanceTo(self)).Take(10))
            {
                var I = new AHock(self);
                if (p.GetDistanceTo2(I) <= okDist * okDist || MyRight() && I.X < p.X || MyLeft() && I.X > p.X)
                {
                    continue;
                }

                var cands = Hockeyists
                            .Where(x => !x.IsTeammate && IsInGame(x))
                            .Select(x => new AHock(x)).ToArray();

                var time = 0;
                var ok   = true;
                while (p.GetDistanceTo2(I) > okDist * okDist && ok)
                {
                    I.MoveTo(p);
                    foreach (var c in cands)
                    {
                        c.MoveTo(I);
                        if (CanStrike(c, I.PuckPos()) || // достанет шайбу
                            CanStrike(c, I) || // достанет меня
                            I.GetDistanceTo2(c) <= 2 * HoRadius * 2 * HoRadius // столкнется со мной
                            )
                        {
                            ok = false;
                            break;
                        }
                    }
                    time++;
                }
                if (ok)
                {
                    if (p.Y > RinkCenter.Y && bot > top || p.Y <= RinkCenter.Y && top > bot)
                    {
                        time *= 3;
                    }
                    if (time < bestTime)
                    {
                        bestTime = time;
                        sel      = p.Clone();
                    }
                }
            }
            //Log("FindWayPoint " + TimerStop());
            return(sel);
        }
コード例 #3
0
ファイル: MyStrategy.cs プロジェクト: znsoft/AiCup
        public int GetTicksToUpN(AHock ho, Point to, double takePuck = -1, int limit = 500)
        {
            var result = 0;

            for (; result < limit && (takePuck <0 ? !CanStrike(ho, to) : ho.GetDistanceTo2(to)> takePuck * takePuck); result++)
            {
                ho.MoveTo(to);
            }
            return(result);
        }
コード例 #4
0
ファイル: Attack.cs プロジェクト: znsoft/AiCup
        public Point FindWayPoint(Hockeyist self)
        {
            var okDist = 5*HoRadius;

            var bestTime = Inf;
            Point sel = null;
            //TimerStart();
            var bot = Hockeyists.Count(x => !x.IsTeammate && IsInGame(x) && x.Y > RinkCenter.Y);
            var top = Hockeyists.Count(x => !x.IsTeammate && IsInGame(x) && x.Y <= RinkCenter.Y);

            foreach (Point p in WayPoints.ToArray().OrderBy(x => ((Point) x).GetDistanceTo(self)).Take(10))
            {
                var I = new AHock(self);
                if (p.GetDistanceTo2(I) <= okDist*okDist || MyRight() && I.X < p.X || MyLeft() && I.X > p.X)
                    continue;

                var cands = Hockeyists
                    .Where(x => !x.IsTeammate && IsInGame(x))
                    .Select(x => new AHock(x)).ToArray();

                var time = 0;
                var ok = true;
                while (p.GetDistanceTo2(I) > okDist*okDist && ok)
                {
                    I.MoveTo(p);
                    foreach (var c in cands)
                    {
                        c.MoveTo(I);
                        if (CanStrike(c, I.PuckPos()) // достанет шайбу
                            || CanStrike(c, I) // достанет меня
                            || I.GetDistanceTo2(c) <= 2*HoRadius*2*HoRadius // столкнется со мной
                            )
                        {
                            ok = false;
                            break;
                        }
                    }
                    time++;
                }
                if (ok)
                {
                    if (p.Y > RinkCenter.Y && bot > top || p.Y <= RinkCenter.Y && top > bot)
                        time *= 3;
                    if (time < bestTime)
                    {
                        bestTime = time;
                        sel = p.Clone();
                    }
                }
            }
            //Log("FindWayPoint " + TimerStop());
            return sel;
        }
コード例 #5
0
ファイル: MyStrategy.cs プロジェクト: znsoft/AiCup
        public int MoveHockTo(AHock ho, Point to)
        {
            var result = 0;

            for (; !CanStrike(ho, to); result++)
            {
                ho.MoveTo(to);

                if (result > 500)
                {
                    return(result);
                }
            }
            return(result);
        }
コード例 #6
0
ファイル: MyStrategy.cs プロジェクト: znsoft/AiCup
        public int MoveHockTo(AHock ho, Point to)
        {
            var result = 0;
            for(; !CanStrike(ho, to); result++)
            {
                ho.MoveTo(to);

                if (result > 500)
                    return result;
            }
            return result;
        }