242 lines
7.7 KiB
Java
242 lines
7.7 KiB
Java
import java.io.*;
|
|
import java.text.*; // streamtokenizer
|
|
|
|
import java.lang.ClassNotFoundException;
|
|
import java.lang.InstantiationException;
|
|
import java.lang.IllegalAccessException;
|
|
|
|
import chocobar.GenericChocoGraph;
|
|
import graph.GenericGraph;
|
|
import conf.ChocoConfig;
|
|
import jeu.Strategy;
|
|
import jeu.Simulation;
|
|
|
|
/* command line parsing */
|
|
import com.martiansoftware.jsap.*;
|
|
import com.martiansoftware.jsap.stringparsers.*;
|
|
|
|
|
|
public final class ChocoBarLite
|
|
{
|
|
/**
|
|
* Fonction de test de représentation de graphe
|
|
**/
|
|
public static void main(String[] args) throws Exception {
|
|
|
|
JSAP jsap = new JSAP();
|
|
|
|
FlaggedOption opt;
|
|
Switch sw;
|
|
|
|
sw = new Switch("graphgen") // true = génération du graphe à partir de la taill vérif
|
|
.setShortFlag('g') // false = on prend le graphe du fichier en entrée
|
|
.setLongFlag("graph");
|
|
sw.setHelp("Générer le graphe sans fichier d'entrée.");
|
|
jsap.registerParameter(sw);
|
|
|
|
sw = new Switch("strategy") // true = on gere la stratégie
|
|
.setShortFlag('s') // false = on ne gère pas la stratégie
|
|
.setLongFlag("strategy");
|
|
sw.setHelp("Génération des stratégies. (il faut obligatoirement activer la génération de graphe avec ou sans fichiers)");
|
|
jsap.registerParameter(sw);
|
|
|
|
sw = new Switch("simulate") // true = on gere la simulation
|
|
.setShortFlag('m') // false = on ne gère pas la stratégie
|
|
.setLongFlag("simulate");
|
|
sw.setHelp("Gestion de la partie simulation. (implique -s)");
|
|
jsap.registerParameter(sw);
|
|
|
|
sw = new Switch("verbose") // true = mode verbeux
|
|
.setShortFlag('v') // false = normal
|
|
.setLongFlag("verbose");
|
|
sw.setHelp("Mode verbeux");
|
|
jsap.registerParameter(sw);
|
|
|
|
opt= new FlaggedOption("cbmodel") // type de graphe
|
|
.setStringParser(new StringStringParser())
|
|
.setDefault("bpl.ChocoBar")
|
|
.setRequired(false)
|
|
.setLongFlag("cbmodel");
|
|
opt.setHelp("Modèle de ChocoBar bpl.ChocoBar, combi.ChocoBarLong, combi.ChocoBarBigInt, combi.ChocoBarArray. (défaut: bpl.ChocoBar)");
|
|
jsap.registerParameter(opt);
|
|
|
|
opt= new FlaggedOption("cbstyle") // type de graphe
|
|
.setStringParser(new StringStringParser())
|
|
.setDefault("bpl")
|
|
.setRequired(false)
|
|
.setLongFlag("cbstyle");
|
|
opt.setHelp("Style de ChocoBar : bpl, combi. (défaut: combi)");
|
|
jsap.registerParameter(opt);
|
|
|
|
opt= new FlaggedOption("edgemodel") // type de graphe
|
|
.setStringParser(new StringStringParser())
|
|
.setDefault("EdgeBigIntModel")
|
|
.setRequired(false)
|
|
.setLongFlag("edgemodel");
|
|
opt.setHelp("Modèle d'Arc (edge) : EdgeBigIntModel, EdgeBitSetModel, EdgeListModel, EdgeMatrixModel.");
|
|
jsap.registerParameter(opt);
|
|
|
|
|
|
opt = new FlaggedOption("width") // largeur du chocobar
|
|
.setStringParser(new IntegerStringParser())
|
|
.setDefault("6")
|
|
.setRequired(false)
|
|
.setShortFlag('w')
|
|
.setLongFlag("width");
|
|
opt.setHelp("Largeur de la ChocoBar. (défaut 6)");
|
|
jsap.registerParameter(opt);
|
|
|
|
opt = new FlaggedOption("height") // hauteur du chocobar
|
|
.setStringParser(new IntegerStringParser())
|
|
.setDefault("6")
|
|
.setRequired(false)
|
|
.setShortFlag('h')
|
|
.setLongFlag("height");
|
|
opt.setHelp("Hauteur de la ChocoBar. (défaut 6)");
|
|
jsap.registerParameter(opt);
|
|
|
|
opt= new FlaggedOption("ginput") // fichier de graphe en entrée
|
|
.setStringParser(new StringStringParser())
|
|
.setDefault("")
|
|
.setRequired(false)
|
|
.setShortFlag('G')
|
|
.setLongFlag("gpinput");
|
|
opt.setHelp("Fichier de graphe en entrée.");
|
|
jsap.registerParameter(opt);
|
|
|
|
|
|
opt= new FlaggedOption("strategyA") // fichier de graphe en entrée
|
|
.setStringParser(new StringStringParser())
|
|
.setDefault("")
|
|
.setRequired(false)
|
|
.setShortFlag('A')
|
|
.setLongFlag("strategyA");
|
|
opt.setHelp("Fichier de stratégie pour le joueur A. (Elle sera générée au besoin sinon)");
|
|
jsap.registerParameter(opt);
|
|
|
|
opt= new FlaggedOption("strategyB") // fichier de graphe en entrée
|
|
.setStringParser(new StringStringParser())
|
|
.setDefault("")
|
|
.setRequired(false)
|
|
.setShortFlag('B')
|
|
.setLongFlag("strategyB");
|
|
opt.setHelp("Fichier de stratégie pour le joueur B. (Elle sera générée au besoin sinon)");
|
|
jsap.registerParameter(opt);
|
|
|
|
sw = new Switch("random") // La stratégie est aléatoire
|
|
.setShortFlag('r')
|
|
.setLongFlag("random");
|
|
sw.setHelp("En cas de génération, le joueur A aura une statégie aléatoire. (Par défault elle est gagnante");
|
|
jsap.registerParameter(sw);
|
|
|
|
JSAPResult config = jsap.parse(args);
|
|
if (!config.success()) {
|
|
System.err.println();
|
|
for (java.util.Iterator errs = config.getErrorMessageIterator();
|
|
errs.hasNext();) {
|
|
System.err.println("Error: " + errs.next());
|
|
}
|
|
System.err.print("Usage: ChocoBarLite ");
|
|
System.err.println(jsap.getUsage());
|
|
System.err.println();
|
|
// show full help as well
|
|
System.err.println(jsap.getHelp());
|
|
System.err.println();
|
|
System.exit(1);
|
|
} else {
|
|
/* la ligne de commande est valide, on initialise donc les valeurs */
|
|
ChocoConfig.size = config.getInt("width");
|
|
ChocoConfig.height = config.getInt("height");
|
|
ChocoConfig.chocoBarModel = config.getString("cbmodel");
|
|
ChocoConfig.chocoBarStyle = config.getString("cbstyle");
|
|
ChocoConfig.edgeModel = config.getString("edgemodel");
|
|
|
|
GenericChocoGraph c=null;
|
|
try {
|
|
// Recherche du bon ChocoGraph
|
|
Class cCG = Class.forName("chocobar."+ChocoConfig.chocoBarStyle+".ChocoGraph");
|
|
c = (GenericChocoGraph) cCG.newInstance();
|
|
} catch (Exception e){
|
|
System.err.println("ERREUR: Le modèle de graphe '"+ChocoConfig.chocoBarStyle+"' est inconnu.");
|
|
e.printStackTrace();
|
|
System.exit(1);
|
|
}
|
|
try {
|
|
GenericGraph g=null;
|
|
if (config.getBoolean("graphgen")){
|
|
g = c.genChoco(true);
|
|
} else {
|
|
if (!config.getString("ginput").equals("")){ // on vérifie si la chaine n'est pas vide...
|
|
// On instancie le bon Graph
|
|
Class cCG = Class.forName("chocobar."+ChocoConfig.chocoBarStyle+".Graph");
|
|
g = (GenericGraph) cCG.newInstance();
|
|
g.loadFromFile(config.getString("ginput"));
|
|
}
|
|
}
|
|
if (g!=null){
|
|
System.out.println("Fin de calcul du graphe");
|
|
System.out.println(g.toDot());
|
|
|
|
Strategy a=null;
|
|
Strategy b=null;
|
|
if (config.getBoolean("strategy") || config.getBoolean("simulate")) {
|
|
// On a demandé à gérer la partie stratégie
|
|
|
|
// Création de la stratégie de A
|
|
a = new Strategy();
|
|
|
|
// A a-t-il une stratégie définie ?
|
|
if ( config.getString("strategyA").equals("") ) {
|
|
// Non. La stratégie de A est-elle aléatoire ?
|
|
if (config.getBoolean("random")) {
|
|
a.constructRandomStrategy(g);
|
|
} else {
|
|
a.constructWinningStrategy(g);
|
|
}
|
|
} else {
|
|
// Oui, on lit donc la stratégie du fichier
|
|
a.constructFromFile(config.getString("strategyA"));
|
|
}
|
|
|
|
// Création de la stratégie de B
|
|
b = new Strategy();
|
|
|
|
// B a-t-il une stratégie définie ?
|
|
if ( config.getString("strategyB").equals("") ) {
|
|
// B a forcément une statégie aléatoire
|
|
b.constructRandomStrategy(g);
|
|
} else {
|
|
// Oui, on lit donc la stratégie du fichier
|
|
b.constructFromFile(config.getString("strategyB"));
|
|
}
|
|
|
|
// On affiche la stratégie de A
|
|
a.display();
|
|
}
|
|
|
|
if (config.getBoolean("simulate")) {
|
|
// On a demandé à gérer la partie simulate
|
|
// A et B ont déjà une stratégie (-m implique -s)
|
|
Simulation.simulate(a, b, g);
|
|
}
|
|
} else {
|
|
System.err.println("ERREUR: Aucun graphe généré. Impossible d'aller plus loin");
|
|
System.err.println();
|
|
System.err.print("Usage: ChocoBarLite ");
|
|
System.err.println(jsap.getUsage());
|
|
System.err.println();
|
|
// show full help as well
|
|
System.err.println(jsap.getHelp());
|
|
System.err.println();
|
|
System.exit(1);
|
|
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
}
|