diff options
| author | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
|---|---|---|
| committer | Martial Simon <msimon_fr@hotmail.com> | 2025-09-15 01:08:27 +0200 |
| commit | c9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch) | |
| tree | 3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /rushs/creeps/src/main/java/com/epita | |
add: graphs et rushs
Diffstat (limited to 'rushs/creeps/src/main/java/com/epita')
| -rw-r--r-- | rushs/creeps/src/main/java/com/epita/creeps/Program.java | 91 | ||||
| -rw-r--r-- | rushs/creeps/src/main/java/com/epita/creeps/tools/ToolSet.java | 37 |
2 files changed, 128 insertions, 0 deletions
diff --git a/rushs/creeps/src/main/java/com/epita/creeps/Program.java b/rushs/creeps/src/main/java/com/epita/creeps/Program.java new file mode 100644 index 0000000..30d669f --- /dev/null +++ b/rushs/creeps/src/main/java/com/epita/creeps/Program.java @@ -0,0 +1,91 @@ +package com.epita.creeps; + +import com.epita.creeps.given.exception.NoReportException; +import com.epita.creeps.given.extra.Cartographer; +import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.Tile; +import com.epita.creeps.given.vo.parameter.FireParameter; +import com.epita.creeps.given.vo.report.*; +import com.epita.creeps.given.vo.response.CommandResponse; +import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.tools.ToolSet; +import com.mashape.unirest.http.HttpResponse; +import com.mashape.unirest.http.JsonNode; +import com.mashape.unirest.http.Unirest; +import com.mashape.unirest.http.exceptions.UnirestException; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeUnit; + +public class Program { + public static void main(String[] args) { + String hostName = args[0]; + String portNumber = args[1]; + String userName = args[2]; + + ToolSet tools = new ToolSet("http://" + hostName + ":" + portNumber); + Cartographer cartographer = Cartographer.INSTANCE; + String initRequest = tools.BuildRequest("/init/" + userName); + try { + HttpResponse<JsonNode> request = Unirest.post(initRequest).body("{}").asJson(); + InitResponse initialized = Json.parse(request.getBody().getObject().toString(), InitResponse.class); + ToolSet.setHectorRate(initialized.setup.gcTickRate); + long timeTilGC = ToolSet.nextHectorPass(initialized.tick) - initialized.tick; + while (true) { + double moveTime = initialized.costs.move.cast / initialized.setup.ticksPerSeconds; //timeTilGC; + // MOVE UP + + request = Unirest.post(tools.BuildRequest("/command/" + initialized.login + "/" + initialized.citizen1Id + "/move:up")).asJson(); + + // GATHER + CommandResponse cr = Json.parse(request.getBody().getObject().toString(), CommandResponse.class); + final String rid = cr.reportId; + request = CompletableFuture.supplyAsync(() -> { + try { + + return Unirest.get(tools.BuildRequest("/report/" + rid)).asJson(); + } catch (UnirestException e) { + throw new RuntimeException(e); + } + }, CompletableFuture.delayedExecutor((long) (moveTime), TimeUnit.SECONDS)).join(); + + MoveReport mr = Json.parse(request.getBody().getObject().toString(), MoveReport.class); + cartographer.register(mr); + + if (cartographer.requestTileType(mr.newPosition) == Tile.Food || cartographer.requestTileType(mr.newPosition) == Tile.Oil || cartographer.requestTileType(mr.newPosition) == Tile.Wood || cartographer.requestTileType(mr.newPosition) == Tile.Rock) { + double gatherTime = initialized.costs.gather.cast / initialized.setup.ticksPerSeconds; + + request = CompletableFuture.supplyAsync(() -> { + try { + return Unirest.post(tools.BuildRequest("/command/" + initialized.login + "/" + initialized.citizen1Id + "/gather")).asJson(); + } catch (UnirestException e) { + throw new RuntimeException(e); + } + }, CompletableFuture.delayedExecutor((long) gatherTime, TimeUnit.SECONDS)).thenApplyAsync(i -> i, CompletableFuture.delayedExecutor((long) (gatherTime), TimeUnit.SECONDS)).join(); + } + + // cr = Json.parse(request.getBody().getObject().toString(), CommandResponse.class); + //request = Unirest.get(tools.BuildRequest("/report/" + cr.reportId)).asJson(); + // GatherReport gr = Json.parseReport(request.getBody().getObject().toString()); + double roadBuildTime = initialized.costs.buildRoad.cast / initialized.setup.ticksPerSeconds; // + ToolSet.nextHectorPass(mr.tick) - mr.tick; + + // BUILD ROAD + request = CompletableFuture.supplyAsync(() -> { + try { + return Unirest.post(tools.BuildRequest("/command/" + initialized.login + "/" + initialized.citizen1Id + "/build:road")).asJson(); + } catch (UnirestException e) { + throw new RuntimeException(e); + } + }, CompletableFuture.delayedExecutor((long) roadBuildTime, TimeUnit.SECONDS)).thenApplyAsync(i -> i, CompletableFuture.delayedExecutor((long) (roadBuildTime), TimeUnit.SECONDS)).join(); + + cr = Json.parse(request.getBody().getObject().toString(), CommandResponse.class); + request = Unirest.get(tools.BuildRequest("/report/" + cr.reportId)).asJson(); + BuildReport br = Json.parseReport(request.getBody().getObject().toString()); + timeTilGC = ToolSet.nextHectorPass(br.tick) - br.tick; + } + } catch (UnirestException | NoReportException e) { + throw new RuntimeException(e); + } + } +}
\ No newline at end of file diff --git a/rushs/creeps/src/main/java/com/epita/creeps/tools/ToolSet.java b/rushs/creeps/src/main/java/com/epita/creeps/tools/ToolSet.java new file mode 100644 index 0000000..553be1f --- /dev/null +++ b/rushs/creeps/src/main/java/com/epita/creeps/tools/ToolSet.java @@ -0,0 +1,37 @@ +package com.epita.creeps.tools; + +import com.mashape.unirest.http.Unirest; +import com.mashape.unirest.http.exceptions.UnirestException; +import lombok.Getter; +import lombok.Setter; + +public class ToolSet { + static String sampleRequest; + + @Setter + @Getter + static long hectorRate; + + public ToolSet(String sampleRequest) { + ToolSet.sampleRequest = sampleRequest; + } + + public String BuildRequest(String endPoint) { + return sampleRequest + endPoint; + } + + public void GetReport(String reportId) { + String request = BuildRequest("/report/" + reportId); + try { + Unirest.get(request).asJson(); + } catch (UnirestException e) { + throw new RuntimeException(e); + } + } + public static long nextHectorPass(long tick) { + if (tick % hectorRate != 0) { + return tick + (hectorRate - tick % hectorRate); + } + return tick; + } +} |
