AppConquest.java

package fr.umontpellier.iut.conquest;

import fr.umontpellier.iut.conquest.strategies.Human;
import fr.umontpellier.iut.conquest.strategies.MinMax;
import fr.umontpellier.iut.conquest.strategies.Naive;
import fr.umontpellier.iut.conquest.strategies.Strategy;

import java.util.Scanner;

public class AppConquest {
    public static void main(String[] args) {
        // Saisie à partir de la console
        Game.initInput(System.in);
        Scanner scan = Game.getScan();

        // Choix du mode de jeu : PvP, PvE, EvE
        int mode = chooseMode(scan);

        // Définit les joueurs (noms et stratégies).
        String[] names = new String[2];
        Strategy[] strategies = new Strategy[2];

        if (mode == 0) {
            pvp(names, strategies, scan);
        }

        if (mode == 1) {
            pve(names, strategies, scan);
        }

        if (mode == 2) {
            eve(names, strategies, scan);
        }

        // Choix du mode hardcore.
        int hardcore = chooseHardcore(scan);

        // Choix de la taille du plateau.
        int size = chooseBoardSize(scan);

        // Création de la partie.
        Game game = new Game(size, strategies[0], names[0], strategies[1], names[1]);

        // Lancement de la partie.
        game.run(hardcore);
    }

    /**
     * Choisit le mode de jeu : PvP, PvE ou EvE.
     */
    private static int chooseMode(Scanner scan) {
        System.out.println("PvP (0) ou PvE (1) ? ou Battle of the Artificial Intelligence (2) ?");
        int mode = scan.nextInt();
        scan.nextLine();
        return mode;
    }

    /**
     * Définit les noms et les stratégies pour le mode PvP.
     */
    private static void pvp(String[] names, Strategy[] strategies, Scanner scan) {
        strategies[0] = new Human(scan);
        strategies[1] = new Human(scan);

        System.out.println("Joueur 1, entrez votre nom :");
        names[0] = scan.nextLine();
        System.out.println("Joueur 2, entrez votre nom :");
        names[1] = scan.nextLine();
    }

    /**
     * Définit les noms et les stratégies pour le mode PvE.
     */
    private static void pve(String[] names, Strategy[] strategies, Scanner scan) {
        System.out.println("Voulez-vous jouez en premier (1) ou en deuxième (2) ?");
        int human = scan.nextInt() - 1;
        scan.nextLine();

        System.out.println("Choisissez le niveau de l'intelligence artificielle (entre 0 et 4 où 0 = Naive et 4 = Imbattable) :");
        int AILevel = scan.nextInt();
        scan.nextLine();

        strategies[human] = new Human(scan);
        strategies[1 - human] = defineStrategies(AILevel);

        System.out.println("Entrez votre nom :");
        names[human] = scan.nextLine();
        names[1 - human] = "Bonaparte";
    }

    /**
     * Définit les noms et les stratégies pour le mode EvE.
     */
    private static void eve(String[] names, Strategy[] strategies, Scanner scan) {
        System.out.println("Choisissez le niveau de la première intelligence artificielle (entre 0 et 4 où 0 = Naive et 4 = Imbattable) :");
        int firstAILevel = scan.nextInt();
        scan.nextLine();
        System.out.println("Choisissez le niveau de la deuxième intelligence artificielle (entre 0 et 4 où 0 = Naive et 4 = Imbattable) :");
        int secondAILevel = scan.nextInt();
        scan.nextLine();

        strategies[0] = defineStrategies(firstAILevel);
        strategies[1] = defineStrategies(secondAILevel);

        names[0] = "Waterloo";
        names[1] = "Bonaparte";
    }

    /**
     * Retourne la stratégie correspondant au niveau de l'IA.
     */
    private static Strategy defineStrategies(int AILevel) {
        return (AILevel == 0) ? new Naive() : new MinMax(AILevel);
    }

    private static int chooseHardcore(Scanner scan) {
        System.out.println("Hardcore (1) ou non (0) ?");
        int hardcore = scan.nextInt();
        scan.nextLine();
        return hardcore;
    }

    private static int chooseBoardSize(Scanner scan) {
        System.out.println("Entrez la taille (impaire et au moins 3) du plateau :");
        int size = scan.nextInt();
        scan.nextLine();
        while (size % 2 == 0 || size < 3) {
            System.out.println("Veuillez entrer un entier impair supérieur ou égal à 3.");
            size = scan.nextInt();
            scan.nextLine();
        }
        return size;
    }

}