private static void Move(GameClientBattlecity gcb) { var r = new Random(); var done = false; switch (r.Next(5)) { case 0: if (!gcb.IsBarrierAt(gcb.PlayerX, gcb.PlayerY - 1)) { gcb.SendActions(gcb.Up()); done = true; } break; case 1: if (!gcb.IsBarrierAt(gcb.PlayerX + 1, gcb.PlayerY)) { gcb.SendActions(gcb.Right()); done = true; } break; case 2: if (!gcb.IsBarrierAt(gcb.PlayerX, gcb.PlayerY + 1)) { gcb.SendActions(gcb.Down()); done = true; } break; case 3: if (!gcb.IsBarrierAt(gcb.PlayerX - 1, gcb.PlayerY)) { gcb.SendActions(gcb.Left()); done = true; } break; case 4: gcb.SendActions(gcb.Act()); done = true; break; } if (done == false) { gcb.SendActions(gcb.Blank()); } }
private static bool ActAvailableEnemy() { var done = false; const int maxObserveLen = Configuration.ActLen; for (int x = G.PlayerX + 1; x < Math.Min(G.Map.GetLength(0), G.PlayerX + maxObserveLen); x++) { if (G.IsAnyOfAt(x, G.PlayerY, EnemyTankElements)) { G.SendActions(G.Right() + "," + G.Act()); S.ActRight++; done = true; } if (G.IsBarrierAt(x, G.PlayerY) || G.IsOutOf(x, G.PlayerY)) { break; } } for (int x = G.PlayerX - 1; x >= Math.Max(0, G.PlayerX - maxObserveLen); x--) { if (G.IsAnyOfAt(x, G.PlayerY, EnemyTankElements)) { G.SendActions(G.Left() + "," + G.Act()); S.ActLeft++; done = true; } if (G.IsBarrierAt(x, G.PlayerY)) { break; } } for (int y = G.PlayerY + 1; y < Math.Min(G.Map.GetLength(1), G.PlayerY + maxObserveLen); y++) { if (G.IsAnyOfAt(G.PlayerX, y, EnemyTankElements)) { G.SendActions(G.Down() + "," + G.Act()); S.ActDown++; done = true; } if (G.IsBarrierAt(G.PlayerX, y)) { break; } } for (int y = G.PlayerY - 1; y >= Math.Max(0, G.PlayerY - maxObserveLen); y--) { if (G.IsAnyOfAt(G.PlayerX, y, EnemyTankElements)) { G.SendActions(G.Up() + "," + G.Act()); S.ActUp++; done = true; } if (G.IsBarrierAt(G.PlayerX, y)) { break; } } if (done) { S.ActCooldown = 4; } return(done); }