// Robot event handler, when the robot sees another robot public override void OnScannedRobot(ScannedRobotEvent e) { //let each handler to handle onScaned event to build up complete data for all tick foreach (IHandleScanedRobot handleScanedRobot in handlers) { handleScanedRobot.HandleScanedRobot(this, e, lastScannedRobotEvent, operations, battleEvents); } if (tickcount == 0) { tickcount = minticks + (int)rnd.NextDouble() * ticksRange; var results = handlers.Select( handler => new { Evaludation = (int)handler.Evaluate(this, e, battleEvents), Handler = handler }) .OrderBy(item => item.Evaludation); var topones = results.Where(result => result.Evaludation == results.First().Evaludation); var choosen = topones.ElementAt((int)Math.Floor(rnd.NextDouble() * topones.Count())).Handler; currentHandler = choosen; } else { tickcount--; } ApplyOperations(currentHandler.HandleScanedRobot(this, e, lastScannedRobotEvent, operations, battleEvents)); lastScannedRobotEvent = e; }
//private IList<IHandleScanedRobot> handlers = new List<IHandleScanedRobot>() { new Handlers.Mercutio() }; public override void Run() { currentHandler = handlers[0]; // -- Initialization of the robot -- IsAdjustGunForRobotTurn = true; IsAdjustRadarForGunTurn = true; SetTurnRadarRightRadians(double.MaxValue); while (true) { if (RadarTurnRemainingRadians == 0) { SetTurnRadarRightRadians(double.MaxValue); } Execute(); } }