Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Threading.Tasks;
- using StarMarines.Models;
- using Newtonsoft.Json;
- using System.Linq;
- using System.Collections.Generic;
- namespace StarMarines.Strategies
- {
- //Первая конкретная реализация-стратегия
- public class BasicStrategy : AbstratctStrategy
- {
- public static bool isMyPlanet(int id_nei, List<Planet> col)
- {
- foreach(var item in col)
- {
- if(item.id == id_nei)
- {
- return true;
- }
- }
- return false;
- }
- private static bool isMyDisPlanet(Disaster[] dis, Planet col)
- {
- foreach (var item in dis)
- {
- if (item.planetId == col.id)
- {
- return true;
- }
- }
- return false;
- }
- public static int idMyDisPlanet(Disaster[] dis, List<Planet> col)
- {
- foreach(var planet in col)
- {
- if (isMyDisPlanet(dis, planet) == true)
- return planet.id;
- }
- return -1;
- }
- public static int idNOTDisPlanet(Disaster[] dis, List<int> id_nei)
- {
- foreach (var disasters in dis)
- {
- for(int i=0; i<id_nei.Count; ++i)
- {
- if(id_nei[i] != disasters.planetId)
- return id_nei[i];
- }
- }
- return 0;
- }
- public override Command OnReceived(Screen message)
- {
- var rand = new Random();
- Command command = new Command(); // формируем команду
- if (message.planets.Count() > 0) { // проверяем наличие планет в ответе
- var my = message.planets.Where(x=> { // выираем только свои планеты
- if(x.owner != null){
- return x.owner.Equals(BotName,StringComparison.InvariantCultureIgnoreCase);
- }
- return false;
- }).ToList(); // берем первую
- var disasters_met = message.disasters.Where(x =>
- {
- if (x.type == "METEOR")
- {
- return true;
- }
- return false;
- }).ToArray();
- if (my.Count() > 0){ // проверяем а остались ли свои планеты?
- my.ForEach(p =>
- {
- if (isMyDisPlanet(disasters_met, p) == false)
- {
- if (p.droids > 700 && p.type == "TYPE_D")
- {
- var nei = p.neighbours.ToList(); // находим соседей
- var droid = p.droids * 2 / 3; // делим на всех соседей поровну
- nei.ForEach(x =>
- {
- command.actions.Add(
- new Models.Action
- { // формируем действие. Можно сформировать по одному действию с каждой вашей планеты.
- from = p.id,
- to = x,
- unitsCount = droid //rand.Next(1, p.droids)
- });
- });
- }
- else
- {
- if (p.droids > 290 && p.type == "TYPE_C")
- {
- var nei = p.neighbours.ToList(); // находим соседей
- var droid = p.droids * 3 / 4; // делим на всех соседей поровну
- nei.ForEach(x =>
- {
- if (isMyPlanet(x, my) == false)
- {
- command.actions.Add(
- new Models.Action
- { // формируем действие. Можно сформировать по одному действию с каждой вашей планеты.
- from = p.id,
- to = x,
- unitsCount = droid //rand.Next(1, p.droids)
- });
- }
- });
- }
- }
- }
- else
- {
- var nei = p.neighbours.ToList(); // находим соседей
- var droid = p.droids; // делим на всех соседей поровну
- command.actions.Add(
- new Models.Action
- { // формируем действие. Можно сформировать по одному действию с каждой вашей планеты.
- from = p.id,
- to = idNOTDisPlanet(disasters_met, nei),
- unitsCount = droid //rand.Next(1, p.droids)
- });
- }
- });
- } else {
- Console.WriteLine("У вас больше нет планет.");
- }
- }
- if (message.errors.Count() > 0) // а есть ли ошибки?
- {
- Console.WriteLine(JsonConvert.SerializeObject(message.errors)); // увы есть.. покажем их.
- }
- return command;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement