private Pirate defendFrom(PirateGame game) { List <Pirate> enemiesByDistanceFromEnemyBase = game.GetEnemyLivingPirates().ToList(); enemiesByDistanceFromEnemyBase.OrderBy(Pirate => Pirate.Location.Distance(game.GetEnemyMothership().Location)); List <Pirate> potentialThreat = new List <Pirate>(); potentialThreat.Add(null); foreach (Pirate pirate in enemiesByDistanceFromEnemyBase) { if (pirate.Distance(game.GetEnemyMothership()) < 2000) { if (potentialThreat[0] == null) { ; } potentialThreat[0] = pirate; } } if (potentialThreat != null) { return(potentialThreat[0]); } else { return(null); } }
private List <Pirate> InterceptCapsule() { // The destination is from the mothership towards the capsule var destination = game.GetEnemyMothership().Location.Towards(game.GetEnemyCapsule().InitialLocation, game.PushRange * 2); // Sort the pirates by their distance to the destination var pushers = myPirates.OrderBy(pirate => pirate.Distance(destination)).Take(game.NumPushesForCapsuleLoss); foreach (var pirate in pushers) { // Check if the pirate is in the destination if (pirate.Location.Equals(destination)) { var capsuleHolder = game.GetEnemyCapsule().Holder; if (capsuleHolder != null) { // Keep trying to push // Don't TryPush() inside the call to Print(). bool pushResult = TryPush(pirate, capsuleHolder); Print("Pirate " + pirate + " is at the interception and tried to push " + capsuleHolder + ":" + pushResult); Print("Pirate " + pirate + " reload turns: " + pirate.PushReloadTurns); } else { // Don't do anything, just wait. Print("Pirate " + pirate + " has arrived to the interception point " + destination + " and is awaiting the capsule to be taken."); } } else { // Sail towards the destination pirate.Sail(destination); Print("Pirate " + pirate + " sails to " + destination + " to intercept " + game.GetEnemyCapsule()); } } return(myPirates.Except(pushers).ToList()); }
private Location generateStart(PirateGame game, int range) { int row = 0; int col = 0; if (game.GetEnemyMothership().Location.Col > game.GetMyMothership().Location.Col) { col = game.GetEnemyMothership().Location.Col - 1001 + range; } else { col = game.GetEnemyMothership().Location.Col + 1001 - range; } if (game.GetEnemyCapsule().InitialLocation.Row > game.GetMyCapsule().InitialLocation.Row) { row = game.GetEnemyMothership().Location.Row + 1001 - range; } else { row = game.GetEnemyMothership().Location.Row - 1001 + range; } return(new Location(row, col)); }
public void HandlePirates(PirateGame game) { foreach (Pirate pirate in game.GetMyLivingPirates()) { if (!TryPush(pirate, game)) { if (game.GetMyCapsule().Holder == null) //WE HAVE NO CAPSULE { if (pirate == xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate) { pirate.Sail(game.GetMyCapsule().InitialLocation); } else if (game.GetEnemyCapsule().Holder == null) //WE DONT HAVE, ENEMY DONT HAVE CAPSULE { System.Console.WriteLine($"STATE: WE DONT HAVE, ENEMY DONT HAVE"); if (pirate == xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[1] as Pirate) { Pirate first = xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate; pirate.Sail(first); } // SENDS CLOSEST PIRATE 1&2 TO- CLOSEST ENEMY TO CLOSEST ENEMY CAPSULE else if (xClosestToY(xClosestToY(game.GetEnemyCapsule().InitialLocation, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate == pirate || xClosestToY(xClosestToY(game.GetEnemyCapsule().InitialLocation, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate, game.GetMyLivingPirates().Cast <GameObject>().ToList())[1] as Pirate == pirate) { pirate.Sail(xClosestToY(game.GetEnemyCapsule().InitialLocation, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate); } else { pirate.Sail(xClosestToY(xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate); } } else //WE NO HAVE, ENEMY HAVE CAPSULE { System.Console.WriteLine($"STATE: WE DONT HAVE, ENEMY HAVE"); if (pirate == xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[1] as Pirate) { Pirate first = xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate; pirate.Sail(first); } else { pirate.Sail(game.GetEnemyCapsule().Holder); } } } // SEMI DONE else //WE HAVE CAPSULE { if (pirate.HasCapsule()) { pirate.Sail(game.GetMyMothership()); } else if (game.GetEnemyCapsule().Holder == null) //WE HAVE, ENEMY DONT HAVE CAPSULE { System.Console.WriteLine($"STATE: WE HAVE, ENEMY DONT HAVE"); // IF SHAMEN CHECKS IF A PIRATE IS THE CLOSEST TO INITIAL OF CAPSULE AND PERFECT ROTATION POSSIBLE and CHECKS FOR CLOSEST PIRATE if (game.GetMyCapsule().Holder.Distance(game.GetMyMothership()) + game.GetMyMothership().Distance(game.GetMyCapsule().InitialLocation) > game.GetMyCapsule().InitialLocation.Distance(xClosestToY(game.GetMyCapsule().InitialLocation, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate) && pirate == xClosestToY(game.GetMyMothership(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate) { pirate.Sail(game.GetMyCapsule().InitialLocation); } else if (xClosestToY(game.GetMyCapsule().Holder, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate == pirate) { pirate.Sail(game.GetMyCapsule().Holder); } // SENDS CLOSEST PIRATE 1&2 TO- CLOSEST ENEMY TO CLOSEST ENEMY CAPSULE else if (xClosestToY(xClosestToY(game.GetEnemyCapsule().InitialLocation, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate == pirate || xClosestToY(xClosestToY(game.GetEnemyCapsule().InitialLocation, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate, game.GetMyLivingPirates().Cast <GameObject>().ToList())[1] as Pirate == pirate) { pirate.Sail(xClosestToY(game.GetEnemyCapsule().InitialLocation, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate); } else // ALL OTHER PIRATES (NOT DONE BITCHLAL) { pirate.Sail(xClosestToY(xClosestToY(game.GetMyCapsule(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate); } } else //WE HAVE, ENEMY HAVE CAPSULE { System.Console.WriteLine($"STATE: WE HAVE, ENEMY HAVE"); // IF SHAMEN CHECKS IF A PIRATE IS THE CLOSEST TO INITIAL OF CAPSULE AND PERFECT ROTATION POSSIBLE and CHECKS FOR CLOSEST PIRATE if (game.GetMyCapsule().Holder.Distance(game.GetMyMothership()) + game.GetMyMothership().Distance(game.GetMyCapsule().InitialLocation) > game.GetMyCapsule().InitialLocation.Distance(xClosestToY(game.GetMyCapsule().InitialLocation, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate) && pirate == xClosestToY(game.GetMyMothership(), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate) { pirate.Sail(game.GetMyCapsule().InitialLocation); } else if (xClosestToY(game.GetMyCapsule().Holder, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate == pirate) { pirate.Sail(game.GetMyCapsule().Holder); } // CHECKS IF THE PIRATE IS CLOSE TO HOLDER IF HE DOES AND WE HAVE LESS PIRATES THAN THEM PIRATE GOES TO DEFEND OR SOMETHING else if (EnemyCloseToOurCapsule(game) > 1 && pirate.Distance(game.GetMyCapsule().Holder) < 900 && pirate != game.GetMyCapsule().Holder&& AllyCloseToOurCapsule(game) + 1 < EnemyCloseToOurCapsule(game)) { pirate.Sail(game.GetMyCapsule().Holder); } // SENDS THE 1st & 2nd CLOSEST PIRATES TO ENEMY CAPSULE else if (xClosestToY(game.GetEnemyCapsule().Holder, game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate == pirate || xClosestToY(game.GetEnemyCapsule().Holder, game.GetMyLivingPirates().Cast <GameObject>().ToList())[1] as Pirate == pirate) { pirate.Sail(game.GetEnemyCapsule().Holder); } // GOES TO ENEMY MOTHERSHIP IN ORDER TO DEFEND else if (game.GetEnemyCapsule().Holder.InRange(game.GetEnemyMothership(), 1500) && pirate.InRange(game.GetEnemyMothership(), 1200)) { pirate.Sail(game.GetEnemyCapsule().Holder); } // CHECKS IF ENEMY PIRATE IS IN RANGE OF OUR MS, IF SO, CLOSEST PIRATE TO THIS ENEMY WILL GO TO HIM else if ((xClosestToY(game.GetMyMothership(), game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate).InRange(game.GetMyMothership(), 800) && xClosestToY((xClosestToY(game.GetMyMothership(), game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate), game.GetMyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate == pirate) { pirate.Sail((xClosestToY(game.GetMyMothership(), game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate)); } // LETS SAIL TO CLOSEST ENEMY PIRATE AND F**K HIN IN THE ASS HOLEEEEE !Q!!:) else { pirate.Sail(xClosestToY(pirate, game.GetEnemyLivingPirates().Cast <GameObject>().ToList())[0] as Pirate); } } } } } }