Advertisement
Guest User

Untitled

a guest
Feb 26th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.42 KB | None | 0 0
  1. using System;
  2. using System.Threading.Tasks;
  3. using StarMarines.Models;
  4. using Newtonsoft.Json;
  5. using System.Linq;
  6. using System.Collections.Generic;
  7.  
  8. namespace StarMarines.Strategies
  9. {
  10. //Первая конкретная реализация-стратегия
  11.  
  12. public class BasicStrategy : AbstratctStrategy
  13. {
  14. public static bool isMyPlanet(int id_nei, List<Planet> col)
  15. {
  16. foreach(var item in col)
  17. {
  18. if(item.id == id_nei)
  19. {
  20. return true;
  21. }
  22. }
  23. return false;
  24. }
  25.  
  26. private static bool isMyDisPlanet(Disaster[] dis, Planet col)
  27. {
  28. foreach (var item in dis)
  29. {
  30. if (item.planetId == col.id)
  31. {
  32. return true;
  33. }
  34. }
  35. return false;
  36. }
  37. public static int idMyDisPlanet(Disaster[] dis, List<Planet> col)
  38. {
  39. foreach(var planet in col)
  40. {
  41. if (isMyDisPlanet(dis, planet) == true)
  42. return planet.id;
  43. }
  44. return -1;
  45. }
  46.  
  47. public static int idNOTDisPlanet(Disaster[] dis, List<int> id_nei)
  48. {
  49. foreach (var disasters in dis)
  50. {
  51. for(int i=0; i<id_nei.Count; ++i)
  52. {
  53. if(id_nei[i] != disasters.planetId)
  54. return id_nei[i];
  55. }
  56. }
  57. return 0;
  58. }
  59.  
  60. public override Command OnReceived(Screen message)
  61. {
  62. var rand = new Random();
  63. Command command = new Command(); // формируем команду
  64.  
  65. if (message.planets.Count() > 0) { // проверяем наличие планет в ответе
  66. var my = message.planets.Where(x=> { // выираем только свои планеты
  67. if(x.owner != null){
  68. return x.owner.Equals(BotName,StringComparison.InvariantCultureIgnoreCase);
  69. }
  70. return false;
  71. }).ToList(); // берем первую
  72.  
  73. var disasters_met = message.disasters.Where(x =>
  74. {
  75. if (x.type == "METEOR")
  76. {
  77. return true;
  78. }
  79. return false;
  80. }).ToArray();
  81.  
  82. if (my.Count() > 0){ // проверяем а остались ли свои планеты?
  83.  
  84. my.ForEach(p =>
  85. {
  86. if (isMyDisPlanet(disasters_met, p) == false)
  87. {
  88. if (p.droids > 700 && p.type == "TYPE_D")
  89. {
  90. var nei = p.neighbours.ToList(); // находим соседей
  91. var droid = p.droids * 2 / 3; // делим на всех соседей поровну
  92. nei.ForEach(x =>
  93. {
  94. command.actions.Add(
  95. new Models.Action
  96. { // формируем действие. Можно сформировать по одному действию с каждой вашей планеты.
  97. from = p.id,
  98. to = x,
  99. unitsCount = droid //rand.Next(1, p.droids)
  100. });
  101. });
  102. }
  103. else
  104. {
  105. if (p.droids > 290 && p.type == "TYPE_C")
  106. {
  107. var nei = p.neighbours.ToList(); // находим соседей
  108. var droid = p.droids * 3 / 4; // делим на всех соседей поровну
  109. nei.ForEach(x =>
  110. {
  111. if (isMyPlanet(x, my) == false)
  112. {
  113. command.actions.Add(
  114. new Models.Action
  115. { // формируем действие. Можно сформировать по одному действию с каждой вашей планеты.
  116. from = p.id,
  117. to = x,
  118. unitsCount = droid //rand.Next(1, p.droids)
  119. });
  120. }
  121. });
  122. }
  123. }
  124. }
  125. else
  126. {
  127. var nei = p.neighbours.ToList(); // находим соседей
  128. var droid = p.droids; // делим на всех соседей поровну
  129. command.actions.Add(
  130. new Models.Action
  131. { // формируем действие. Можно сформировать по одному действию с каждой вашей планеты.
  132. from = p.id,
  133. to = idNOTDisPlanet(disasters_met, nei),
  134. unitsCount = droid //rand.Next(1, p.droids)
  135. });
  136. }
  137. });
  138.  
  139.  
  140.  
  141. } else {
  142. Console.WriteLine("У вас больше нет планет.");
  143. }
  144. }
  145. if (message.errors.Count() > 0) // а есть ли ошибки?
  146. {
  147. Console.WriteLine(JsonConvert.SerializeObject(message.errors)); // увы есть.. покажем их.
  148. }
  149. return command;
  150. }
  151. }
  152. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement