public async Task <IActionResult> PutSafety([FromRoute] int id, [FromBody] Safety safety) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (id != safety.SafetyID) { return(BadRequest()); } _context.Entry(safety).State = EntityState.Modified; try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!SafetyExists(id)) { return(NotFound()); } else { throw; } } return(NoContent()); }
private Command GetBestNavigateCommand(Ship ship, Position drop) { // new logic, path of least resistance var polr = Navigation.CalculatePathOfLeastResistance(ship.position, drop); if (Safety.IsCompletelySafeMove(ship, polr[0].position.GetDirectionTo(ship.position))) { var best = polr[0].position.GetDirectionTo(ship.position); return(ship.Move(best, "Moving from path of least resistance2")); } // old logic, pick any safe direction List <Direction> directions = drop.GetAllDirectionsTo(ship.position); if (directions.All(x => Map.At(ship, x).IsOccupiedByOpponent || (Map.At(ship, x).IsThreatened) && !Map.At(ship, x).IsMyStructure)) { directions = DirectionExtensions.ALL_DIRECTIONS.ToList(); // add all } directions = directions.OrderBy(d => Map.At(ship, d).IsOpponentsStructure&& Map.At(ship, d).IsThreatened ? ship.halite * 3 : Map.At(ship, d).IsThreatened || Map.At(ship, d).IsOccupiedByOpponent ? ship.halite - Map.At(ship, d).SmallestEnemyValue : Map.At(ship, d).IsOccupiedByMe ? Map.At(ship, d).halite * .45 : ship.CellHalite * .1).ToList(); foreach (var d in directions) { if (Safety.IsSafeMove(ship, d)) { return(ship.Move(d, "moving to dropoff")); } } if (Safety.IsCompletelySafeMove(ship, Direction.STILL)) { return(ship.StayStill("staying still because nothing else available...")); } return(null); }
public byte[] Sum() { List <byte> bytes = new List <byte>(); // Manual regrouping of data and then putting all the bytes one after each other // TODO lastSum = Safety.Hash(bytes.ToArray()); return(GetLastSum()); }
public ActionResult SignIn(Safety saf) { if (saf.Login.Equals("pete") && saf.Password.Equals("pete")) { RedirectToAction("Home", "Index"); } else { return new EmptyResult(); } return View(); }
public async Task <IActionResult> PostSafety([FromBody] Safety safety) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } _context.Safety.Add(safety); await _context.SaveChangesAsync(); return(CreatedAtAction("GetSafety", new { id = safety.SafetyID }, safety)); }
private void Awake() { // anim = GetComponent<Animator>(); safety = transform.parent.GetComponentInChildren <Safety>(); flames = new GameObject[BurnPoints.Length]; for (int f = 0; f < BurnPoints.Length; f++) { flames[f] = Instantiate(flamePrefab, BurnPoints[f].position, Quaternion.identity, this.transform) as GameObject; flames[f].SetActive(false); } // Ignite(); }
public void Delete(Safety instance) { if (instance == null) { throw new ArgumentNullException("instance"); } else { Db.Entry(instance).State = EntityState.Deleted; this.SaveChanges(); } }
/*public List<TransferRecords> GetTransfers() { * return Db.TransferRecords.ToList(); * * }*/ public void Create(Safety instance) { if (instance == null) { throw new ArgumentNullException("instance"); } else { Db.Safety.Add(instance); this.SaveChanges(); } }
public MoveControlConfig() { SafetyData tempSensorData; foreach (EnumMoveControlSafetyType item in (EnumMoveControlSafetyType[])Enum.GetValues(typeof(EnumMoveControlSafetyType))) { tempSensorData = new SafetyData(); Safety.Add(item, tempSensorData); } foreach (EnumSensorSafetyType item in (EnumSensorSafetyType[])Enum.GetValues(typeof(EnumSensorSafetyType))) { tempSensorData = new SafetyData(); SensorByPass.Add(item, false); } }
new public void writeURDF(XmlWriter writer) { writer.WriteStartElement("joint"); writer.WriteAttributeString("name", "joint_" + name); writer.WriteAttributeString("type", type); Origin.writeURDF(writer); Parent.writeURDF(writer); Child.writeURDF(writer); Axis.writeURDF(writer); Limit.writeURDF(writer); Calibration.writeURDF(writer); Dynamics.writeURDF(writer); Safety.writeURDF(writer); writer.WriteEndElement(); }
public ClassSyntax( Accessibility accessibility, bool isPartial, Safety safety, bool isSealed, bool isAbstract, SyntaxToken name, IEnumerable<ClassMemberSyntax> members) : base(accessibility, name) { Requires.EnumDefined(safety, nameof(safety)); IsPartial = isPartial; Safety = safety; IsSealed = isSealed; IsAbstract = isAbstract; Members = members.ToList(); }
public ClassSyntax( Accessibility accessibility, bool isPartial, Safety safety, bool isSealed, bool isAbstract, SyntaxToken name, IEnumerable <ClassMemberSyntax> members) : base(accessibility, name) { Requires.EnumDefined(safety, nameof(safety)); IsPartial = isPartial; Safety = safety; IsSealed = isSealed; IsAbstract = isAbstract; Members = members.ToList(); }
public override void CommandShips() { var list = new List <Projection>(); Fleet.AvailableShips.ForEach(s => list.Add(new Projection(s))); list = list.OrderBy(p => p.numTurns).ToList(); while (list.Count > 0) { // switch next to a ship on a dropoff if it's surrounded var next = list[0]; foreach (var proj in list.Where(l => l.ship.OnDropoff)) { if (proj.ship.Neighbors.All(n => Fleet.CollisionCells.Contains(n) || n.IsOccupied())) { next = proj; break; } } var s = next.ship; if (next.valuer.TurnsToFill(s, ValueMapping.IsPreviousTarget(s.Id, next.valuer.Target.position)) != next.numTurns) { list[list.IndexOf(next)] = new Projection(s); list.OrderBy(p => p.numTurns); continue; } Command move; if (!s.CanMove) { move = s.StayStill("Ship cannot move, forcing it to stay still... Target " + next.valuer.Target.position.ToString() + "... Expected Turns: " + next.numTurns); } else if (!(s.CurrentMapCell.Neighbors.Any(n => n.halite > GameInfo.UpperThirdAverage && n.halite > s.CellHalite * MyBot.HParams[Parameters.STAY_MULTIPLIER])) && s.CellHalite > GameInfo.UpperThirdAverage && Safety.IsSafeMove(s, Direction.STILL)) { move = s.StayStill("Forcing ship to sit still... Target " + next.valuer.Target.position.ToString() + "... Expected Turns: " + next.numTurns); } else { move = next.GetMove(); } DoMove(move, next.valuer.Target, next.ship.Id); list.Remove(next); } }
public int Safety(string pd) { var user = User.Identity.GetUserId(); try { Safety sf = new Safety { userId = user, SafetyHash = pd.ToMD5() }; new MangerRepository().Create(sf); return(1); } catch { return(0); } }
public override void CommandShips() { // see if we can disrupt an opponent foreach (var s in Fleet.AvailableShips) { var occupiedNeighbors = s.CurrentMapCell.Neighbors.Where(n => n.IsOccupiedByOpponent && !EnemyFleet.IsReturningHome(n.ship)); MapCell bestMove = null; double best = 0.0; foreach (var n in occupiedNeighbors) { var zone = new Zone(n.position, 5); if (zone.SafetyRatio < MyBot.HParams[Parameters.SAFETY_RATIO]) { continue; } if (GameInfo.MyShipsCount * 1.1 < GameInfo.OpponentShipsCount) { continue; } if (n.halite < s.CellHalite) { continue; } if (GameInfo.LowestNeighboringOpponentHalite(n) < s.halite) { continue; } if (Safety.IsSafeMove(s, n)) { var val = (n.halite * .25 + n.ship.halite) - (s.CellHalite * .25 + s.halite); if (val > best) { bestMove = n; best = val; } } } if (bestMove != null) { Fleet.AddMove(s.Move(bestMove, "trying to disrupt opponent from Combat logic")); } } }
public Command GetMove() { var dirs = valuer.Target.position.GetAllDirectionsTo(ship.position); dirs = dirs.OrderBy(d => GameInfo.CellAt(ship.position.DirectionalOffset(d)).halite).ToList(); if (dirs.Count == 1 && GameInfo.Distance(ship, valuer.Target.position) > 1) { var extraDirs = DirectionExtensions.GetLeftRightDirections(dirs[0]); dirs.AddRange(extraDirs); } foreach (var d in dirs) { var cell = GameInfo.CellAt(ship, d); if (Safety.IsSafeAndAvoids2Cells(ship, d) && Navigation.IsAccessible(cell.position, valuer.Target.position)) { return(ship.Move(d, $"moving towards best projection {valuer.Target.position.ToString()}... Expected turns: {numTurns}")); } } return(null); }
// Save Athlete and address private void btnSaveAthlete_Click(object sender, EventArgs e) { athleteID = Convert.ToInt32(lblCustID.Text); try { cityID = City.GetCityID(cbZip.Text); addressID = Address.GetAddressID(cityID, cbZip.Text, tbAdd.Text, tbPhone.Text); Address.Insert_UpdateAddress(addressID, tbAdd.Text, cityID, cbZip.Text, tbPhone.Text); addressID = Address.GetAddressID(cityID, cbZip.Text, tbAdd.Text, tbPhone.Text); SelectDiscipline(); if (isCorner) { Corner.Insert_UpdateCorner(athleteID, tbName.Text, cbPosition.Text, cbDiscipline.Text, addressID); } else { Safety.Insert_UpdateSafety(athleteID, tbName.Text, cbPosition.Text, cbDiscipline.Text, addressID); } MessageBox.Show("Athlete Added/Updated");// Feedback this.Hide(); Schedule schedulingScreen = new Schedule(); schedulingScreen.Show(); } catch (Exception ex) { MessageBox.Show(ex.Message);// print error message } finally { if (con.State == ConnectionState.Open) { con.Close(); } } }
// Use this for initialization void Start() { safety = false; isCatch = false; recovery = false; gc = GameObject.Find("GameController").GetComponent <GameController>(); sf = GetComponent <Safety>(); maxHp = hp; pNums = GameObject.FindGameObjectsWithTag("Player").Length; Players = new bool[pNums]; for (int i = 0; i < pNums; i++) { if (this.gameObject.name == "Player0" + (i + 1).ToString()) { Players[i] = true; } else { Players[i] = false; } } respawn = Respawn(respawnWait); }
public bool ShouldMineInsteadOfDropoff(Ship ship, List <Ship> bucket, Dictionary <Position, List <Ship> > buckets) { // verified... if (ship.CellHalite < 10) { return(false); } if (ship.CellHalite * .15 + ship.halite > 1000) { return(false); } if (ship.CurrentMapCell.IsThreatened) { return(false); } if (!Safety.IsSafeMove(ship, Direction.STILL)) { return(false); } if (!MyBot.ShouldSpawnShip(0) && MyBot.ShouldSpawnShip(ship.halite) /* and not 2 ships same dist from drop */) { return(false); } if (bucket.Count > 1 && bucket[1].DistanceToMyDropoff - 1 <= ship.DistanceToMyDropoff) { return(false); } foreach (var b in buckets.Where(x => x.Value != bucket)) { if (b.Value.First().DistanceToMyDropoff <= ship.DistanceToMyDropoff) { return(false); } } return(true); }
static public void RunOption(int option) { Console.Clear(); switch (option) { case 1: //1. SET BUDGET if (Cart.Budget == 0) { Console.WriteLine("--THE BUDGET HAS NOT BEEN SET--"); } else { Console.WriteLine("--THE BUDGET IS CURRENTLY: $" + Cart.Budget + "--"); } Console.WriteLine("--INPUT A BUDGET--"); //UNIT TESTING PROOF OF CONCEPT, HARCODING INPUT //StringReader testInput = new StringReader("200"); //Console.SetIn(testInput); Cart.Budget = ReadValidPrice(); break; case 2: //2. VIEW CART Console.WriteLine("--VIEW CART--"); Cart.WriteCart(); Console.WriteLine("\n--BUDGET INFORMATION--"); Cart.WriteBudget(); Console.WriteLine("\nPRESS ENTER TO CONTINUE"); Console.ReadLine(); break; case 3: //3. ADD ITEM TO CART Console.WriteLine("--ADD ITEM TO CART--"); //BASE ITEM PROPERTIES Console.WriteLine("WHAT IS THE NAME OF YOUR ITEM:"); string name = Console.ReadLine(); Console.WriteLine("WHAT IS THE PRICE OF YOUR ITEM:"); double price = ReadValidPrice(); Item item = new Item(name, price); //SET ITEM PROPERTIES Console.WriteLine("IS YOUR ITEM:"); Console.WriteLine("\t1. CLOTHING \n\t2. FOOD \n\t3. OTHER"); int selection = ReadValidSelection(1, 3); //BASE CLOTHING PROPERTIES if (selection == 1) { Console.WriteLine("IS YOUR CLOTHING SIZE:"); Console.WriteLine("\t1. S\n\t2. M\n\t3. L\n\t4. XL"); int size = ReadValidSelection(1, 4); Clothing clothing = new Clothing(item, (Clothing.Sizes)size); //SET CLOTHING PROPERTIES Console.WriteLine("IS YOUR CLOTHING FOR:"); Console.WriteLine("\t1. SAFTEY \n\t2. CASUAL"); selection = ReadValidSelection(1, 2); //SAFTEY CLOTHING PROPERTIES if (selection == 1) { Console.WriteLine("WHAT IS THE SAFTEY RATING OF YOUR CLOTHING:"); Console.WriteLine("\t1. L\n\t2. M\n\t3. H"); int safteyRating = ReadValidSelection(1, 3); item = new Safety(clothing, (Safety.Ratings)safteyRating); //SET SAFTEY PROPERTIES } //CASUAL CLOTHING PROPERTIES else if (selection == 2) { Console.WriteLine("WHAT IS THE STYLE OF YOUR CLOTHING:"); Console.WriteLine("\t1. Day Wear\n\t2. Night Wear\n\t3. Swim Wear"); int style = ReadValidSelection(1, 3); item = new Casual(clothing, (Casual.Styles)style); //SET CASUAL PROPERTIES } } //BASE FOOD PROPERTIES else if (selection == 2) { Console.WriteLine("WHAT IS YOUR FOODS GROSS WEIGHT:"); double grossWeight = ReadValidPrice(); Food food = new Food(item, grossWeight); //SET FOOD PROPERTIES Console.WriteLine("IS YOUR FOOD ITEM:"); Console.WriteLine("\t1. PERISHABLE \n\t2. NON_PERISHABLE"); selection = ReadValidSelection(1, 2); //PERISHABLE FOOD PROPERTIES if (selection == 1) { Console.WriteLine("WHAT IS THE EXPIRY DATE OF YOUR FOOD(yyyy-mm-dd):"); DateTime expiryDate = ReadValidDate(); item = new Perishable(food, expiryDate); //SET PERISHABLE PROPERTIES } //NON-PERISHABLE FOOD PROPERTIES else if (selection == 2) { Console.WriteLine("WHAT IS THE NET WEIGHT OF YOU FOOD:"); double netWeight = ReadValidPrice(); item = new NonPerishable(food, netWeight); //SET NON-PERISHABLE PROPERTIES } } Cart.Items.Add(item); Console.Clear(); Console.WriteLine("YOU HAVE ADDED THE FOLLOWING ITEM TO THE CART:"); Console.WriteLine(item.ToString()); Console.WriteLine("\nPRESS ENTER TO CONTINUE"); Console.ReadLine(); break; case 4: //Remove Item From Cart if (Cart.Items.Count == 0) { Console.WriteLine("YOUR CART IS EMPTY"); Console.WriteLine("\nPRESS ENTER TO CONTINUE"); Console.ReadLine(); break; } Console.WriteLine("--YOUR CART--"); Cart.WriteCart(); Console.WriteLine("\n--SELECT AN ITEM TO REMOVE--"); int index = ReadValidSelection(1, Cart.Items.Count) - 1; Cart.Items.RemoveAt(index); Console.WriteLine("\nPRESS ENTER TO CONTINUE"); Console.ReadLine(); break; case 5: //EXIT Program.Exit = true; break; default: break; } }
protected void Button_Send_Pass_Click(object sender, EventArgs e) { MyError.Text = ""; txtUid.Text = Safety.SafeSql(txtUid.Text); TextBox_Email.Text = Safety.SafeSql(TextBox_Email.Text); // check if there is code if (txtUid.Text.Length < 8) { xalert("Please enter Organcode"); TextBox_numberSendPass.Text = ""; return; } // check if there is email if (TextBox_Email.Text.Length == 0) { xalert("Please enter correct Email"); TextBox_numberSendPass.Text = ""; return; } // check if email is valid Regex regex = new Regex(@"^([\w\.\-]+)@([\w\-]+)((\.(\w){2,3})+)$"); Match match = regex.Match(TextBox_Email.Text); if (!match.Success) { xalert("Please enter correct Email"); TextBox_numberSendPass.Text = TextBox_Email.Text = ""; return; } //چک کردن کد امنیتی string number_server_side = (string)Session[ADSSAntiBot.SESSION_CAPTCHA]; TextBox_numberSendPass.Text = Safety.SafeSql(TextBox_numberSendPass.Text); number_server_side = Encryption.EncryptEngine.RawEncrypt(number_server_side, "AcS5Cf"); if (number_server_side != Encryption.EncryptEngine.RawEncrypt(TextBox_numberSendPass.Text, "AcS5Cf")) { TextBox_numberSendPass.Text = ""; Label_invalidSendPass.Visible = true; return; } else { // check if there is exist same code and email and cheked string ret = DataAccessFactory.CreateOrganInsuredData(). GetOrganEmail(Convert.ToInt32(txtUid.Text)); if (ret == "0") { xalert("چنین دستگاهی با این آدرس پست الکترونیکی شناسایی نشد ."); TextBox_numberSendPass.Text = TextBox_Email.Text = ""; return; } else if (ret == "") { xalert("پست الکترونیکی دستگاه در سامانه ثبت نگردیده است ."); TextBox_numberSendPass.Text = TextBox_Email.Text = ""; return; } } }
void Start (){ disable_springs = false; if(transform.FindChild("slide")){ var slide= transform.FindChild("slide"); has_slide = true; slide_rel_pos = slide.localPosition; if(slide.FindChild("auto mod toggle")){ has_auto_mod = true; auto_mod_rel_pos = slide.FindChild("auto mod toggle").localPosition; if(Random.Range(0,2) == 0){ auto_mod_amount = 1.0f; auto_mod_stage = AutoModStage.ENABLED; } } } var hammer= GetHammer(); if(hammer){ has_hammer = true; hammer_rel_pos = hammer.localPosition; hammer_rel_rot = hammer.localRotation; } var yolk_pivot= transform.FindChild("yolk_pivot"); Transform extractor_rod = null; if(yolk_pivot){ yolk_pivot_rel_rot = yolk_pivot.localRotation; var yolk= yolk_pivot.FindChild("yolk"); if(yolk){ var cylinder_assembly= yolk.FindChild("cylinder_assembly"); if(cylinder_assembly){ extractor_rod = cylinder_assembly.FindChild("extractor_rod"); if(extractor_rod){ extractor_rod_rel_pos = extractor_rod.localPosition; } } } } if(gun_type == GunType.AUTOMATIC){ magazine_instance_in_gun = Instantiate(magazine_obj); magazine_instance_in_gun.transform.parent = transform; var renderers= magazine_instance_in_gun.GetComponentsInChildren<Renderer>(); foreach(Renderer renderer in renderers){ renderer.shadowCastingMode = ShadowCastingMode.Off; } if(Random.Range(0,2) == 0){ round_in_chamber = Instantiate(casing_with_bullet, transform.FindChild("point_chambered_round").position, transform.FindChild("point_chambered_round").rotation) as GameObject; round_in_chamber.transform.parent = transform; round_in_chamber.transform.localScale = new Vector3(1.0f,1.0f,1.0f); renderers = round_in_chamber.GetComponentsInChildren<Renderer>(); foreach(Renderer renderer in renderers){ renderer.shadowCastingMode = ShadowCastingMode.Off; } } if(Random.Range(0,2) == 0){ slide_amount = kSlideLockPosition; slide_lock = true; } } if(gun_type == GunType.REVOLVER){ cylinders = new CylinderState[cylinder_capacity]; for(var i=0; i<cylinder_capacity; ++i){ cylinders[i] = new CylinderState(); if(Random.Range(0,2) == 0){ continue; } var name= "point_chamber_"+(i+1); cylinders[i]._object = Instantiate(casing_with_bullet, extractor_rod.FindChild(name).position, extractor_rod.FindChild(name).rotation) as GameObject; cylinders[i]._object.transform.localScale = new Vector3(1.0f,1.0f,1.0f); cylinders[i].can_fire = true; cylinders[i].seated = Random.Range(0.0f,0.5f); var renderers = cylinders[i]._object.GetComponentsInChildren<Renderer>(); foreach(Renderer renderer in renderers){ renderer.shadowCastingMode = ShadowCastingMode.Off; } } } if(Random.Range(0,2) == 0 && has_hammer){ hammer_cocked = 0.0f; } if(transform.FindChild("safety")){ has_safety = true; safety_rel_pos = transform.FindChild("safety").localPosition; safety_rel_rot = transform.FindChild("safety").localRotation; if(Random.Range(0,4) == 0){ safety_off = 0.0f; safety = Safety.ON; slide_amount = 0.0f; slide_lock = false; } } }
public void ToggleSafety (){ if(!has_safety){ return; } if(safety == Safety.OFF){ if(slide_amount == 0.0f && hammer_cocked == 1.0f){ safety = Safety.ON; PlaySoundFromGroup(sound_safety, kGunMechanicVolume); } } else if(safety == Safety.ON){ safety = Safety.OFF; PlaySoundFromGroup(sound_safety, kGunMechanicVolume); } }
internal static global::System.Runtime.InteropServices.HandleRef getCPtr(Safety obj) { return((obj == null) ? new global::System.Runtime.InteropServices.HandleRef(null, global::System.IntPtr.Zero) : obj.swigCPtr); }
protected void SignInBt_Click(object sender, EventArgs e) { if (Page.IsValid) { string number_server_side = (string)Session[ADSSAntiBot.SESSION_CAPTCHA]; TextBox_number.Text = Safety.SafeSql(TextBox_number.Text); number_server_side = Encryption.EncryptEngine.RawEncrypt(number_server_side, "AcS5Cf"); if (number_server_side != Encryption.EncryptEngine.RawEncrypt(TextBox_number.Text, "AcS5Cf")) { Label_invalid.Visible = true; TextBox_number.Text = ""; return; } else { SignInUser.Text = SignInUser.Text.Replace("'", "''"); SignInPass.Text = SignInPass.Text.Replace("'", "''").Trim(); //--------------------------- CHECK FOR EMPTY PASSWORD if (SignInPass.Text.Length == 0) { lblMessage.Text = "Please enter your password"; TextBox_number.Text = ""; return; } else { lblMessage.Text = ""; } //------------------------------------------------------ int tmp; bool useridIsNumeric = int.TryParse(SignInUser.Text, out tmp); if (useridIsNumeric && (SignInUser.Text.Length == 7 || SignInUser.Text.Length == 5 || SignInUser.Text.Length == 1)) { SignInUser.Text = "0" + SignInUser.Text; } if (useridIsNumeric && SignInUser.Text.Length == 8) // check for devices { string xpass = DataAccessFactory.CreateOrganInsuredData() .GetOrganLoginData(Convert.ToInt32(SignInUser.Text)); if (SignInUser.Text + SignInPass.Text != xpass) { lblMessage.Text = "Incorrect Username or password"; TextBox_number.Text = ""; return; } HttpContext.Current.Session.Clear(); SessionHelper.Karbar = 0; SessionHelper.Dastgah.Refresh(int.Parse(SignInUser.Text)); Response.Redirect("~/InsuredAgentOrg/Default.aspx", false); return; } } if (SignInPass.Text.Length == 0) { return; } } }
public override void CommandShips() { // go through buckets and move the ships... var dropoffBuckets = GetBuckets(AvailableShipsMovingToBase); var ShipPositions = new List <List <Ship> >(); for (int i = 0; i < GameInfo.Map.width * 2; i++) { ShipPositions.Add(new List <Ship>()); } if (dropoffBuckets.Any(kvp => kvp.Key.Equals(GameInfo.Me.shipyard.position))) { var yardDrop = dropoffBuckets.Single(kvp => kvp.Key.Equals(GameInfo.Me.shipyard.position)); foreach (var s in yardDrop.Value) { var dist = GameInfo.Distance(s, yardDrop.Key); ShipPositions[dist].Add(s); } // iterate.... bool frontOccupied = false; for (int i = 0; i < ShipPositions.Count; i++) { if (ShipPositions[i].Count >= 1) { var ships = ShipPositions[i]; ships = ships.OrderByDescending(s => s.halite).ToList(); foreach (var s in ships) { if (frontOccupied && !s.IsFull() && s.CellHalite >= 10) { Fleet.AddMove(s.StayStill("Mining halite because I can")); Safety.TwoTurnAvoider.Add(s, s.CurrentMapCell, yardDrop.Key.GetAllDirectionsTo(s.CurrentMapCell)); } else { var cmd = GetBestNavigateCommand(s, yardDrop.Key); if (cmd != null) { Fleet.AddMove(cmd); Safety.TwoTurnAvoider.Add(s, cmd.TargetCell, yardDrop.Key.GetAllDirectionsTo(cmd.TargetCell)); } } frontOccupied = true; } } frontOccupied = ShipPositions[i].Count > 0; } // remove the key dropoffBuckets.Remove(yardDrop.Key); } foreach (var drop in dropoffBuckets.Keys) { var ships = dropoffBuckets[drop].OrderBy(s => Map.CalculateDistance(s.position, drop) * 10000 - s.halite).ToList(); int maxDist = 0; foreach (var ship in ships) { int thisDist = Map.CalculateDistance(ship.position, drop); if (ShouldMineInsteadOfDropoff(ship, ships, dropoffBuckets)) { Fleet.AddMove(ship.StayStill("Mining halite because I can")); Safety.TwoTurnAvoider.Add(ship, ship.CurrentMapCell, drop.GetAllDirectionsTo(ship.CurrentMapCell)); } else if (thisDist > maxDist || ship.CellHalite < 10 || !Safety.IsSafeMove(ship, Direction.STILL)) { var cmd = GetBestNavigateCommand(ship, drop); if (cmd != null) { Fleet.AddMove(cmd); Safety.TwoTurnAvoider.Add(ship, cmd.TargetCell, drop.GetAllDirectionsTo(cmd.TargetCell)); } } else { Fleet.AddMove(ship.StayStill($"Staying still to stagger ships")); Safety.TwoTurnAvoider.Add(ship, ship.CurrentMapCell, drop.GetAllDirectionsTo(ship.CurrentMapCell)); } maxDist = Math.Max(maxDist, thisDist); } } }
public override void CommandShips() { var prevShipAssignments = ShipAssignments; var prevPointAssignments = PointAssignments; ShipAssignments = new Dictionary <Ship, Assignment>(); PointAssignments = new Dictionary <Point, Assignment>(); // stay still... foreach (var s in Fleet.AvailableShips.Where(s => !s.CanMove)) { Fleet.AddMove(s.StayStill("Ship cannot move, forcing it to stay still...")); } // select targets Queue <Ship> queue = new Queue <Ship>(); Fleet.AvailableShips.ForEach(s => queue.Enqueue(s)); while (queue.Count > 0) { var s = queue.Dequeue(); var xLayers = GameInfo.RateLimitXLayers(15); var cells = GameInfo.Map.GetXLayers(s.position, xLayers); MapCell target = s.CurrentMapCell; int maxVal = GetCellValue(s, target); do { foreach (var c in cells) { var otherAssign = PointAssignments.ContainsKey(c.position.AsPoint) ? PointAssignments[c.position.AsPoint] : null; if (otherAssign != null && GameInfo.Distance(s, c.position) >= otherAssign.Distance) { continue; } // value calculation... int val = GetCellValue(s, c); if (prevPointAssignments.ContainsKey(c.position.AsPoint) && prevPointAssignments[c.position.AsPoint].Ship.Id == s.Id) { val = (int)(val * 1.1); } int distDiff = GameInfo.Distance(s, c.position) - GameInfo.Distance(s, target.position); int oppCost = distDiff < 0 ? distDiff * (int)(c.halite * .125) : // cell is closet to ship than curTarget distDiff * (int)(target.halite * .125); // distDiff is 0/positive, cell is further than curTarget if (val - oppCost > maxVal && Navigation.IsAccessible(s.position, c.position)) { maxVal = val; target = c; } } xLayers++; cells = GameInfo.GetXLayersExclusive(s.position, xLayers); } while(target == null && xLayers <= Math.Min(GameInfo.Map.width, GameInfo.RateLimitXLayers(xLayers))); if (target != null) { var otherTarget = AssignAndReturnPrevAssignIfAny(s, target); if (otherTarget != null) { queue.Enqueue(otherTarget.Ship); } } } var vals = ShipAssignments.Values.OrderBy(a => a.Distance); foreach (var a in vals) { var dirs = a.Target.position.GetAllDirectionsTo(a.Ship.position); dirs = dirs.OrderBy(d => GameInfo.CellAt(a.Ship, d).halite).ToList(); if (dirs.Any(d => Safety.IsSafeMove(a.Ship, d))) { var dir = dirs.First(d => Safety.IsSafeMove(a.Ship, d)); Fleet.AddMove(a.Ship.Move(dir, $"Moving to best target {a.Target.position.ToString()} End Game Collect Logic")); } } }