public void Think(int turn, int maxTurn, int player, GameField field, ICommander commander) { if (field.GetPrepareResource(plan.Excavator, player, true) >= 4 && field[plan.Excavator].Terrain == Terrain.Wasteland) { disposition.AddBuildOrder(1000, plan.Excavator, Terrain.Excavator); disposition.AddMoveOrder(100, plan.Excavator, GameField.GetNeedRobot(Terrain.Excavator)); } foreach (Point town in plan.Town) { if (field.GetPrepareResource(town, player, true) < 9) continue; disposition.AddBuildOrder(1000, town, Terrain.Town); disposition.AddMoveOrder(100, town, GameField.GetNeedRobot(Terrain.Town)); } DistanceMap distance = new DistanceMap(field, player, InitialPoint); BuildPriority priority = new BuildPriority(field, player, InitialPoint, 99); foreach (Point point in field.Iterator()) { if (field.GetPrepareResource(point, player, true) < 4) continue; if (!field.IsAdjoinTerritory(point, player)) continue; if (point == new Point { X = 6, Y = 6 }) continue; Terrain building; switch(field[point].Terrain) { case Terrain.Wasteland: building = Terrain.House; break; case Terrain.Hole: building = Terrain.Bridge; break; default: continue; } disposition.AddBuildOrder(priority[point] * 10, point, building); disposition.AddMoveOrder(priority[point], point, GameField.GetNeedRobot(building)); } foreach (OrderBuild build in disposition.EnumerateOrder<OrderBuild>()) { disposition.AddSecureResource(build.Priority / 10 - 1, build.Point, player, field); } disposition.AddSecureGround(150, 100, player, field); disposition.AddKamikaze(0, player, field); disposition.Dispose(field, commander); }