mirror of
https://github.com/Card-Forge/forge.git
synced 2025-11-18 03:38:01 +00:00
- Adding some more flags to SimulateMatch
This commit is contained in:
@@ -13,6 +13,7 @@ import forge.game.Game;
|
|||||||
import forge.game.GameLogEntry;
|
import forge.game.GameLogEntry;
|
||||||
import forge.game.GameRules;
|
import forge.game.GameRules;
|
||||||
import forge.game.GameType;
|
import forge.game.GameType;
|
||||||
|
import forge.game.GameLogEntryType;
|
||||||
import forge.game.Match;
|
import forge.game.Match;
|
||||||
import forge.game.player.RegisteredPlayer;
|
import forge.game.player.RegisteredPlayer;
|
||||||
import forge.model.FModel;
|
import forge.model.FModel;
|
||||||
@@ -55,14 +56,20 @@ public class SimulateMatch {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//final Map<String, List<String>> params = new HashMap<>();
|
|
||||||
|
|
||||||
int nGames = 1;
|
int nGames = 1;
|
||||||
if (params.containsKey("n")) {
|
if (params.containsKey("n")) {
|
||||||
// Number of games should only be a single string
|
// Number of games should only be a single string
|
||||||
nGames = Integer.parseInt(params.get("n").get(0));
|
nGames = Integer.parseInt(params.get("n").get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int matchSize = 0;
|
||||||
|
if (params.containsKey("m")) {
|
||||||
|
// Match size ("best of X games")
|
||||||
|
matchSize = Integer.parseInt(params.get("m").get(0));
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean outputGamelog = !params.containsKey("q");
|
||||||
|
|
||||||
GameType type = GameType.Constructed;
|
GameType type = GameType.Constructed;
|
||||||
if (params.containsKey("f")) {
|
if (params.containsKey("f")) {
|
||||||
type = GameType.valueOf(WordUtils.capitalize(params.get("f").get(0)));
|
type = GameType.valueOf(WordUtils.capitalize(params.get("f").get(0)));
|
||||||
@@ -102,28 +109,45 @@ public class SimulateMatch {
|
|||||||
GameRules rules = new GameRules(type);
|
GameRules rules = new GameRules(type);
|
||||||
rules.setAppliedVariants(EnumSet.of(type));
|
rules.setAppliedVariants(EnumSet.of(type));
|
||||||
|
|
||||||
Match mc = new Match(rules, pp, "Test");
|
if (matchSize != 0) {
|
||||||
for (int iGame = 0; iGame < nGames; iGame++) {
|
rules.setGamesPerMatch(matchSize);
|
||||||
simulateSingleMatch(mc, iGame);
|
|
||||||
}
|
}
|
||||||
|
Match mc = new Match(rules, pp, "Test");
|
||||||
|
|
||||||
|
if (matchSize != 0) {
|
||||||
|
int iGame = 0;
|
||||||
|
while(!mc.isMatchOver()) {
|
||||||
|
// play games until the match ends
|
||||||
|
simulateSingleMatch(mc, iGame, outputGamelog);
|
||||||
|
iGame++;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (int iGame = 0; iGame < nGames; iGame++) {
|
||||||
|
simulateSingleMatch(mc, iGame, outputGamelog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
System.out.flush();
|
System.out.flush();
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void argumentHelp() {
|
private static void argumentHelp() {
|
||||||
System.out.println("Syntax: forge.exe sim -d <deck1[.dck]> ... <deckX[.dck]> -n [N] -f [F]");
|
System.out.println("Syntax: forge.exe sim -d <deck1[.dck]> ... <deckX[.dck]> -n [N] -m [M] -f [F] -q");
|
||||||
System.out.println("\tsim - stands for simulation mode");
|
System.out.println("\tsim - stands for simulation mode");
|
||||||
System.out.println("\tdeck1 (or deck2,...,X) - constructed deck name or filename (has to be quoted when contains multiple words)");
|
System.out.println("\tdeck1 (or deck2,...,X) - constructed deck name or filename (has to be quoted when contains multiple words)");
|
||||||
System.out.println("\tdeck is treated as file if it ends with a dot followed by three numbers or letters");
|
System.out.println("\tdeck is treated as file if it ends with a dot followed by three numbers or letters");
|
||||||
System.out.println("\tN - number of games, defaults to 1");
|
System.out.println("\tN - number of games, defaults to 1 (Ignores match setting)");
|
||||||
|
System.out.println("\tM - Play full match of X games, typically 1,3,5 games. (Optional, overrides N)");
|
||||||
System.out.println("\tF - format of games, defaults to constructed");
|
System.out.println("\tF - format of games, defaults to constructed");
|
||||||
|
System.out.println("\tq - Quiet flag. Output just the game result, not the entire game log.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* TODO: Write javadoc for this method.
|
* TODO: Write javadoc for this method.
|
||||||
* @param mc
|
* @param mc
|
||||||
* @param iGame
|
* @param iGame
|
||||||
|
* @param outputGamelog
|
||||||
*/
|
*/
|
||||||
private static void simulateSingleMatch(Match mc, int iGame) {
|
private static void simulateSingleMatch(Match mc, int iGame, boolean outputGamelog) {
|
||||||
StopWatch sw = new StopWatch();
|
StopWatch sw = new StopWatch();
|
||||||
sw.start();
|
sw.start();
|
||||||
|
|
||||||
@@ -132,11 +156,16 @@ public class SimulateMatch {
|
|||||||
mc.startGame(g1);
|
mc.startGame(g1);
|
||||||
sw.stop();
|
sw.stop();
|
||||||
|
|
||||||
List<GameLogEntry> log = g1.getGameLog().getLogEntries(null);
|
List<GameLogEntry> log;
|
||||||
|
if (outputGamelog) {
|
||||||
|
log = g1.getGameLog().getLogEntries(null);
|
||||||
|
} else {
|
||||||
|
log = g1.getGameLog().getLogEntries(GameLogEntryType.MATCH_RESULTS);
|
||||||
|
}
|
||||||
Collections.reverse(log);
|
Collections.reverse(log);
|
||||||
|
for(GameLogEntry l : log) {
|
||||||
for(GameLogEntry l : log)
|
|
||||||
System.out.println(l);
|
System.out.println(l);
|
||||||
|
}
|
||||||
|
|
||||||
System.out.println(String.format("\nGame %d ended in %d ms. %s has won!\n", 1+iGame, sw.getTime(), g1.getOutcome().getWinningLobbyPlayer().getName()));
|
System.out.println(String.format("\nGame %d ended in %d ms. %s has won!\n", 1+iGame, sw.getTime(), g1.getOutcome().getWinningLobbyPlayer().getName()));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user