Ejemplo n.º 1
0
        public Confidence Evaluate(AdvancedRobot robot, ScannedRobotEvent e, BattleEvents battleEvents)
        {
            Confidence confidence = Confidence.DonotBlameMeIfILoose;

            if (e.Distance >= 200)
            {
                if (robot.Energy < e.Energy)
                {
                    confidence = Confidence.DesignedForThis;
                }
                else
                {
                    confidence = Confidence.CanHandleIt;
                }
            }
            else
            {
                if (robot.Energy < e.Energy)
                {
                    confidence = Confidence.TryMe;
                }
                else
                {
                    confidence = Confidence.DonotBlameMeIfILoose;
                }
            }

            return(confidence);
        }
Ejemplo n.º 2
0
        private static void AddSomeBattles()
        {
            var Darkwarevents    = new List <BattleEvents>();
            var BattleofMongolia = new BattleEvents {
                Description = "The final battle for the Mongolian Empire"
            };

            Darkwarevents.Add(BattleofMongolia);

            var DarkwarLog = new BattleLog {
                Name = "Dark War Battlelog", BattleEvents = Darkwarevents
            };
            DateTime darkwartimestart = DateTime.Parse("1573/10/12");
            DateTime darkwartimesend  = DateTime.Parse("1575/03/19");

            var Darkwar = new Battle {
                Name = "The Dark War", Description = "The bloodiest war in histoy", Brutal = true, Startdate = darkwartimestart, Enddate = darkwartimesend, BattleLog = DarkwarLog
            };



            using (var context = new SamuraiContext())
            {
                context.Battles.Add(Darkwar);
                context.SaveChanges();
            }
        }
Ejemplo n.º 3
0
        /*
         * In this robot, as in many others, onScannedRobot is used as the main place to put actions done every tick.
         */
        public Operations HandleScanedRobot(AdvancedRobot robot, ScannedRobotEvent e, ScannedRobotEvent previousScaned,
                                            Operations operations, BattleEvents battleEvents)
        {
            var newOperations = operations.Clone();

            SetFirePowerBasedOnEnergy(robot, e, battleEvents);

            double absBearing = e.BearingRadians + robot.HeadingRadians;

            /*
             * ==================Movement Section============================
             * This makes us put a log into our log when we notice the enemy firing.
             * To see the actual logging of the wave, look at the logWave method.
             */
            double       energyChange = (enemyEnergy - (enemyEnergy = e.Energy));
            MovementWave w;

            if (energyChange <= 3 && energyChange >= 0.1)
            {
                logMovementWave(e, energyChange, robot);
            }

            /*
             * After we are done checking to see if we need to log any waves, we'll decide where to move.
             * To see this process take a peek at the chooseDirection method.
             */
            chooseDirection(project(new PointF((float)robot.X, (float)robot.Y), e.Distance, absBearing), newOperations, robot);

            /*
             * logs a gun wave when we fire;
             */
            if (robot.GunHeat == 0)
            {
                logFiringWave(e, robot);
            }

            /*
             * This method checks our waves to see if they have reached the enemy yet.
             */
            checkFiringWaves(project(new PointF((float)robot.X, (float)robot.Y), e.Distance, absBearing), robot);

            /*
             * Aiming our gun and firing
             */
            newOperations.TurnGunRightRadians = Utils.NormalRelativeAngle(absBearing - robot.GunHeadingRadians)
                                                + gunAngles[8 + (int)(e.Velocity * Math.Sin(e.HeadingRadians - absBearing))];
            if (robot.Energy >= 5)
            {
                newOperations.BulletPower = FIRE_POWER;
            }
            else //don't fire gun if we are about to die, hoping that enemy will reach to diable first
            {
                newOperations.BulletPower = null;
            }

            newOperations.TurnRadarRightRadians = Utils.NormalRelativeAngle(absBearing - robot.RadarHeadingRadians) * 2;

            return(newOperations);
        }
Ejemplo n.º 4
0
        public Operations HandleScanedRobot(AdvancedRobot robot, ScannedRobotEvent e, ScannedRobotEvent previousScaned,
                                            Operations operations, BattleEvents battleEvents)
        {
            var calculatedParams = new CalculatedParams(robot, e);
            var newOperations    = operations.Clone();

            doMoebius(0, patternMatcher.Length, e, SEARCH_DEPTH, calculatedParams.AbsoluteBearing, newOperations, robot);
            newOperations.TurnRadarRightRadians = Utils.NormalRelativeAngle(calculatedParams.AbsoluteBearing - robot.RadarHeadingRadians) * 2;
            return(newOperations);
        }
Ejemplo n.º 5
0
 public BaseGameEvents()
 {
     Player   = new PlayerEvents();
     Time     = new TimeEvents();
     Monsters = new MonsterEvents();
     Entities = new EntityEvents();
     Flow     = new FlowEvents();
     Health   = new HPEvents();
     Battle   = new BattleEvents();
     Traps    = new TrapEvents();
     Blocks   = new BlockingEvents();
 }
Ejemplo n.º 6
0
 public void Connect(params Battle[] battles)
 {
     if (battles != null)
     {
         foreach (var battle in battles)
         {
             if (battle != null)
             {
                 BattleEvents.Add(new BattleEvent()
                 {
                     Battle = battle
                 });
             }
         }
     }
 }
Ejemplo n.º 7
0
        private static void AddOneSamuraiWithRelatedData()
        {
            var BattleofChinaevents = new List <BattleEvents>();
            var BattleofChina       = new BattleEvents {
                Description = "The battle of China"
            };

            BattleofChinaevents.Add(BattleofChina);

            var BattleofChinaLog = new BattleLog
            {
                Name         = "Battle of China Logs",
                BattleEvents = BattleofChinaevents,
            };

            // var Djingisquotelist = new List<Quotestext>();
            // Djingisquotelist.Add(Lame);
            // Djingisquotelist.Add(Awesome);
            var Djingis = new Samurai {
                Name = "Djingis khan", Age = 60, Haircut = Haircut.Oicho
            };

            var b1 = new Battle
            {
                Name           = "Battle of China",
                BattleLog      = BattleofChinaLog,
                Startdate      = DateTime.Parse("1553/12/10"),
                Enddate        = DateTime.Parse("1559/05/25"),
                SamuraiBattles = new List <SamuraiBattle>
                {
                    new SamuraiBattle {
                        Samurai = Djingis
                    },
                }
            };

            using (var context = new SamuraiContext())
            {
                context.Battles.Add(b1);
                context.Samurais.Add(Djingis);
                context.SaveChanges();
            }
        }
Ejemplo n.º 8
0
        public Confidence Evaluate(AdvancedRobot robot, ScannedRobotEvent e, BattleEvents battleEvents)
        {
            Confidence confidence = Confidence.DonotBlameMeIfILoose;

            return(confidence);
        }
Ejemplo n.º 9
0
 Confidence IHandleScanedRobot.Evaluate(AdvancedRobot robot, ScannedRobotEvent e, BattleEvents battleEvents)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 10
0
 Operations IHandleScanedRobot.HandleScanedRobot(AdvancedRobot robot, ScannedRobotEvent e, ScannedRobotEvent previousScaned, Operations operations, BattleEvents battleEvents)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 11
0
 private static void SetFirePowerBasedOnEnergy(AdvancedRobot robot, ScannedRobotEvent e, BattleEvents battleEvents)
 {
     if (robot.Energy > 70)
     {
         FIRE_POWER = 3;
     }
     else if (robot.Energy <= 70 && robot.Energy > 50)
     {
         FIRE_POWER = 1;
     }
     else if (robot.Energy <= 50 && robot.Energy >= 30 || e.Energy < 15)
     {
         FIRE_POWER = 0.5;
     }
     else
     {
         FIRE_POWER = 0.1;
     }
 }
Ejemplo n.º 12
0
        public Operations HandleScanedRobot(AdvancedRobot robot, ScannedRobotEvent e, ScannedRobotEvent previousScaned,
                                            Operations operations, BattleEvents battleEvents)
        {
            var newOperations = operations.Clone();

            double absoluteBearing   = robot.HeadingRadians + e.BearingRadians;
            PointF myLocation        = new PointF((float)robot.X, (float)robot.Y);
            PointF predictedLocation = projectMotion(myLocation, absoluteBearing, e.Distance);
            double predictedHeading;
            double enemyTurnRate = -Utils.NormalRelativeAngle(expectedHeading - (predictedHeading = expectedHeading = e.HeadingRadians));
            double bulletPower   = Math.Min(e.Distance < 250 ? 500 / e.Distance : 200 / e.Distance, 3);

            int time = 0;

            while ((time++) * (20 - (3 * bulletPower)) < myLocation.Distance(predictedLocation) - 18)
            {
                predictedHeading += (enemyTurnRate / 3);
                predictedLocation = projectMotion(predictedLocation, predictedHeading, e.Velocity);

                if (!new RectangleF(18, 18, 764, 564).Contains(predictedLocation))
                {
                    break;
                }
            }

            double maxValue = Double.MinValue;
            double angle    = 0;

            do
            {
                double value          = Math.Abs(Math.Cos(Utils.NormalRelativeAngle(absoluteBearing - angle))) * e.Distance / 150;
                PointF testedLocation = projectMotion(myLocation, angle, 8);

                value -= testedLocation.Distance(predictedLocation);
                value -= testedLocation.Distance(new PointF(400, 300)) / 3;

                if (!new RectangleF(30, 30, 740, 540).Contains(testedLocation))
                {
                    value -= 10000;
                }

                if (value > maxValue)
                {
                    maxValue = value;
                    double turnAngle = angle - robot.HeadingRadians;
                    if (headingEnemy)
                    {
                        newOperations.Ahead            = (Math.Cos(turnAngle) > 0 ? 100 : -100);
                        newOperations.TurnRightRadians = (Math.Tan(turnAngle));
                    }
                    else
                    {
                        var    absoluteBearingMedkit = lastMedicalKitEvent.BearingRadians + robot.HeadingRadians;
                        double turn = absoluteBearingMedkit + Math.PI / 2;
                        turn -= Math.Max(0.5, (1 / lastMedicalKitEvent.Distance) * 100) * newOperations.Direction;
                        newOperations.TurnRightRadians = Utils.NormalRelativeAngle(turn - robot.HeadingRadians);
                        newOperations.Ahead            = (Math.Cos(turn) > 0 ? 100 : -100);
                    }
                }
            } while ((angle += 0.01) < Math.PI * 2);

            robot.MaxVelocity = (Math.Abs(robot.TurnRemaining) < 30 ? 8 : 8 - Math.Abs(robot.TurnRemaining / 30));

            double gunTurn = Utils.NormalRelativeAngle(Math.Atan2(predictedLocation.X - myLocation.X, predictedLocation.Y - myLocation.Y) - robot.GunHeadingRadians);

            newOperations.TurnGunRightRadians = (gunTurn);

            if ((Math.Abs(gunTurn) < Math.PI / 9) && (robot.GunHeat == 0.0))
            {
                newOperations.BulletPower = (bulletPower);
            }

            newOperations.TurnRadarRightRadians = (2 * Utils.NormalRelativeAngle(absoluteBearing - robot.RadarHeadingRadians));

            return(newOperations);
        }
Ejemplo n.º 13
0
        public Operations HandleScanedRobot(AdvancedRobot robot, ScannedRobotEvent e, ScannedRobotEvent previousScaned, Operations operations, BattleEvents battleEvents)
        {
            var calculatedParams = new CalculatedParams(robot, e);
            var newOperations    = operations.Clone();

            if (previousScaned != null && previousScaned.Energy > e.Energy)
            {
                OnEnemyFired(e, newOperations);
            }

            double turn = calculatedParams.AbsoluteBearing + Math.PI / 2;

            turn -= Math.Max(0.5, (1 / e.Distance) * 100) * newOperations.Direction;
            newOperations.TurnRightRadians = Utils.NormalRelativeAngle(turn - robot.HeadingRadians);

            //This line makes us slow down when we need to turn sharply.
            newOperations.MaxVelocity = 400 / robot.TurnRemaining;

            newOperations.Ahead = 100 * newOperations.Direction;
            if (newOperations.BulletPower.HasValue)
            {
                newOperations.TurnGunRightRadians =
                    Utils.NormalRelativeAngle(
                        GetCircularTargeting(robot, e, previousScaned != null ? previousScaned.HeadingRadians : 0,
                                             newOperations.BulletPower.Value, calculatedParams) - robot.GunHeadingRadians);
            }
            newOperations.TurnRadarRightRadians = Utils.NormalRelativeAngle(calculatedParams.AbsoluteBearing - robot.RadarHeadingRadians) * 2;



            return(newOperations);
        }