m1.chocobarlite/src/ChocoBarLite.java
2009-05-01 08:07:06 +00:00

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();
}
}
}
}