PageRenderTime 41ms CodeModel.GetById 15ms RepoModel.GetById 0ms app.codeStats 0ms

/SDK/api/CSharp/SimpleWalker/SimpleWalkerBot.cs

https://bitbucket.org/ehvattum/draugr_contrib
C# | 136 lines | 117 code | 14 blank | 5 comment | 4 complexity | edad1e4d6fd73c9f519de87fb3632903 MD5 | raw file
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using Skyport;
  5. namespace SimpleWalker
  6. {
  7. internal class SimpleWalkerBot : SkyportObserver
  8. {
  9. private static readonly Random rnd = new Random();
  10. public string BotName = "csharpwalker";
  11. private SkyportConnection connection;
  12. private string primary;
  13. private string secondary;
  14. #region SkyportObserver Members
  15. public void OnConnectionEstablished(SkyportConnection connectionArg)
  16. {
  17. connection = connectionArg;
  18. Console.WriteLine("Connection established");
  19. connection.SendHandshake(BotName);
  20. }
  21. public void OnHandshakeSuccessful()
  22. {
  23. Console.WriteLine("Handshake successful");
  24. }
  25. public void OnEndturn()
  26. {
  27. Console.WriteLine("Endturn!");
  28. }
  29. public void OnAction(string player, string type, Dictionary<string, object> parameters)
  30. {
  31. Console.WriteLine("Got Action from " + player + " of type " + type);
  32. foreach (KeyValuePair<string, object> pair in parameters)
  33. {
  34. try
  35. {
  36. Console.WriteLine("parameter: {0}: {1}", pair.Key, pair.Value);
  37. }
  38. catch (InvalidCastException e)
  39. {
  40. } // value wasn't a string (happens for droids -- it's a list)
  41. }
  42. }
  43. public void OnGamestart(Map MapData)
  44. {
  45. Console.WriteLine("Got Gamestart!");
  46. primary = RandomChoice(new[] {"mortar", "laser", "droid"});
  47. do
  48. {
  49. secondary = RandomChoice(new[] {"mortar", "laser", "droid"});
  50. } while (primary.Equals(secondary));
  51. connection.SendLoadout(primary, secondary);
  52. }
  53. public void OnGamestate(long TurnNumber, Map MapData, PlayerData[] players)
  54. {
  55. foreach (PlayerData player in players)
  56. {
  57. /*Console.WriteLine(
  58. "player {0} has {1} life, {2} score, is at position {3},{4}, has a {5} lvl {6} and a {7} lvl {8}",
  59. player.name, player.health, player.score, player.j, player.k, player.PrimaryWeapon, player.PrimaryWeaponLevel,
  60. player.SecondaryWeapon, player.SecondaryWeaponLevel);*/
  61. }
  62. if (players[0].name.Equals(BotName))
  63. {
  64. connection.SendMove(RandomChoice(new[] {"up", "down", "right-up", "right-down", "left-up", "left-down"}));
  65. connection.SendMove(RandomChoice(new[] {"up", "down", "right-up", "right-down", "left-up", "left-down"}));
  66. // mortar, laser, droid, mine, upgrade
  67. switch (rnd.Next(5))
  68. {
  69. case 0:
  70. RandomMortar();
  71. break;
  72. case 1:
  73. RandomLaser();
  74. break;
  75. case 2:
  76. RandomDroid();
  77. break;
  78. case 3:
  79. Console.WriteLine("RANDOM MINE");
  80. connection.Mine();
  81. break;
  82. case 4:
  83. Console.WriteLine("RANDOM UPGRADE");
  84. connection.Upgrade(RandomChoice(new[] {primary, secondary}));
  85. break;
  86. }
  87. }
  88. }
  89. public void OnError(string errormessage)
  90. {
  91. Console.WriteLine("Got error: " + errormessage);
  92. }
  93. #endregion
  94. private T RandomChoice<T>(T[] list)
  95. {
  96. return list[rnd.Next(list.Count())];
  97. }
  98. public void RandomMortar()
  99. {
  100. long j, k;
  101. j = RandomChoice(new[] {-4, -3, -2, -1, 1, 2, 3, 4});
  102. k = RandomChoice(new[] {-4, -3, -2, -1, 1, 2, 3, 4});
  103. connection.AttackMortar(j, k);
  104. Console.WriteLine("RANDOM MORTAR");
  105. }
  106. public void RandomDroid()
  107. {
  108. List<string> list = new List<string>();
  109. for (int i = 0; i < 5; i++)
  110. {
  111. list.Add(RandomChoice(new[] {"up", "down", "right-up", "right-down", "left-up", "left-down"}));
  112. }
  113. connection.AttackDroid(list.ToArray());
  114. Console.WriteLine("RANDOM DROID");
  115. }
  116. public void RandomLaser()
  117. {
  118. connection.AttackLaser(RandomChoice(new[] {"up", "down", "right-up", "right-down", "left-up", "left-down"}));
  119. Console.WriteLine("RANDOM LASER");
  120. }
  121. }
  122. }