summaryrefslogtreecommitdiff
path: root/rushs/creeps/src/main/java
diff options
context:
space:
mode:
authorMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
committerMartial Simon <msimon_fr@hotmail.com>2025-09-15 01:08:27 +0200
commitc9b6b9a5ca082fe7c1b6f58d7713f785a9eb6a5c (patch)
tree3e4f42f93c7ae89a364e4d51fff6e5cec4e55fa9 /rushs/creeps/src/main/java
add: graphs et rushs
Diffstat (limited to 'rushs/creeps/src/main/java')
-rw-r--r--rushs/creeps/src/main/java/com/epita/creeps/Program.java91
-rw-r--r--rushs/creeps/src/main/java/com/epita/creeps/tools/ToolSet.java37
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;
+ }
+}