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