Skip to content

Commit

Permalink
Add brutaltester settings for vindinium Ref. (And comment out the Sys…
Browse files Browse the repository at this point in the history
…tem.err.print in Referee)
  • Loading branch information
me committed Aug 28, 2018
1 parent b10c9fd commit 9fc460f
Show file tree
Hide file tree
Showing 4 changed files with 192 additions and 3 deletions.
59 changes: 58 additions & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<version>1.0-SNAPSHOT</version>

<properties>
<gamengine.version>2.7</gamengine.version>
<gamengine.version>2.8</gamengine.version>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
Expand All @@ -30,5 +30,62 @@
<artifactId>runner</artifactId>
<version>${gamengine.version}</version>
</dependency>

<dependency>
<groupId>commons-cli</groupId>
<artifactId>commons-cli</artifactId>
<version>1.3.1</version>
</dependency>
</dependencies>
<build>
<plugins>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.3</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<mainClass>com.codingame.gameengine.runner.CommandLineInterface</mainClass>
</manifest>
</archive>
</configuration>
</plugin>

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.4.2</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>com.codingame.gameengine.runner.CommandLineInterface</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>

</plugins>
</build>
</project>
4 changes: 2 additions & 2 deletions src/main/java/com/codingame/game/Referee.java
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,11 @@ public void init() {
gameManager.setFrameDuration(250);

Properties params = gameManager.getGameParameters();
System.err.println("seed: " + getSeed(params));
//System.err.println("seed: " + getSeed(params));
Config.random = new Random(getSeed(params));

board = Config.generateMap(gameManager.getPlayers());
System.err.print(board.print());
//System.err.print(board.print());

board.initMines();
initGridView();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
package com.codingame.gameengine.runner;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.nio.file.Paths;
import java.util.List;
import java.util.Properties;

import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.HelpFormatter;
import org.apache.commons.cli.Options;

import com.codingame.gameengine.runner.dto.GameResult;
import com.google.common.io.Files;

public class CommandLineInterface {

public static void main(String[] args) {
try {
Options options = new Options();

options.addOption("h", false, "Print the help").addOption("p1", true, "Required. Player 1 command line.")
.addOption("p2", true, "Required. Player 2 command line.")
.addOption("p3", true, "Player 3 command line.").addOption("p4", true, "Player 4 command line.")
.addOption("s", false, "Server mode").addOption("l", true, "File output for logs")
.addOption("d", true, "Referee initial data");

CommandLine cmd = new DefaultParser().parse(options, args);

if (cmd.hasOption("h") || !cmd.hasOption("p1") || !cmd.hasOption("p2") || !cmd.hasOption("p3") || !cmd.hasOption("p4")) {
new HelpFormatter().printHelp(
"-p1 <player1 command line> -p2 <player2 command line> -p3 <player3 command line> -p4 <player4 command line> [-s -l <File output for logs>]",
options);
System.exit(0);
}

MultiplayerGameRunner runner = new MultiplayerGameRunner();

Field getGameResult = GameRunner.class.getDeclaredField("gameResult");
getGameResult.setAccessible(true);
GameResult result = (GameResult) getGameResult.get(runner);

if (cmd.hasOption("d")) {
String data = cmd.getOptionValue("d");
Properties prop = new Properties();
for (String entry : data.split(";")) {
String[] values = entry.split("=");
prop.setProperty(values[0], values[1]);
}
runner.setGameParameters(prop);
// result.refereeInput = cmd.getOptionValue("d");
}

int playerCount = 0;

for (int i = 1; i <= 4; ++i) {
if (cmd.hasOption("p" + i)) {
runner.addAgent(cmd.getOptionValue("p" + i));
playerCount += 1;
}
}

if (cmd.hasOption("s")) {
runner.start();
} else {
Method initialize = GameRunner.class.getDeclaredMethod("initialize", Properties.class);
initialize.setAccessible(true);
initialize.invoke(runner, new Properties());

Method runAgents = GameRunner.class.getDeclaredMethod("runAgents");
runAgents.setAccessible(true);
runAgents.invoke(runner);

if (cmd.hasOption("l")) {
Method getJSONResult = GameRunner.class.getDeclaredMethod("getJSONResult");
getJSONResult.setAccessible(true);

Files.asCharSink(Paths.get(cmd.getOptionValue("l")).toFile(), Charset.defaultCharset())
.write((String) getJSONResult.invoke(runner));
}

for (int i = 0; i < playerCount; ++i) {
System.out.println(result.scores.get(i));
}

for (String line : result.uinput) {
System.out.println(line);
}
}

// We have to clean players process properly
Field getPlayers = GameRunner.class.getDeclaredField("players");
getPlayers.setAccessible(true);
@SuppressWarnings("unchecked")
List<Agent> players = (List<Agent>) getPlayers.get(runner);

if (players != null) {
for (Agent player : players) {
Field getProcess = CommandLinePlayerAgent.class.getDeclaredField("process");
getProcess.setAccessible(true);
Process process = (Process) getProcess.get(player);

process.destroy();
}
}
} catch (Exception e) {
System.err.println(e);
e.printStackTrace(System.err);
System.exit(1);
}
}

}
17 changes: 17 additions & 0 deletions src/main/resources/log4j2.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<Configuration package="log4j.test"
status="WARN">
<Appenders>
<Console name="Console" target="SYSTEM_OUT">
<PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/>
</Console>
</Appenders>
<Loggers>
<Logger name="log4j.test.Log4jTest" level="trace">
<AppenderRef ref="Console"/>
</Logger>
<Root level="error">
<AppenderRef ref="Console"/>
</Root>
</Loggers>
</Configuration>

0 comments on commit 9fc460f

Please sign in to comment.