From b81edecd4160b707633c3995d98055e9f2a1afe5 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Fri, 6 Feb 2026 18:06:56 +0100 Subject: [PATCH 01/23] parce qu'il faut backup a un moment --- src/main/java/com/epita/creeps/AsyncExec.java | 27 +++++++++++++++++++ src/main/java/com/epita/creeps/Citizen.java | 26 ++++++++++++++++++ src/main/java/com/epita/creeps/Program.java | 6 ++--- .../epita/creeps/{ => commands}/Basics.java | 13 ++++++--- 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/epita/creeps/AsyncExec.java create mode 100644 src/main/java/com/epita/creeps/Citizen.java rename src/main/java/com/epita/creeps/{ => commands}/Basics.java (65%) diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java new file mode 100644 index 0000000..99b7a33 --- /dev/null +++ b/src/main/java/com/epita/creeps/AsyncExec.java @@ -0,0 +1,27 @@ +package com.epita.creeps; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; +import java.util.function.Supplier; + +// Handles server operations to respect commands delays +@AllArgsConstructor +public class AsyncExec { + + @Getter + @Setter + private static long ticksPerSecond = 1; + + public static CompletableFuture asyncExec(Supplier supplier, long time) { + return CompletableFuture.supplyAsync(supplier, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); + } + + public static void justWait(long time) { + CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)).join(); + } +} diff --git a/src/main/java/com/epita/creeps/Citizen.java b/src/main/java/com/epita/creeps/Citizen.java new file mode 100644 index 0000000..ee7ac52 --- /dev/null +++ b/src/main/java/com/epita/creeps/Citizen.java @@ -0,0 +1,26 @@ +package com.epita.creeps; + +import com.epita.creeps.given.vo.geometry.Direction; +import kong.unirest.core.Unirest; +import lombok.AllArgsConstructor; + +public class Citizen { + private String id; + private String command_uri; + + public Citizen(String login, String citizen_id ) { + id = citizen_id; + command_uri = "/command/" + login + "/" + citizen_id + "/"; + } + + public void move(Direction direction) { + AsyncExec.asyncExec(() -> { + Unirest.post(command_uri + "move:"+direction.direction); + return null; + }, 2); + } + + public void noop() { +// AsyncExec.asyncExec() + } +} diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 5c55103..77bf8f4 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -1,5 +1,6 @@ package com.epita.creeps; +import com.epita.creeps.commands.Basics; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -7,7 +8,7 @@ import kong.unirest.core.UnirestException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.ConnectException; +import java.util.concurrent.TimeUnit; public class Program { @@ -44,8 +45,7 @@ public class Program { logger.error("Cannot connect to the server. Aborting..."); throw e; } -// JsonNode jsonNode = response.getBody(); -// System.out.println(jsonNode); + AsyncExec.justWait(3); logger.info("Creating account"); basics.connectAccount(login); diff --git a/src/main/java/com/epita/creeps/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java similarity index 65% rename from src/main/java/com/epita/creeps/Basics.java rename to src/main/java/com/epita/creeps/commands/Basics.java index bd6c91a..9d75eef 100644 --- a/src/main/java/com/epita/creeps/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -1,5 +1,6 @@ -package com.epita.creeps; +package com.epita.creeps.commands; +import com.epita.creeps.AsyncExec; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -9,6 +10,8 @@ import lombok.Getter; import org.slf4j.Logger; +import java.util.concurrent.CompletableFuture; + @AllArgsConstructor @Getter public class Basics { @@ -16,13 +19,15 @@ public class Basics { private Logger logger; private String srvUrl; - public void connectAccount(String login) { - HttpResponse response; + public JsonNode connectAccount(String login) { try { - response = Unirest.post(srvUrl + "/init/" + login).asJson(); + CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 10); + HttpResponse response = (HttpResponse) resp.join(); logger.debug(response.getBody().toPrettyString()); + return response.getBody(); } catch (UnirestException e) { logger.error("Cannot create account."); + throw e; } } From 8836ea44c5f7104dd6370f2aed066f4f44244b22 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Fri, 6 Feb 2026 21:35:27 +0100 Subject: [PATCH 02/23] mauve --- src/main/java/com/epita/creeps/AsyncExec.java | 10 ++-- src/main/java/com/epita/creeps/Citizen.java | 35 ++++++++++--- src/main/java/com/epita/creeps/Program.java | 50 +++++++++++++++---- .../com/epita/creeps/commands/Basics.java | 15 ++++-- 4 files changed, 86 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java index 99b7a33..7d63bc8 100644 --- a/src/main/java/com/epita/creeps/AsyncExec.java +++ b/src/main/java/com/epita/creeps/AsyncExec.java @@ -1,10 +1,14 @@ package com.epita.creeps; +import com.epita.creeps.given.vo.report.Report; +import com.epita.creeps.given.vo.response.CommandResponse; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import java.net.http.HttpResponse; +import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; @@ -17,10 +21,10 @@ public class AsyncExec { @Setter private static long ticksPerSecond = 1; - public static CompletableFuture asyncExec(Supplier supplier, long time) { - return CompletableFuture.supplyAsync(supplier, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); + public static CompletableFuture asyncExec(Supplier supplier, long time) { + return CompletableFuture.supplyAsync(supplier).thenApplyAsync(x -> x, + CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); } - public static void justWait(long time) { CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)).join(); } diff --git a/src/main/java/com/epita/creeps/Citizen.java b/src/main/java/com/epita/creeps/Citizen.java index ee7ac52..65aaf31 100644 --- a/src/main/java/com/epita/creeps/Citizen.java +++ b/src/main/java/com/epita/creeps/Citizen.java @@ -1,23 +1,42 @@ package com.epita.creeps; +import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Direction; +import com.epita.creeps.given.vo.response.CommandResponse; +import kong.unirest.core.HttpResponse; +import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; -import lombok.AllArgsConstructor; + +import java.util.concurrent.CompletableFuture; +//import java.util.logging.Logger; +import org.slf4j.Logger; public class Citizen { - private String id; - private String command_uri; + private final String id; + private final String command_uri; + private CompletableFuture> pendingAction; + public static String srvUrl; + public static Logger logger; public Citizen(String login, String citizen_id ) { + if (srvUrl == null || logger == null) { + throw new RuntimeException("Tried to create a citizen without properly initializing static fields"); + } id = citizen_id; - command_uri = "/command/" + login + "/" + citizen_id + "/"; + command_uri = srvUrl + "/command/" + login + "/" + citizen_id + "/"; } public void move(Direction direction) { - AsyncExec.asyncExec(() -> { - Unirest.post(command_uri + "move:"+direction.direction); - return null; - }, 2); + pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + "move:"+direction.direction).asJson(), 2); + } + + public CommandResponse waitFinished() { + if (pendingAction == null) { + logger.warn("Tried to wait a citizen with no pending action"); + return null; + } + JsonNode response = ((HttpResponse) pendingAction.join()).getBody(); + return Json.parse(response.toString(), CommandResponse.class); } public void noop() { diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 77bf8f4..4fe48fd 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -1,6 +1,10 @@ package com.epita.creeps; import com.epita.creeps.commands.Basics; +import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.geometry.Direction; +import com.epita.creeps.given.vo.response.CommandResponse; +import com.epita.creeps.given.vo.response.InitResponse; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -8,6 +12,7 @@ import kong.unirest.core.UnirestException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; public class Program { @@ -24,19 +29,26 @@ public class Program { srvUrl = "http://localhost:1664"; login = "marion.mavie"; - // Classes - logger = LoggerFactory.getLogger(Program.class); - Basics basics = new Basics(logger, srvUrl); - logger.info("Initializing"); - + // Arguments + boolean default_values = true; if (args.length == 3) { srvUrl = "http://" + args[0] + ":" + args[1]; login = args[2]; } else { - logger.warn("No given args: using the default values"); + default_values = false; } + + // Classes + logger = LoggerFactory.getLogger(Program.class); + Basics basics = new Basics(logger, srvUrl); + logger.info("Initializing"); + Citizen.srvUrl = srvUrl; + Citizen.logger = logger; logger.debug("Using server " + srvUrl + " with player " + login); + if (default_values) + logger.warn("No given args: using the default values"); + // Test HttpResponse response; try { @@ -45,12 +57,32 @@ public class Program { logger.error("Cannot connect to the server. Aborting..."); throw e; } - AsyncExec.justWait(3); +// AsyncExec.justWait(0); + // Create account and get init infos logger.info("Creating account"); - basics.connectAccount(login); + InitResponse initResponse = basics.connectAccount(login); - logger.info("Done"); + login = initResponse.login; // Just in case + AsyncExec.setTicksPerSecond((long)initResponse.setup.ticksPerSeconds); + Citizen citizen1 = new Citizen(login, initResponse.citizen1Id); + Citizen citizen2 = new Citizen(login, initResponse.citizen2Id); + + while (true) { + citizen1.move(Direction.RIGHT); + citizen2.move(Direction.UP); + + CommandResponse citizen1_resp = citizen1.waitFinished(); + CommandResponse citizen2_resp = citizen2.waitFinished(); + +// logger.debug("Received actions responses"); +// logger.debug("citizen1.error: " + citizen1_resp.error); +// logger.debug("citizen2.error: " + citizen2_resp.error); + } + + + +// logger.info("Done"); } // ### Get statistics diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index 9d75eef..740fd94 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -1,6 +1,8 @@ package com.epita.creeps.commands; import com.epita.creeps.AsyncExec; +import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.response.InitResponse; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -19,12 +21,17 @@ public class Basics { private Logger logger; private String srvUrl; - public JsonNode connectAccount(String login) { + public InitResponse connectAccount(String login) { try { - CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 10); + CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 0); HttpResponse response = (HttpResponse) resp.join(); - logger.debug(response.getBody().toPrettyString()); - return response.getBody(); +// logger.debug(response.getBody().toPrettyString()); + InitResponse initResponse = Json.parse(response.getBody().toString(), InitResponse.class); + if (initResponse.error != null) { + logger.error("Error in server response"); + throw new RuntimeException("Cannot create account"); + } + return initResponse; } catch (UnirestException e) { logger.error("Cannot create account."); throw e; From 97ced313d995978f17d4f3a8b9e1556be5c9322a Mon Sep 17 00:00:00 2001 From: Guillem George Date: Fri, 6 Feb 2026 23:01:51 +0100 Subject: [PATCH 03/23] hhhhhhhhhhh --- src/main/java/com/epita/creeps/AsyncExec.java | 10 ++++++-- src/main/java/com/epita/creeps/Program.java | 5 +--- .../com/epita/creeps/{ => units}/Citizen.java | 22 +++++------------- .../java/com/epita/creeps/units/Unit.java | 23 +++++++++++++++++++ 4 files changed, 38 insertions(+), 22 deletions(-) rename src/main/java/com/epita/creeps/{ => units}/Citizen.java (55%) create mode 100644 src/main/java/com/epita/creeps/units/Unit.java diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java index 7d63bc8..7a5034f 100644 --- a/src/main/java/com/epita/creeps/AsyncExec.java +++ b/src/main/java/com/epita/creeps/AsyncExec.java @@ -11,20 +11,26 @@ import java.net.http.HttpResponse; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; +import java.util.function.Function; import java.util.function.Supplier; // Handles server operations to respect commands delays -@AllArgsConstructor -public class AsyncExec { +@NoArgsConstructor +public class AsyncExec { @Getter @Setter private static long ticksPerSecond = 1; + private CompletableFuture task; + public static CompletableFuture asyncExec(Supplier supplier, long time) { return CompletableFuture.supplyAsync(supplier).thenApplyAsync(x -> x, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); } + public static CompletableFuture thenAsyncExec(CompletableFuture base, Function f, long time) { + return base.thenApplyAsync(f, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); + } public static void justWait(long time) { CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)).join(); } diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 4fe48fd..8fee7f0 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -1,10 +1,10 @@ package com.epita.creeps; import com.epita.creeps.commands.Basics; -import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Direction; import com.epita.creeps.given.vo.response.CommandResponse; import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.units.Citizen; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -12,9 +12,6 @@ import kong.unirest.core.UnirestException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.concurrent.CompletableFuture; -import java.util.concurrent.TimeUnit; - public class Program { private static String srvUrl; diff --git a/src/main/java/com/epita/creeps/Citizen.java b/src/main/java/com/epita/creeps/units/Citizen.java similarity index 55% rename from src/main/java/com/epita/creeps/Citizen.java rename to src/main/java/com/epita/creeps/units/Citizen.java index 65aaf31..9dbf319 100644 --- a/src/main/java/com/epita/creeps/Citizen.java +++ b/src/main/java/com/epita/creeps/units/Citizen.java @@ -1,5 +1,6 @@ -package com.epita.creeps; +package com.epita.creeps.units; +import com.epita.creeps.AsyncExec; import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Direction; import com.epita.creeps.given.vo.response.CommandResponse; @@ -7,27 +8,16 @@ import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; -import java.util.concurrent.CompletableFuture; -//import java.util.logging.Logger; -import org.slf4j.Logger; -public class Citizen { - private final String id; - private final String command_uri; - private CompletableFuture> pendingAction; - public static String srvUrl; - public static Logger logger; +public class Citizen extends Unit { public Citizen(String login, String citizen_id ) { - if (srvUrl == null || logger == null) { - throw new RuntimeException("Tried to create a citizen without properly initializing static fields"); - } - id = citizen_id; - command_uri = srvUrl + "/command/" + login + "/" + citizen_id + "/"; + super(login, citizen_id); } public void move(Direction direction) { - pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + "move:"+direction.direction).asJson(), 2); + pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + "move:"+direction.direction).asJson(), 2) + .thenApplyAsync( x -> x ); } public CommandResponse waitFinished() { diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java new file mode 100644 index 0000000..b163567 --- /dev/null +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -0,0 +1,23 @@ +package com.epita.creeps.units; + +import kong.unirest.core.HttpResponse; +import kong.unirest.core.JsonNode; +import org.slf4j.Logger; + +import java.util.concurrent.CompletableFuture; + +public abstract class Unit { + protected final String id; + protected final String command_uri; + protected CompletableFuture> pendingAction; + public static String srvUrl; + public static Logger logger; + + public Unit(String login, String id) { + if (srvUrl == null || logger == null) { + throw new RuntimeException("Tried to create a citizen without properly initializing static fields"); + } + this.id = id; + command_uri = srvUrl + "/command/" + login + "/" + id + "/"; + } +} From 58f5f4da8be3f3fdc20d71c60cc0fb8853c1aba0 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 16:01:37 +0100 Subject: [PATCH 04/23] =?UTF-8?q?Et=20voil=C3=A0=20TOUTES=20les=20commande?= =?UTF-8?q?s?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .factorypath | 14 ++++ .settings/org.eclipse.core.resources.prefs | 3 + .settings/org.eclipse.jdt.apt.core.prefs | 4 ++ .settings/org.eclipse.jdt.core.prefs | 9 +++ .settings/org.eclipse.m2e.core.prefs | 4 ++ src/main/java/com/epita/creeps/AsyncExec.java | 23 ++++--- src/main/java/com/epita/creeps/Program.java | 23 +++++-- .../epita/creeps/ServerReponseException.java | 7 ++ .../com/epita/creeps/commands/Basics.java | 21 ++++-- .../java/com/epita/creeps/units/Building.java | 14 ++++ .../java/com/epita/creeps/units/Citizen.java | 50 ++++++++++---- .../java/com/epita/creeps/units/Unit.java | 69 ++++++++++++++++++- 12 files changed, 205 insertions(+), 36 deletions(-) create mode 100644 .factorypath create mode 100644 .settings/org.eclipse.core.resources.prefs create mode 100644 .settings/org.eclipse.jdt.apt.core.prefs create mode 100644 .settings/org.eclipse.jdt.core.prefs create mode 100644 .settings/org.eclipse.m2e.core.prefs create mode 100644 src/main/java/com/epita/creeps/ServerReponseException.java create mode 100644 src/main/java/com/epita/creeps/units/Building.java diff --git a/.factorypath b/.factorypath new file mode 100644 index 0000000..41be359 --- /dev/null +++ b/.factorypath @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..e9441bb --- /dev/null +++ b/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,3 @@ +eclipse.preferences.version=1 +encoding//src/main/java=UTF-8 +encoding/=UTF-8 diff --git a/.settings/org.eclipse.jdt.apt.core.prefs b/.settings/org.eclipse.jdt.apt.core.prefs new file mode 100644 index 0000000..dfa4f3a --- /dev/null +++ b/.settings/org.eclipse.jdt.apt.core.prefs @@ -0,0 +1,4 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.apt.aptEnabled=true +org.eclipse.jdt.apt.genSrcDir=target/generated-sources/annotations +org.eclipse.jdt.apt.genTestSrcDir=target/generated-test-sources/test-annotations diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..8f693c0 --- /dev/null +++ b/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,9 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.targetPlatform=21 +org.eclipse.jdt.core.compiler.compliance=21 +org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled +org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning +org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=ignore +org.eclipse.jdt.core.compiler.processAnnotations=enabled +org.eclipse.jdt.core.compiler.release=enabled +org.eclipse.jdt.core.compiler.source=21 diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs new file mode 100644 index 0000000..f897a7f --- /dev/null +++ b/.settings/org.eclipse.m2e.core.prefs @@ -0,0 +1,4 @@ +activeProfiles= +eclipse.preferences.version=1 +resolveWorkspaceProjects=true +version=1 diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java index 7a5034f..fd36f47 100644 --- a/src/main/java/com/epita/creeps/AsyncExec.java +++ b/src/main/java/com/epita/creeps/AsyncExec.java @@ -1,14 +1,12 @@ package com.epita.creeps; -import com.epita.creeps.given.vo.report.Report; -import com.epita.creeps.given.vo.response.CommandResponse; -import lombok.AllArgsConstructor; + +import kong.unirest.core.HttpResponse; +import kong.unirest.core.JsonNode; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -import java.net.http.HttpResponse; -import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.function.Function; @@ -20,18 +18,23 @@ public class AsyncExec { @Getter @Setter - private static long ticksPerSecond = 1; - private CompletableFuture task; + private static float ticksPerSecond = 1; +// private CompletableFuture task; + public static long ticksToTime(long ticks) { + return Math.ceilDiv(ticks, (long)Math.ceil(ticksPerSecond)); + } public static CompletableFuture asyncExec(Supplier supplier, long time) { return CompletableFuture.supplyAsync(supplier).thenApplyAsync(x -> x, - CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); + CompletableFuture.delayedExecutor(ticksToTime(time), TimeUnit.SECONDS)); } public static CompletableFuture thenAsyncExec(CompletableFuture base, Function f, long time) { - return base.thenApplyAsync(f, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)); + return base.thenApplyAsync(f, CompletableFuture.delayedExecutor(time, TimeUnit.SECONDS)); } + public static void justWait(long time) { - CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time/ticksPerSecond + 1, TimeUnit.SECONDS)).join(); + CompletableFuture.supplyAsync(() -> 0, CompletableFuture.delayedExecutor(time, TimeUnit.SECONDS)).join(); } + } diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 8fee7f0..02fb30c 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -37,10 +37,9 @@ public class Program { // Classes logger = LoggerFactory.getLogger(Program.class); - Basics basics = new Basics(logger, srvUrl); logger.info("Initializing"); + Basics.setSrvUrl(srvUrl); Citizen.srvUrl = srvUrl; - Citizen.logger = logger; logger.debug("Using server " + srvUrl + " with player " + login); if (default_values) @@ -58,19 +57,31 @@ public class Program { // Create account and get init infos logger.info("Creating account"); - InitResponse initResponse = basics.connectAccount(login); + InitResponse initResponse = Basics.connectAccount(login); login = initResponse.login; // Just in case AsyncExec.setTicksPerSecond((long)initResponse.setup.ticksPerSeconds); Citizen citizen1 = new Citizen(login, initResponse.citizen1Id); Citizen citizen2 = new Citizen(login, initResponse.citizen2Id); - while (true) { + for(int i = 0; i < 3; i++) { citizen1.move(Direction.RIGHT); citizen2.move(Direction.UP); - CommandResponse citizen1_resp = citizen1.waitFinished(); - CommandResponse citizen2_resp = citizen2.waitFinished(); + citizen1.waitFinished(); + citizen2.waitFinished(); + +// logger.debug("Received actions responses"); +// logger.debug("citizen1.error: " + citizen1_resp.error); +// logger.debug("citizen2.error: " + citizen2_resp.error); + } + + for(int i = 0; i < 3; i++) { + citizen1.move(Direction.LEFT); + citizen2.move(Direction.DOWN); + + citizen1.waitFinished(); + citizen2.waitFinished(); // logger.debug("Received actions responses"); // logger.debug("citizen1.error: " + citizen1_resp.error); diff --git a/src/main/java/com/epita/creeps/ServerReponseException.java b/src/main/java/com/epita/creeps/ServerReponseException.java new file mode 100644 index 0000000..5757612 --- /dev/null +++ b/src/main/java/com/epita/creeps/ServerReponseException.java @@ -0,0 +1,7 @@ +package com.epita.creeps; + +public class ServerReponseException extends RuntimeException { + public ServerReponseException(String message) { + super(message); + } +} diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index 740fd94..bae31e7 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -1,7 +1,9 @@ package com.epita.creeps.commands; import com.epita.creeps.AsyncExec; +import com.epita.creeps.given.exception.NoReportException; import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.report.Report; import com.epita.creeps.given.vo.response.InitResponse; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; @@ -10,7 +12,9 @@ import kong.unirest.core.UnirestException; import lombok.AllArgsConstructor; import lombok.Getter; +import lombok.Setter; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.concurrent.CompletableFuture; @@ -18,10 +22,11 @@ import java.util.concurrent.CompletableFuture; @Getter public class Basics { - private Logger logger; - private String srvUrl; + private static final Logger logger = LoggerFactory.getLogger(Basics.class); + @Getter @Setter + private static String srvUrl; - public InitResponse connectAccount(String login) { + public static InitResponse connectAccount(String login) { try { CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 0); HttpResponse response = (HttpResponse) resp.join(); @@ -38,13 +43,19 @@ public class Basics { } } - public void getReport (String reportId) { + // Asks the server for a certain report + public static Report getReport (String reportId) { HttpResponse response; try { response = Unirest.get(srvUrl + "/report/" + reportId).asJson(); - logger.debug(response.getBody().toPrettyString()); + logger.debug("Got report: " + response.getBody().toPrettyString()); + return Json.parseReport(response.getBody().toString()); } catch (UnirestException e) { logger.error("Could not retrieve report"); + throw new RuntimeException(e); + } catch (NoReportException e) { + logger.error("Could not parse report: not a report"); + throw new RuntimeException(e); } } diff --git a/src/main/java/com/epita/creeps/units/Building.java b/src/main/java/com/epita/creeps/units/Building.java new file mode 100644 index 0000000..2ceebd7 --- /dev/null +++ b/src/main/java/com/epita/creeps/units/Building.java @@ -0,0 +1,14 @@ +package com.epita.creeps.units; + +public enum Building { + TOWNHALL("town-hall"), + HOUSEHOLD("household"), + SAWMILL("sawmill"), + SMELTERY("smeltery"), + ROAD("road"); + + public final String name; + private Building(final String building) { + this.name = building; + } +} diff --git a/src/main/java/com/epita/creeps/units/Citizen.java b/src/main/java/com/epita/creeps/units/Citizen.java index 9dbf319..67d62f8 100644 --- a/src/main/java/com/epita/creeps/units/Citizen.java +++ b/src/main/java/com/epita/creeps/units/Citizen.java @@ -1,13 +1,21 @@ package com.epita.creeps.units; import com.epita.creeps.AsyncExec; +import com.epita.creeps.ServerReponseException; +import com.epita.creeps.commands.Basics; +import com.epita.creeps.given.exception.NoReportException; import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Direction; +import com.epita.creeps.given.vo.parameter.MessageParameter; +import com.epita.creeps.given.vo.report.MoveReport; +import com.epita.creeps.given.vo.report.Report; import com.epita.creeps.given.vo.response.CommandResponse; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; +import java.util.concurrent.CompletableFuture; + public class Citizen extends Unit { @@ -16,20 +24,36 @@ public class Citizen extends Unit { } public void move(Direction direction) { - pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + "move:"+direction.direction).asJson(), 2) - .thenApplyAsync( x -> x ); + sendAction("move:"+direction.direction, 2); + } + public void observe() { + sendAction("observe", 1); + } + public void gather() { + sendAction("gather", 4); + } + public void unload() { + sendAction("unload", 3); + } + public void farm() { + sendAction("farm", 10); + } + public void build(Building building) { + sendAction("build:" + building.name, 20); + } + public void spawn(String unit) { + sendAction("spawn:" + unit, 6); + } + public void refine(String resource) { + sendAction("refine:" + resource, 8); + } + public void sendMessage(String receiver, String message) { + MessageParameter mp = new MessageParameter(receiver, message); + sendActionWithBody("message:send", Json.serialize(mp), 1); + } + public void fetchMessages() { + sendAction("message:fetch", 1); } - public CommandResponse waitFinished() { - if (pendingAction == null) { - logger.warn("Tried to wait a citizen with no pending action"); - return null; - } - JsonNode response = ((HttpResponse) pendingAction.join()).getBody(); - return Json.parse(response.toString(), CommandResponse.class); - } - public void noop() { -// AsyncExec.asyncExec() - } } diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index b163567..674f0e6 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -1,8 +1,16 @@ package com.epita.creeps.units; +import com.epita.creeps.AsyncExec; +import com.epita.creeps.ServerReponseException; +import com.epita.creeps.commands.Basics; +import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.report.Report; +import com.epita.creeps.given.vo.response.CommandResponse; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; +import kong.unirest.core.Unirest; import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.util.concurrent.CompletableFuture; @@ -10,14 +18,71 @@ public abstract class Unit { protected final String id; protected final String command_uri; protected CompletableFuture> pendingAction; + protected CompletableFuture pendingReport; public static String srvUrl; - public static Logger logger; + public static final Logger logger = LoggerFactory.getLogger(Unit.class); public Unit(String login, String id) { - if (srvUrl == null || logger == null) { + if (srvUrl == null) { throw new RuntimeException("Tried to create a citizen without properly initializing static fields"); } this.id = id; command_uri = srvUrl + "/command/" + login + "/" + id + "/"; } + + // Sends a specific action to the server using it's HTTPS string representation + // Sets pending action accordingly and asks for a report after `delay` ticks + public void sendActionWithBody(String actionCode, String body, long delay) { + // Move + pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + actionCode).asJson(), delay) + .thenApplyAsync( x -> x ); + // Get report + pendingReport = getCommandReport(); + } + + // Just sends an action with an empty body + public void sendAction(String actionCode, long delay) { + sendActionWithBody(actionCode, "{}", delay); + } + + public void upgrade() { + sendAction("upgrade", 1); + } + public void noop() { + sendAction("noop", 1); + } + + /* + * @return true if action succeeded, false otherwise + */ + public boolean waitFinished() { + if (pendingAction == null || pendingReport == null) { + logger.warn("Tried to wait a citizen with no pending action or report"); + return false; + } + Report r = pendingReport.join(); + if (r == null) { + logger.warn("Invalid report received: null value"); + return false; + } + logger.debug("Got report: " + r); + + return r.errorCode != null; + } + + + // Retrieves the report of the current pending action from the server + private CompletableFuture getCommandReport() { + if (pendingAction == null) { + logger.warn("Tried to retrieve report but there's no pending action"); + return null; + } + return AsyncExec.thenAsyncExec(pendingAction, x -> { + CommandResponse cr = Json.parse(x.getBody().toString(), CommandResponse.class); + if (cr.error != null) + throw new ServerReponseException("Error retrieving the report id"); + String reportId = cr.reportId; + return Basics.getReport(reportId); + }, 0); + } } From d62bd8410ac58322c1888ae13ae8084d41aa5fd3 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 16:25:00 +0100 Subject: [PATCH 05/23] build and gather --- src/main/java/com/epita/creeps/AsyncExec.java | 8 +++-- src/main/java/com/epita/creeps/Program.java | 25 ++++++---------- .../com/epita/creeps/commands/Basics.java | 5 +++- .../java/com/epita/creeps/units/Citizen.java | 30 ++++++++++++------- .../java/com/epita/creeps/units/Unit.java | 16 ++++++---- 5 files changed, 49 insertions(+), 35 deletions(-) diff --git a/src/main/java/com/epita/creeps/AsyncExec.java b/src/main/java/com/epita/creeps/AsyncExec.java index fd36f47..46b04f3 100644 --- a/src/main/java/com/epita/creeps/AsyncExec.java +++ b/src/main/java/com/epita/creeps/AsyncExec.java @@ -16,11 +16,15 @@ import java.util.function.Supplier; @NoArgsConstructor public class AsyncExec { - @Getter - @Setter + private static float ticksPerSecond = 1; // private CompletableFuture task; + + public static void setTicksPerSecond(float ticksPerSecond) { + AsyncExec.ticksPerSecond = ticksPerSecond; + } + public static long ticksToTime(long ticks) { return Math.ceilDiv(ticks, (long)Math.ceil(ticksPerSecond)); } diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 02fb30c..18c05f1 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -4,6 +4,7 @@ import com.epita.creeps.commands.Basics; import com.epita.creeps.given.vo.geometry.Direction; import com.epita.creeps.given.vo.response.CommandResponse; import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.units.Building; import com.epita.creeps.units.Citizen; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; @@ -60,32 +61,24 @@ public class Program { InitResponse initResponse = Basics.connectAccount(login); login = initResponse.login; // Just in case - AsyncExec.setTicksPerSecond((long)initResponse.setup.ticksPerSeconds); + AsyncExec.setTicksPerSecond((float) initResponse.setup.ticksPerSeconds); Citizen citizen1 = new Citizen(login, initResponse.citizen1Id); Citizen citizen2 = new Citizen(login, initResponse.citizen2Id); - for(int i = 0; i < 3; i++) { - citizen1.move(Direction.RIGHT); - citizen2.move(Direction.UP); + citizen1.move(Direction.UP).waitFinished(); + + while (true) { + citizen1.move(Direction.UP); + citizen2.move(Direction.RIGHT); citizen1.waitFinished(); citizen2.waitFinished(); -// logger.debug("Received actions responses"); -// logger.debug("citizen1.error: " + citizen1_resp.error); -// logger.debug("citizen2.error: " + citizen2_resp.error); - } - - for(int i = 0; i < 3; i++) { - citizen1.move(Direction.LEFT); - citizen2.move(Direction.DOWN); + citizen1.build(Building.ROAD); + citizen2.gather(); citizen1.waitFinished(); citizen2.waitFinished(); - -// logger.debug("Received actions responses"); -// logger.debug("citizen1.error: " + citizen1_resp.error); -// logger.debug("citizen2.error: " + citizen2_resp.error); } diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index bae31e7..7a21963 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -23,9 +23,12 @@ import java.util.concurrent.CompletableFuture; public class Basics { private static final Logger logger = LoggerFactory.getLogger(Basics.class); - @Getter @Setter private static String srvUrl; + public static void setSrvUrl(String srvUrl) { + Basics.srvUrl = srvUrl; + } + public static InitResponse connectAccount(String login) { try { CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.post(srvUrl + "/init/" + login).asJson(), 0); diff --git a/src/main/java/com/epita/creeps/units/Citizen.java b/src/main/java/com/epita/creeps/units/Citizen.java index 67d62f8..a5e1c0d 100644 --- a/src/main/java/com/epita/creeps/units/Citizen.java +++ b/src/main/java/com/epita/creeps/units/Citizen.java @@ -23,36 +23,46 @@ public class Citizen extends Unit { super(login, citizen_id); } - public void move(Direction direction) { + public Citizen move(Direction direction) { sendAction("move:"+direction.direction, 2); + return this; } - public void observe() { + public Citizen observe() { sendAction("observe", 1); + return this; } - public void gather() { + public Citizen gather() { sendAction("gather", 4); + return this; } - public void unload() { + public Citizen unload() { sendAction("unload", 3); + return this; } - public void farm() { + public Citizen farm() { sendAction("farm", 10); + return this; } - public void build(Building building) { + public Citizen build(Building building) { sendAction("build:" + building.name, 20); + return this; } - public void spawn(String unit) { + public Citizen spawn(String unit) { sendAction("spawn:" + unit, 6); + return this; } - public void refine(String resource) { + public Citizen refine(String resource) { sendAction("refine:" + resource, 8); + return this; } - public void sendMessage(String receiver, String message) { + public Citizen sendMessage(String receiver, String message) { MessageParameter mp = new MessageParameter(receiver, message); sendActionWithBody("message:send", Json.serialize(mp), 1); + return this; } - public void fetchMessages() { + public Citizen fetchMessages() { sendAction("message:fetch", 1); + return this; } diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index 674f0e6..6ba8cd8 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -15,12 +15,16 @@ import org.slf4j.LoggerFactory; import java.util.concurrent.CompletableFuture; public abstract class Unit { + + public static String srvUrl; + public static final Logger logger = LoggerFactory.getLogger(Unit.class); + protected final String id; protected final String command_uri; protected CompletableFuture> pendingAction; protected CompletableFuture pendingReport; - public static String srvUrl; - public static final Logger logger = LoggerFactory.getLogger(Unit.class); + protected Report lastReport; + public Unit(String login, String id) { if (srvUrl == null) { @@ -60,14 +64,14 @@ public abstract class Unit { logger.warn("Tried to wait a citizen with no pending action or report"); return false; } - Report r = pendingReport.join(); - if (r == null) { + lastReport = pendingReport.join(); + if (lastReport == null) { logger.warn("Invalid report received: null value"); return false; } - logger.debug("Got report: " + r); + logger.debug("Got report: " + lastReport); - return r.errorCode != null; + return lastReport.errorCode != null; } From 45b49327e3c236e99ba629d5492ab318fca423de Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 18:30:34 +0100 Subject: [PATCH 06/23] fairryeuur --- src/main/java/com/epita/creeps/Program.java | 36 ++++++++---- .../com/epita/creeps/commands/Basics.java | 58 +++++++++++++++++-- .../epita/creeps/commands/ObeserveReport.java | 0 .../com/epita/creeps/units/BomberBot.java | 10 ++++ .../java/com/epita/creeps/units/Citizen.java | 5 +- .../java/com/epita/creeps/units/Turret.java | 27 +++++++++ .../java/com/epita/creeps/units/Unit.java | 21 ++++++- 7 files changed, 136 insertions(+), 21 deletions(-) create mode 100644 src/main/java/com/epita/creeps/commands/ObeserveReport.java create mode 100644 src/main/java/com/epita/creeps/units/BomberBot.java create mode 100644 src/main/java/com/epita/creeps/units/Turret.java diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 18c05f1..a4e3d29 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -2,21 +2,29 @@ package com.epita.creeps; import com.epita.creeps.commands.Basics; import com.epita.creeps.given.vo.geometry.Direction; +import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.response.CommandResponse; import com.epita.creeps.given.vo.response.InitResponse; import com.epita.creeps.units.Building; import com.epita.creeps.units.Citizen; +import com.epita.creeps.units.Turret; +import com.epita.creeps.units.Unit; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; import kong.unirest.core.UnirestException; +import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; + public class Program { private static String srvUrl; private static Logger logger; + @Getter private static String login; public static void main(String[] args) { @@ -62,24 +70,28 @@ public class Program { login = initResponse.login; // Just in case AsyncExec.setTicksPerSecond((float) initResponse.setup.ticksPerSeconds); - Citizen citizen1 = new Citizen(login, initResponse.citizen1Id); - Citizen citizen2 = new Citizen(login, initResponse.citizen2Id); + Citizen citizen1 = new Citizen(login, initResponse.citizen1Id, initResponse.householdCoordinates); + Citizen citizen2 = new Citizen(login, initResponse.citizen2Id, initResponse.householdCoordinates); + Unit.getUnits().add(citizen1); + Unit.getUnits().add(citizen2); citizen1.move(Direction.UP).waitFinished(); - while (true) { - citizen1.move(Direction.UP); - citizen2.move(Direction.RIGHT); - citizen1.waitFinished(); - citizen2.waitFinished(); + citizen1.fetchMessages(); + citizen2.move(Direction.UP); + citizen1.waitFinished(); + citizen2.waitFinished(); - citizen1.build(Building.ROAD); - citizen2.gather(); + citizen2.spawn("turret"); + citizen1.move(Direction.RIGHT); + citizen1.waitFinished(); + citizen2.waitFinished(); + + List turrets = Turret.getTurretUnits(); + Turret t = (Turret) turrets.getFirst(); + t.fire(t.getPosition().plus(new Point(4, 0))).waitFinished(); - citizen1.waitFinished(); - citizen2.waitFinished(); - } diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index 7a21963..a626b2c 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -1,10 +1,14 @@ package com.epita.creeps.commands; import com.epita.creeps.AsyncExec; +import com.epita.creeps.Program; 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.report.Report; +import com.epita.creeps.given.vo.report.*; import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.units.Turret; +import com.epita.creeps.units.Unit; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -48,18 +52,64 @@ public class Basics { // Asks the server for a certain report public static Report getReport (String reportId) { - HttpResponse response; + HttpResponse response = null; try { response = Unirest.get(srvUrl + "/report/" + reportId).asJson(); - logger.debug("Got report: " + response.getBody().toPrettyString()); - return Json.parseReport(response.getBody().toString()); +// logger.debug("Got report: " + response.getBody().toPrettyString()); + Report report = Json.parseReport(response.getBody().toString()); + handleReport(report); + return report; } catch (UnirestException e) { logger.error("Could not retrieve report"); throw new RuntimeException(e); } catch (NoReportException e) { logger.error("Could not parse report: not a report"); + logger.debug(response.getBody().toPrettyString()); throw new RuntimeException(e); } } + public static void handleReport(Report report) { + Cartographer c = Cartographer.INSTANCE; + if (report.opcode.startsWith("farm")) { + c.register((FarmReport) report); + } + else if (report.opcode.startsWith("gather")) { + c.register((GatherReport) report); + } + else if (report.opcode.startsWith("move")) { + c.register((MoveReport) report); + } + else if (report.opcode.startsWith("build")) { + c.register((BuildReport) report); + } + else if (report.opcode.startsWith("observe")) { + c.register((ObserveReport) report); + } + else if (report.opcode.startsWith("spawn")) + { + SpawnReport spawnReport = (SpawnReport) report; + if (spawnReport.errorCode != null) { + logger.warn("Could not spawn unit: got report with an error: " + report.errorCode); + } + if (spawnReport.spawnedUnit.opcode.endsWith("turret")) { + Turret turret = new Turret(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position); + Unit.getUnits().add(turret); + } + else if (spawnReport.spawnedUnit.opcode.endsWith("bomber-bot")) { + Turret turret = new Turret(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position); + Unit.getUnits().add(turret); + } + else { + logger.warn("Spawned unit is an unknown type. Ignored..."); + } + } + else if (report.opcode.startsWith("fire")) { + logger.debug("FIRREEE!!"); + } + else { + logger.warn("Unknown opcode '" + report.opcode + "' in the server report. Ignored..."); + } + } + } diff --git a/src/main/java/com/epita/creeps/commands/ObeserveReport.java b/src/main/java/com/epita/creeps/commands/ObeserveReport.java new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/com/epita/creeps/units/BomberBot.java b/src/main/java/com/epita/creeps/units/BomberBot.java new file mode 100644 index 0000000..9250b47 --- /dev/null +++ b/src/main/java/com/epita/creeps/units/BomberBot.java @@ -0,0 +1,10 @@ +package com.epita.creeps.units; + +import com.epita.creeps.given.vo.geometry.Point; + +public class BomberBot extends Unit { + + public BomberBot(String login, String id, Point position) { + super(login, id, position); + } +} diff --git a/src/main/java/com/epita/creeps/units/Citizen.java b/src/main/java/com/epita/creeps/units/Citizen.java index a5e1c0d..6d2b4a5 100644 --- a/src/main/java/com/epita/creeps/units/Citizen.java +++ b/src/main/java/com/epita/creeps/units/Citizen.java @@ -6,6 +6,7 @@ import com.epita.creeps.commands.Basics; import com.epita.creeps.given.exception.NoReportException; import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Direction; +import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.parameter.MessageParameter; import com.epita.creeps.given.vo.report.MoveReport; import com.epita.creeps.given.vo.report.Report; @@ -19,8 +20,8 @@ import java.util.concurrent.CompletableFuture; public class Citizen extends Unit { - public Citizen(String login, String citizen_id ) { - super(login, citizen_id); + public Citizen(String login, String citizen_id, Point position) { + super(login, citizen_id, position); } public Citizen move(Direction direction) { diff --git a/src/main/java/com/epita/creeps/units/Turret.java b/src/main/java/com/epita/creeps/units/Turret.java new file mode 100644 index 0000000..f2ba638 --- /dev/null +++ b/src/main/java/com/epita/creeps/units/Turret.java @@ -0,0 +1,27 @@ +package com.epita.creeps.units; + +import com.epita.creeps.given.extra.Cartographer; +import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.geometry.Point; +import com.epita.creeps.given.vo.parameter.FireParameter; + +import java.util.List; + +public class Turret extends Unit { + + public Turret(String login, String id, Point position) { + super(login, id, position); + } + + // Retrieves all units that are turrets + public static List getTurretUnits() { + return getUnits().stream().filter(unit -> unit.getClass() == Turret.class).toList(); + } + + public Turret fire(Point target) { + FireParameter fp = new FireParameter(target); + Cartographer cartographer = Cartographer.INSTANCE; + sendActionWithBody("fire:turret", Json.serialize(fp), 2); + return this; + } +} diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index 6ba8cd8..fdff9cf 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -4,33 +4,42 @@ import com.epita.creeps.AsyncExec; import com.epita.creeps.ServerReponseException; import com.epita.creeps.commands.Basics; import com.epita.creeps.given.json.Json; +import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.report.Report; import com.epita.creeps.given.vo.response.CommandResponse; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; +import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.util.ArrayList; +import java.util.List; import java.util.concurrent.CompletableFuture; public abstract class Unit { + @Getter + private static final List units = new ArrayList<>(); public static String srvUrl; public static final Logger logger = LoggerFactory.getLogger(Unit.class); protected final String id; + @Getter + protected final Point position; protected final String command_uri; protected CompletableFuture> pendingAction; protected CompletableFuture pendingReport; protected Report lastReport; + protected boolean idle = true; - - public Unit(String login, String id) { + public Unit(String login, String id, Point position) { if (srvUrl == null) { throw new RuntimeException("Tried to create a citizen without properly initializing static fields"); } this.id = id; + this.position = position; command_uri = srvUrl + "/command/" + login + "/" + id + "/"; } @@ -38,7 +47,8 @@ public abstract class Unit { // Sets pending action accordingly and asks for a report after `delay` ticks public void sendActionWithBody(String actionCode, String body, long delay) { // Move - pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + actionCode).asJson(), delay) + idle = false; + pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + actionCode).body(body).asJson(), delay) .thenApplyAsync( x -> x ); // Get report pendingReport = getCommandReport(); @@ -60,6 +70,10 @@ public abstract class Unit { * @return true if action succeeded, false otherwise */ public boolean waitFinished() { + if (idle) { + logger.warn("Tried to wait for an idle citizen"); + return false; + } if (pendingAction == null || pendingReport == null) { logger.warn("Tried to wait a citizen with no pending action or report"); return false; @@ -70,6 +84,7 @@ public abstract class Unit { return false; } logger.debug("Got report: " + lastReport); + idle = true; return lastReport.errorCode != null; } From d3f6fceb6a6581027948349af90177db4df84313 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 18:56:06 +0100 Subject: [PATCH 07/23] nicole --- src/main/java/com/epita/creeps/Program.java | 31 ++++++++++++------- .../com/epita/creeps/commands/Basics.java | 13 ++++++++ .../java/com/epita/creeps/units/Unit.java | 4 ++- 3 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index a4e3d29..1213993 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -5,6 +5,7 @@ import com.epita.creeps.given.vo.geometry.Direction; import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.response.CommandResponse; import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.given.vo.response.StatisticsResponse; import com.epita.creeps.units.Building; import com.epita.creeps.units.Citizen; import com.epita.creeps.units.Turret; @@ -75,22 +76,28 @@ public class Program { Unit.getUnits().add(citizen1); Unit.getUnits().add(citizen2); - citizen1.move(Direction.UP).waitFinished(); + StatisticsResponse statistics = Basics.getStatistics(); + logger.debug(statistics.toString()); + + while (true) { + for (var player : statistics.players) { + if (player.name == login) + continue; + citizen1.sendMessage(player.name, "Nicole"); + citizen2.sendMessage(player.name,"Ouvre"); + citizen1.waitFinished(); + citizen2.waitFinished(); + citizen1.sendMessage(player.name, "Nicole"); + citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); + citizen1.waitFinished(); + citizen2.waitFinished(); + } + } + - citizen1.fetchMessages(); - citizen2.move(Direction.UP); - citizen1.waitFinished(); - citizen2.waitFinished(); - citizen2.spawn("turret"); - citizen1.move(Direction.RIGHT); - citizen1.waitFinished(); - citizen2.waitFinished(); - List turrets = Turret.getTurretUnits(); - Turret t = (Turret) turrets.getFirst(); - t.fire(t.getPosition().plus(new Point(4, 0))).waitFinished(); diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index a626b2c..892df1f 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -7,6 +7,7 @@ import com.epita.creeps.given.extra.Cartographer; import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.report.*; import com.epita.creeps.given.vo.response.InitResponse; +import com.epita.creeps.given.vo.response.StatisticsResponse; import com.epita.creeps.units.Turret; import com.epita.creeps.units.Unit; import kong.unirest.core.HttpResponse; @@ -50,6 +51,18 @@ public class Basics { } } + + public static StatisticsResponse getStatistics() { + try { + CompletableFuture> resp = AsyncExec.asyncExec(() -> Unirest.get(srvUrl + "/statistics").asJson(), 0); + HttpResponse response = resp.join(); + return Json.parse(response.getBody().toString(), StatisticsResponse.class); + } catch (UnirestException e) { + logger.error("Cannot retrieve statistics."); + throw e; + } + } + // Asks the server for a certain report public static Report getReport (String reportId) { HttpResponse response = null; diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index fdff9cf..bb16498 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -98,8 +98,10 @@ public abstract class Unit { } return AsyncExec.thenAsyncExec(pendingAction, x -> { CommandResponse cr = Json.parse(x.getBody().toString(), CommandResponse.class); - if (cr.error != null) + if (cr.error != null) { + logger.debug("Server reponse: " + cr.toString()); throw new ServerReponseException("Error retrieving the report id"); + } String reportId = cr.reportId; return Basics.getReport(reportId); }, 0); From c294c61a85bf8a6bcc89caf369a517c2a6b6363e Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:09:40 +0100 Subject: [PATCH 08/23] road to 100k --- src/main/java/com/epita/creeps/Program.java | 87 +++++++++++++++---- .../com/epita/creeps/commands/Basics.java | 5 +- .../com/epita/creeps/units/BomberBot.java | 16 ++++ .../java/com/epita/creeps/units/Unit.java | 6 +- 4 files changed, 94 insertions(+), 20 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 1213993..930c3f3 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -6,10 +6,7 @@ import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.response.CommandResponse; import com.epita.creeps.given.vo.response.InitResponse; import com.epita.creeps.given.vo.response.StatisticsResponse; -import com.epita.creeps.units.Building; -import com.epita.creeps.units.Citizen; -import com.epita.creeps.units.Turret; -import com.epita.creeps.units.Unit; +import com.epita.creeps.units.*; import kong.unirest.core.HttpResponse; import kong.unirest.core.JsonNode; import kong.unirest.core.Unirest; @@ -79,21 +76,77 @@ public class Program { StatisticsResponse statistics = Basics.getStatistics(); logger.debug(statistics.toString()); - while (true) { - for (var player : statistics.players) { - if (player.name == login) - continue; - citizen1.sendMessage(player.name, "Nicole"); - citizen2.sendMessage(player.name,"Ouvre"); - citizen1.waitFinished(); - citizen2.waitFinished(); - citizen1.sendMessage(player.name, "Nicole"); - citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); - citizen1.waitFinished(); - citizen2.waitFinished(); - } + + + + // Gossip +// while (true) { +// for (var player : statistics.players) { +// if (player.name == login) +// continue; +// citizen1.sendMessage(player.name, "Nicole"); +// citizen2.sendMessage(player.name,"Ouvre"); +// citizen1.sendMessage(player.name, "Nicole"); +// citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); +// } +// } + + // timoutheou +// while (true) { +// for (var player : statistics.players) { +// if (player.name == login || !player.name.contains("battefort")) +// continue; +// citizen1.sendMessage(player.name, "Nicole"); +// citizen2.sendMessage(player.name,"Ouvre"); +// citizen1.sendMessage(player.name, "Nicole"); +// citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); +// citizen1.sendMessage(player.name, "<3"); +// citizen2.fetchMessages(); +// } +// } + + citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); + + // Kaboom & epic fail + citizen1.spawn("bomber-bot").waitFinished(); + List bomberos = BomberBot.getBomberBotUnits(); + BomberBot bomberau = (BomberBot) bomberos.getFirst(); + + bomberau.upgrade(); +// bomberau.fire(); + + // ======================================================= + // Stormtrooper + citizen1.spawn("turret").waitFinished(); + List tourelles = Turret.getTurretUnits(); + Turret unerelle = (Turret) tourelles.getFirst(); + for (int i = 0; i < 101; i++) { + unerelle.fire(unerelle.getPosition().plus(new Point(0, 1))); } + // Gather resources + while (true) { + citizen1.move(Direction.RIGHT); + citizen2.move(Direction.LEFT); + citizen1.gather(); + citizen2.gather(); + citizen1.move(Direction.UP); + citizen2.move(Direction.DOWN); + citizen1.gather(); + citizen2.gather(); + } + + // Country roads +// while (true) { +// citizen1.move(Direction.RIGHT); +// citizen2.move(Direction.LEFT); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); +// citizen1.move(Direction.UP); +// citizen2.move(Direction.DOWN); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); +// } diff --git a/src/main/java/com/epita/creeps/commands/Basics.java b/src/main/java/com/epita/creeps/commands/Basics.java index 892df1f..070fab9 100644 --- a/src/main/java/com/epita/creeps/commands/Basics.java +++ b/src/main/java/com/epita/creeps/commands/Basics.java @@ -8,6 +8,7 @@ import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.report.*; import com.epita.creeps.given.vo.response.InitResponse; import com.epita.creeps.given.vo.response.StatisticsResponse; +import com.epita.creeps.units.BomberBot; import com.epita.creeps.units.Turret; import com.epita.creeps.units.Unit; import kong.unirest.core.HttpResponse; @@ -110,8 +111,8 @@ public class Basics { Unit.getUnits().add(turret); } else if (spawnReport.spawnedUnit.opcode.endsWith("bomber-bot")) { - Turret turret = new Turret(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position); - Unit.getUnits().add(turret); + BomberBot bombhero = new BomberBot(Program.getLogin(), spawnReport.spawnedUnitId, spawnReport.spawnedUnit.position); + Unit.getUnits().add(bombhero); } else { logger.warn("Spawned unit is an unknown type. Ignored..."); diff --git a/src/main/java/com/epita/creeps/units/BomberBot.java b/src/main/java/com/epita/creeps/units/BomberBot.java index 9250b47..c499dea 100644 --- a/src/main/java/com/epita/creeps/units/BomberBot.java +++ b/src/main/java/com/epita/creeps/units/BomberBot.java @@ -1,10 +1,26 @@ package com.epita.creeps.units; +import com.epita.creeps.given.extra.Cartographer; +import com.epita.creeps.given.json.Json; import com.epita.creeps.given.vo.geometry.Point; +import com.epita.creeps.given.vo.parameter.FireParameter; + +import java.util.List; public class BomberBot extends Unit { public BomberBot(String login, String id, Point position) { super(login, id, position); } + + // Retrieves all units that are turrets + public static List getBomberBotUnits() { + return getUnits().stream().filter(unit -> unit.getClass() == BomberBot.class).toList(); + } + + public BomberBot fire() { + FireParameter fp = new FireParameter(this.position); + sendActionWithBody("fire:bomber-bot", Json.serialize(fp), 2); + return this; + } } diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index bb16498..bed7f4e 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -46,7 +46,11 @@ public abstract class Unit { // Sends a specific action to the server using it's HTTPS string representation // Sets pending action accordingly and asks for a report after `delay` ticks public void sendActionWithBody(String actionCode, String body, long delay) { - // Move + if (!idle) { +// logger.warn("Unit is already busy, queuing action"); + this.waitFinished(); + } + // Do idle = false; pendingAction = AsyncExec.asyncExec(() -> Unirest.post(command_uri + actionCode).body(body).asJson(), delay) .thenApplyAsync( x -> x ); From 8be4907c256d1e9ada12253d5430633cb492e0ae Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:25:13 +0100 Subject: [PATCH 09/23] caboume --- src/main/java/com/epita/creeps/Program.java | 73 +++++++++++---------- 1 file changed, 40 insertions(+), 33 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 930c3f3..fcf7255 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -1,6 +1,7 @@ package com.epita.creeps; import com.epita.creeps.commands.Basics; +import com.epita.creeps.given.extra.Cartographer; import com.epita.creeps.given.vo.geometry.Direction; import com.epita.creeps.given.vo.geometry.Point; import com.epita.creeps.given.vo.response.CommandResponse; @@ -73,26 +74,31 @@ public class Program { Unit.getUnits().add(citizen1); Unit.getUnits().add(citizen2); - StatisticsResponse statistics = Basics.getStatistics(); - logger.debug(statistics.toString()); +// StatisticsResponse statistics = Basics.getStatistics(); +// logger.debug(statistics.toString()); // Gossip -// while (true) { -// for (var player : statistics.players) { -// if (player.name == login) +// for (int i = 0; i < 60; i++) { +//// for (var player : statistics.players) { +// StatisticsResponse statistics = Basics.getStatistics(); +// +// var player = statistics.players.getFirst(); +// if (player.name == login) { +// i--; // continue; +// } // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name,"Ouvre"); // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); -// } +//// } // } - // timoutheou -// while (true) { +// // timoutheou +// for (int i = 0; i < 2; i++) { // for (var player : statistics.players) { // if (player.name == login || !player.name.contains("battefort")) // continue; @@ -105,49 +111,50 @@ public class Program { // } // } - citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); + // Negotiator +// citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); // Kaboom & epic fail citizen1.spawn("bomber-bot").waitFinished(); List bomberos = BomberBot.getBomberBotUnits(); BomberBot bomberau = (BomberBot) bomberos.getFirst(); - bomberau.upgrade(); -// bomberau.fire(); +// bomberau.upgrade(); + bomberau.fire(); // ======================================================= // Stormtrooper - citizen1.spawn("turret").waitFinished(); - List tourelles = Turret.getTurretUnits(); - Turret unerelle = (Turret) tourelles.getFirst(); - for (int i = 0; i < 101; i++) { - unerelle.fire(unerelle.getPosition().plus(new Point(0, 1))); - } +// citizen1.spawn("turret").waitFinished(); +// List tourelles = Turret.getTurretUnits(); +// Turret unerelle = (Turret) tourelles.getFirst(); +// for (int i = 0; i < 101; i++) { +// unerelle.fire(unerelle.getPosition().plus(new Point(0, 1))); +// } // Gather resources - while (true) { - citizen1.move(Direction.RIGHT); - citizen2.move(Direction.LEFT); - citizen1.gather(); - citizen2.gather(); - citizen1.move(Direction.UP); - citizen2.move(Direction.DOWN); - citizen1.gather(); - citizen2.gather(); - } - - // Country roads // while (true) { // citizen1.move(Direction.RIGHT); // citizen2.move(Direction.LEFT); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); +// citizen1.gather(); +// citizen2.gather(); // citizen1.move(Direction.UP); // citizen2.move(Direction.DOWN); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); +// citizen1.gather(); +// citizen2.gather(); // } + // Country roads + while (true) { + citizen1.move(Direction.RIGHT); + citizen2.move(Direction.LEFT); + citizen1.build(Building.ROAD); + citizen2.build(Building.ROAD); + citizen1.move(Direction.UP); + citizen2.move(Direction.DOWN); + citizen1.build(Building.ROAD); + citizen2.build(Building.ROAD); + } + From 66fd1ce173a4385377b9df5547f66c6afd0b8b21 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:38:25 +0100 Subject: [PATCH 10/23] coucou tristan --- src/main/java/com/epita/creeps/Program.java | 23 +++++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index fcf7255..e7d2291 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -74,8 +74,8 @@ public class Program { Unit.getUnits().add(citizen1); Unit.getUnits().add(citizen2); -// StatisticsResponse statistics = Basics.getStatistics(); -// logger.debug(statistics.toString()); + StatisticsResponse statistics = Basics.getStatistics(); + logger.debug(statistics.toString()); @@ -97,19 +97,24 @@ public class Program { //// } // } -// // timoutheou -// for (int i = 0; i < 2; i++) { -// for (var player : statistics.players) { -// if (player.name == login || !player.name.contains("battefort")) -// continue; + // timoutheou + for (int i = 0; i < 3; i++) { + for (var player : statistics.players) { + if (player.name == login || !player.name.contains("brainkel")) { + i--; + continue; + } // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name,"Ouvre"); // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); // citizen1.sendMessage(player.name, "<3"); // citizen2.fetchMessages(); -// } -// } + + citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); + citizen2.fetchMessages(); + } + } // Negotiator // citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); From 4bf4cf89e29440229cd95ca44332281cc8650e3a Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:39:47 +0100 Subject: [PATCH 11/23] tristanfix --- src/main/java/com/epita/creeps/Program.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index e7d2291..df07ae7 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -98,7 +98,7 @@ public class Program { // } // timoutheou - for (int i = 0; i < 3; i++) { + for (int i = 0; i < 12; i++) { for (var player : statistics.players) { if (player.name == login || !player.name.contains("brainkel")) { i--; From 4c74873c655f91b665df540c75903f2b9bbf41c5 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:44:35 +0100 Subject: [PATCH 12/23] flop --- src/main/java/com/epita/creeps/Program.java | 35 ++++++++++----------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index df07ae7..2602718 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -98,10 +98,9 @@ public class Program { // } // timoutheou - for (int i = 0; i < 12; i++) { + while (true) { for (var player : statistics.players) { if (player.name == login || !player.name.contains("brainkel")) { - i--; continue; } // citizen1.sendMessage(player.name, "Nicole"); @@ -120,12 +119,12 @@ public class Program { // citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); // Kaboom & epic fail - citizen1.spawn("bomber-bot").waitFinished(); - List bomberos = BomberBot.getBomberBotUnits(); - BomberBot bomberau = (BomberBot) bomberos.getFirst(); - -// bomberau.upgrade(); - bomberau.fire(); +// citizen1.spawn("bomber-bot").waitFinished(); +// List bomberos = BomberBot.getBomberBotUnits(); +// BomberBot bomberau = (BomberBot) bomberos.getFirst(); +// +//// bomberau.upgrade(); +// bomberau.fire(); // ======================================================= // Stormtrooper @@ -149,16 +148,16 @@ public class Program { // } // Country roads - while (true) { - citizen1.move(Direction.RIGHT); - citizen2.move(Direction.LEFT); - citizen1.build(Building.ROAD); - citizen2.build(Building.ROAD); - citizen1.move(Direction.UP); - citizen2.move(Direction.DOWN); - citizen1.build(Building.ROAD); - citizen2.build(Building.ROAD); - } +// while (true) { +// citizen1.move(Direction.RIGHT); +// citizen2.move(Direction.LEFT); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); +// citizen1.move(Direction.UP); +// citizen2.move(Direction.DOWN); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); +// } From e70073b7fe20d8e82a1ecece54d2e2a9306d3b8d Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:49:10 +0100 Subject: [PATCH 13/23] while trou --- src/main/java/com/epita/creeps/Program.java | 16 ++++++++++------ src/main/java/com/epita/creeps/units/Unit.java | 2 +- 2 files changed, 11 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 2602718..ec0e24a 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -74,8 +74,7 @@ public class Program { Unit.getUnits().add(citizen1); Unit.getUnits().add(citizen2); - StatisticsResponse statistics = Basics.getStatistics(); - logger.debug(statistics.toString()); + @@ -99,9 +98,15 @@ public class Program { // timoutheou while (true) { + StatisticsResponse statistics = Basics.getStatistics(); + logger.debug(statistics.toString()); for (var player : statistics.players) { - if (player.name == login || !player.name.contains("brainkel")) { - continue; + + if (player.name != login && player.name.contains("brainkel")) { + citizen1.sendMessage(player.name, "Nicole"); + citizen1.sendMessage(player.name, "Ouvre"); + citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); + citizen2.fetchMessages(); } // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name,"Ouvre"); @@ -110,8 +115,7 @@ public class Program { // citizen1.sendMessage(player.name, "<3"); // citizen2.fetchMessages(); - citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); - citizen2.fetchMessages(); + } } diff --git a/src/main/java/com/epita/creeps/units/Unit.java b/src/main/java/com/epita/creeps/units/Unit.java index bed7f4e..d508fa4 100644 --- a/src/main/java/com/epita/creeps/units/Unit.java +++ b/src/main/java/com/epita/creeps/units/Unit.java @@ -87,7 +87,7 @@ public abstract class Unit { logger.warn("Invalid report received: null value"); return false; } - logger.debug("Got report: " + lastReport); +// logger.debug("Got report: " + lastReport); idle = true; return lastReport.errorCode != null; From dfd3e4b7fa670ddee3d178e326830ccb09556168 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 20:58:11 +0100 Subject: [PATCH 14/23] boewbfouwbfkwagfkwqfjavfksavfmjgvjgfvwahgvfhgwvahgfvhgewavfhgwavhgfvwahvfhgwa --- src/main/java/com/epita/creeps/Program.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index ec0e24a..ee0bea6 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -102,7 +102,7 @@ public class Program { logger.debug(statistics.toString()); for (var player : statistics.players) { - if (player.name != login && player.name.contains("brainkel")) { + if (player.name != login) { citizen1.sendMessage(player.name, "Nicole"); citizen1.sendMessage(player.name, "Ouvre"); citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); @@ -114,9 +114,16 @@ public class Program { // citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); // citizen1.sendMessage(player.name, "<3"); // citizen2.fetchMessages(); - - } + // Country road + citizen1.move(Direction.RIGHT); + citizen2.move(Direction.LEFT); + citizen1.build(Building.ROAD); + citizen2.build(Building.ROAD); + citizen1.move(Direction.UP); + citizen2.move(Direction.DOWN); + citizen1.build(Building.ROAD); + citizen2.build(Building.ROAD); } // Negotiator From 204f626f117dbdae7d7b99931d380fcf394a2ddf Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:01:22 +0100 Subject: [PATCH 15/23] foule --- src/main/java/com/epita/creeps/Program.java | 23 +++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index ee0bea6..c440619 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -102,9 +102,10 @@ public class Program { logger.debug(statistics.toString()); for (var player : statistics.players) { - if (player.name != login) { + if (!player.name.equals(login)) { + logger.debug("Spamming " + player.name); citizen1.sendMessage(player.name, "Nicole"); - citizen1.sendMessage(player.name, "Ouvre"); + citizen2.sendMessage(player.name, "Ouvre"); citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); citizen2.fetchMessages(); } @@ -116,14 +117,24 @@ public class Program { // citizen2.fetchMessages(); } // Country road +// citizen1.move(Direction.RIGHT); +// citizen2.move(Direction.LEFT); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); +// citizen1.move(Direction.UP); +// citizen2.move(Direction.DOWN); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); + + // Gather citizen1.move(Direction.RIGHT); citizen2.move(Direction.LEFT); - citizen1.build(Building.ROAD); - citizen2.build(Building.ROAD); + citizen1.gather(); + citizen2.gather(); citizen1.move(Direction.UP); citizen2.move(Direction.DOWN); - citizen1.build(Building.ROAD); - citizen2.build(Building.ROAD); + citizen1.gather(); + citizen2.gather(); } // Negotiator From 40ae3b048d45afd4a5625a1dd43de9551b1050eb Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:03:45 +0100 Subject: [PATCH 16/23] gazeur --- src/main/java/com/epita/creeps/Program.java | 24 ++++++++++----------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index c440619..9b546de 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -98,24 +98,24 @@ public class Program { // timoutheou while (true) { - StatisticsResponse statistics = Basics.getStatistics(); - logger.debug(statistics.toString()); - for (var player : statistics.players) { - - if (!player.name.equals(login)) { - logger.debug("Spamming " + player.name); - citizen1.sendMessage(player.name, "Nicole"); - citizen2.sendMessage(player.name, "Ouvre"); - citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); - citizen2.fetchMessages(); - } +// StatisticsResponse statistics = Basics.getStatistics(); +// logger.debug(statistics.toString()); +// for (var player : statistics.players) { +// +// if (!player.name.equals(login)) { +// logger.debug("Spamming " + player.name); +// citizen1.sendMessage(player.name, "Nicole"); +// citizen2.sendMessage(player.name, "Ouvre"); +// citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); +// citizen2.fetchMessages(); +// } // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name,"Ouvre"); // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); // citizen1.sendMessage(player.name, "<3"); // citizen2.fetchMessages(); - } + // Country road // citizen1.move(Direction.RIGHT); // citizen2.move(Direction.LEFT); From 9f9d8be802ee3f8a4f7ee8fc38faa1af1041319d Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:06:02 +0100 Subject: [PATCH 17/23] on va voir --- src/main/java/com/epita/creeps/Program.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 9b546de..ebd0eb8 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -126,15 +126,19 @@ public class Program { // citizen1.build(Building.ROAD); // citizen2.build(Building.ROAD); - // Gather + // Gather + country road citizen1.move(Direction.RIGHT); citizen2.move(Direction.LEFT); citizen1.gather(); citizen2.gather(); + citizen1.build(Building.ROAD); + citizen2.build(Building.ROAD); citizen1.move(Direction.UP); citizen2.move(Direction.DOWN); citizen1.gather(); citizen2.gather(); + citizen1.build(Building.ROAD); + citizen2.build(Building.ROAD); } // Negotiator From 86a7194ec5e09c4955beae52e3582333fe901186 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:15:03 +0100 Subject: [PATCH 18/23] petit vaut mieux pas tenter --- src/main/java/com/epita/creeps/Program.java | 27 +++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index ebd0eb8..b6696bf 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -98,17 +98,18 @@ public class Program { // timoutheou while (true) { -// StatisticsResponse statistics = Basics.getStatistics(); -// logger.debug(statistics.toString()); -// for (var player : statistics.players) { -// -// if (!player.name.equals(login)) { -// logger.debug("Spamming " + player.name); + StatisticsResponse statistics = Basics.getStatistics(); + logger.debug(statistics.toString()); + for (var player : statistics.players) { + + if (!player.name.equals(login) && (player.name.contains("battefort") || player.name.contains("brainkel"))) { + logger.debug("Spamming " + player.name); // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name, "Ouvre"); -// citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); -// citizen2.fetchMessages(); -// } + citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); + citizen2.fetchMessages(); + } + } // citizen1.sendMessage(player.name, "Nicole"); // citizen2.sendMessage(player.name,"Ouvre"); // citizen1.sendMessage(player.name, "Nicole"); @@ -131,14 +132,14 @@ public class Program { citizen2.move(Direction.LEFT); citizen1.gather(); citizen2.gather(); - citizen1.build(Building.ROAD); - citizen2.build(Building.ROAD); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); citizen1.move(Direction.UP); citizen2.move(Direction.DOWN); citizen1.gather(); citizen2.gather(); - citizen1.build(Building.ROAD); - citizen2.build(Building.ROAD); +// citizen1.build(Building.ROAD); +// citizen2.build(Building.ROAD); } // Negotiator From 47527f5b0b24d4b6b1b852d7f31b07af08f558e8 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:26:06 +0100 Subject: [PATCH 19/23] grosse bombe gross explosion --- src/main/java/com/epita/creeps/Program.java | 119 ++++++++------------ 1 file changed, 47 insertions(+), 72 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index b6696bf..e350bb9 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -96,62 +96,62 @@ public class Program { //// } // } - // timoutheou - while (true) { - StatisticsResponse statistics = Basics.getStatistics(); - logger.debug(statistics.toString()); - for (var player : statistics.players) { - - if (!player.name.equals(login) && (player.name.contains("battefort") || player.name.contains("brainkel"))) { - logger.debug("Spamming " + player.name); -// citizen1.sendMessage(player.name, "Nicole"); -// citizen2.sendMessage(player.name, "Ouvre"); - citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); - citizen2.fetchMessages(); - } - } -// citizen1.sendMessage(player.name, "Nicole"); -// citizen2.sendMessage(player.name,"Ouvre"); -// citizen1.sendMessage(player.name, "Nicole"); -// citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); -// citizen1.sendMessage(player.name, "<3"); -// citizen2.fetchMessages(); - - // Country road +// // timoutheou +// while (true) { +// StatisticsResponse statistics = Basics.getStatistics(); +// logger.debug(statistics.toString()); +// for (var player : statistics.players) { +// +// if (!player.name.equals(login) && (player.name.contains("battefort") || player.name.contains("brainkel") || player.name.contains("gilbert"))) { +// logger.debug("Spamming " + player.name); +//// citizen1.sendMessage(player.name, "Nicole"); +//// citizen2.sendMessage(player.name, "Ouvre"); +// citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); +// citizen2.fetchMessages(); +// } +// } +//// citizen1.sendMessage(player.name, "Nicole"); +//// citizen2.sendMessage(player.name,"Ouvre"); +//// citizen1.sendMessage(player.name, "Nicole"); +//// citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); +//// citizen1.sendMessage(player.name, "<3"); +//// citizen2.fetchMessages(); +// +// // Country road +//// citizen1.move(Direction.RIGHT); +//// citizen2.move(Direction.LEFT); +//// citizen1.build(Building.ROAD); +//// citizen2.build(Building.ROAD); +//// citizen1.move(Direction.UP); +//// citizen2.move(Direction.DOWN); +//// citizen1.build(Building.ROAD); +//// citizen2.build(Building.ROAD); +// +// // Gather + country road // citizen1.move(Direction.RIGHT); // citizen2.move(Direction.LEFT); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); +// citizen1.gather(); +// citizen2.gather(); +//// citizen1.build(Building.ROAD); +//// citizen2.build(Building.ROAD); // citizen1.move(Direction.UP); // citizen2.move(Direction.DOWN); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); - - // Gather + country road - citizen1.move(Direction.RIGHT); - citizen2.move(Direction.LEFT); - citizen1.gather(); - citizen2.gather(); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); - citizen1.move(Direction.UP); - citizen2.move(Direction.DOWN); - citizen1.gather(); - citizen2.gather(); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); - } +// citizen1.gather(); +// citizen2.gather(); +//// citizen1.build(Building.ROAD); +//// citizen2.build(Building.ROAD); +// } // Negotiator // citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); // Kaboom & epic fail -// citizen1.spawn("bomber-bot").waitFinished(); -// List bomberos = BomberBot.getBomberBotUnits(); -// BomberBot bomberau = (BomberBot) bomberos.getFirst(); -// -//// bomberau.upgrade(); -// bomberau.fire(); + citizen1.spawn("bomber-bot").waitFinished(); + List bomberos = BomberBot.getBomberBotUnits(); + BomberBot bomberau = (BomberBot) bomberos.getFirst(); + +// bomberau.upgrade(); + bomberau.fire(); // ======================================================= // Stormtrooper @@ -196,30 +196,5 @@ public class Program { // logger.info("Done"); } -// ### Get statistics -//GET http://localhost:1664/statistics -// -//### Get status -//GET http://localhost:1664/status -// -//### Get report -//GET http://localhost:1664/report/148997e9b -// -//### Login with user login_l -//POST http://localhost:1664/init/login_l -// -//> {% -//client.global.set("baseId", response.body.baseId); -//client.global.set("probeId", response.body.probeId); -//client.global.set("login", response.body.login); -//%} -// -//### Post noop commande -//POST http://localhost:1664/command/{{login}}/{{probeId}}/noop -// -//### -//POST http://localhost:1664/command/dumeig_a/8d87eea10/inspect -// -//### } From bc238b05dcbe0fa78d3bb3c1e7dc2805c0f854cd Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:34:33 +0100 Subject: [PATCH 20/23] 1984 en bombe --- src/main/java/com/epita/creeps/Program.java | 26 ++++++++++++++++----- 1 file changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index e350bb9..508aa98 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -76,8 +76,22 @@ public class Program { +// 1984 + citizen1.move(Direction.UP); + citizen2.move(Direction.DOWN); + citizen1.move(Direction.UP); + citizen1.move(Direction.UP); + citizen1.spawn("bomber-bot").waitFinished(); + List bomberos = BomberBot.getBomberBotUnits(); + BomberBot bomberau = (BomberBot) bomberos.getFirst(); +// bomberau.upgrade(); + bomberau.fire(); + while (true) { + citizen2.move(Direction.RIGHT); + citizen2.build(Building.ROAD); + } // Gossip // for (int i = 0; i < 60; i++) { @@ -146,12 +160,12 @@ public class Program { // citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); // Kaboom & epic fail - citizen1.spawn("bomber-bot").waitFinished(); - List bomberos = BomberBot.getBomberBotUnits(); - BomberBot bomberau = (BomberBot) bomberos.getFirst(); - -// bomberau.upgrade(); - bomberau.fire(); +// citizen1.spawn("bomber-bot").waitFinished(); +// List bomberos = BomberBot.getBomberBotUnits(); +// BomberBot bomberau = (BomberBot) bomberos.getFirst(); +// +//// bomberau.upgrade(); +// bomberau.fire(); // ======================================================= // Stormtrooper From 000b23c9f4e2a740c53cb84cd50a19fc631e5331 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:39:00 +0100 Subject: [PATCH 21/23] bah on reessaye --- src/main/java/com/epita/creeps/Program.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 508aa98..a5abe10 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -89,8 +89,18 @@ public class Program { bomberau.fire(); while (true) { - citizen2.move(Direction.RIGHT); - citizen2.build(Building.ROAD); + StatisticsResponse statistics = Basics.getStatistics(); + logger.debug(statistics.toString()); + for (var player : statistics.players) { + + if (!player.name.equals(login) && (player.name.contains("battefort") || player.name.contains("brainkel") || player.name.contains("gilbert"))) { + logger.debug("Spamming " + player.name); +// citizen1.sendMessage(player.name, "Nicole"); +// citizen2.sendMessage(player.name, "Ouvre"); + citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); + citizen2.fetchMessages(); + } + } } // Gossip From 0ce900886fd44ec3a2ae14a1bb638200a695f496 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:40:35 +0100 Subject: [PATCH 22/23] bah on reessaye --- src/main/java/com/epita/creeps/Program.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index a5abe10..7104e9d 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -85,7 +85,7 @@ public class Program { List bomberos = BomberBot.getBomberBotUnits(); BomberBot bomberau = (BomberBot) bomberos.getFirst(); -// bomberau.upgrade(); + bomberau.upgrade(); bomberau.fire(); while (true) { From 89fe594e3b1a08f9b52f3cb86183307a35b21a91 Mon Sep 17 00:00:00 2001 From: Guillem George Date: Sat, 7 Feb 2026 21:44:49 +0100 Subject: [PATCH 23/23] =?UTF-8?q?m=C3=A9nage?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/epita/creeps/Program.java | 145 +------------------- 1 file changed, 2 insertions(+), 143 deletions(-) diff --git a/src/main/java/com/epita/creeps/Program.java b/src/main/java/com/epita/creeps/Program.java index 7104e9d..1a881ef 100644 --- a/src/main/java/com/epita/creeps/Program.java +++ b/src/main/java/com/epita/creeps/Program.java @@ -61,7 +61,6 @@ public class Program { logger.error("Cannot connect to the server. Aborting..."); throw e; } -// AsyncExec.justWait(0); // Create account and get init infos logger.info("Creating account"); @@ -74,150 +73,10 @@ public class Program { Unit.getUnits().add(citizen1); Unit.getUnits().add(citizen2); + // Et voilà, machtou pichtou -// 1984 - citizen1.move(Direction.UP); - citizen2.move(Direction.DOWN); - citizen1.move(Direction.UP); - citizen1.move(Direction.UP); - citizen1.spawn("bomber-bot").waitFinished(); - List bomberos = BomberBot.getBomberBotUnits(); - BomberBot bomberau = (BomberBot) bomberos.getFirst(); - - bomberau.upgrade(); - bomberau.fire(); - - while (true) { - StatisticsResponse statistics = Basics.getStatistics(); - logger.debug(statistics.toString()); - for (var player : statistics.players) { - - if (!player.name.equals(login) && (player.name.contains("battefort") || player.name.contains("brainkel") || player.name.contains("gilbert"))) { - logger.debug("Spamming " + player.name); -// citizen1.sendMessage(player.name, "Nicole"); -// citizen2.sendMessage(player.name, "Ouvre"); - citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); - citizen2.fetchMessages(); - } - } - } - - // Gossip -// for (int i = 0; i < 60; i++) { -//// for (var player : statistics.players) { -// StatisticsResponse statistics = Basics.getStatistics(); -// -// var player = statistics.players.getFirst(); -// if (player.name == login) { -// i--; -// continue; -// } -// citizen1.sendMessage(player.name, "Nicole"); -// citizen2.sendMessage(player.name,"Ouvre"); -// citizen1.sendMessage(player.name, "Nicole"); -// citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); -//// } -// } - -// // timoutheou -// while (true) { -// StatisticsResponse statistics = Basics.getStatistics(); -// logger.debug(statistics.toString()); -// for (var player : statistics.players) { -// -// if (!player.name.equals(login) && (player.name.contains("battefort") || player.name.contains("brainkel") || player.name.contains("gilbert"))) { -// logger.debug("Spamming " + player.name); -//// citizen1.sendMessage(player.name, "Nicole"); -//// citizen2.sendMessage(player.name, "Ouvre"); -// citizen1.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); -// citizen2.fetchMessages(); -// } -// } -//// citizen1.sendMessage(player.name, "Nicole"); -//// citizen2.sendMessage(player.name,"Ouvre"); -//// citizen1.sendMessage(player.name, "Nicole"); -//// citizen2.sendMessage(player.name, "MAIS MOI JE VEUX FAIRE L'AMOUUUUR"); -//// citizen1.sendMessage(player.name, "<3"); -//// citizen2.fetchMessages(); -// -// // Country road -//// citizen1.move(Direction.RIGHT); -//// citizen2.move(Direction.LEFT); -//// citizen1.build(Building.ROAD); -//// citizen2.build(Building.ROAD); -//// citizen1.move(Direction.UP); -//// citizen2.move(Direction.DOWN); -//// citizen1.build(Building.ROAD); -//// citizen2.build(Building.ROAD); -// -// // Gather + country road -// citizen1.move(Direction.RIGHT); -// citizen2.move(Direction.LEFT); -// citizen1.gather(); -// citizen2.gather(); -//// citizen1.build(Building.ROAD); -//// citizen2.build(Building.ROAD); -// citizen1.move(Direction.UP); -// citizen2.move(Direction.DOWN); -// citizen1.gather(); -// citizen2.gather(); -//// citizen1.build(Building.ROAD); -//// citizen2.build(Building.ROAD); -// } - - // Negotiator -// citizen2.sendMessage("Hector", "Nique ta mère Hector").waitFinished(); - - // Kaboom & epic fail -// citizen1.spawn("bomber-bot").waitFinished(); -// List bomberos = BomberBot.getBomberBotUnits(); -// BomberBot bomberau = (BomberBot) bomberos.getFirst(); -// -//// bomberau.upgrade(); -// bomberau.fire(); - - // ======================================================= - // Stormtrooper -// citizen1.spawn("turret").waitFinished(); -// List tourelles = Turret.getTurretUnits(); -// Turret unerelle = (Turret) tourelles.getFirst(); -// for (int i = 0; i < 101; i++) { -// unerelle.fire(unerelle.getPosition().plus(new Point(0, 1))); -// } - - // Gather resources -// while (true) { -// citizen1.move(Direction.RIGHT); -// citizen2.move(Direction.LEFT); -// citizen1.gather(); -// citizen2.gather(); -// citizen1.move(Direction.UP); -// citizen2.move(Direction.DOWN); -// citizen1.gather(); -// citizen2.gather(); -// } - - // Country roads -// while (true) { -// citizen1.move(Direction.RIGHT); -// citizen2.move(Direction.LEFT); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); -// citizen1.move(Direction.UP); -// citizen2.move(Direction.DOWN); -// citizen1.build(Building.ROAD); -// citizen2.build(Building.ROAD); -// } - - - - - - - - -// logger.info("Done"); + logger.info("Done"); }