From ee5f72aef8dd11abfc4cbbfabdf3b75ed242acc8 Mon Sep 17 00:00:00 2001
From: Alexandre 2n <112815410+Alexandre2n@users.noreply.github.com>
Date: Fri, 22 Dec 2023 01:43:41 +0100
Subject: [PATCH] generation

---
 S1.02/Jeu/src/Labyrinthe.java | 1008 +++++++++++++++++----------------
 1 file changed, 506 insertions(+), 502 deletions(-)

diff --git a/S1.02/Jeu/src/Labyrinthe.java b/S1.02/Jeu/src/Labyrinthe.java
index b676a71..14a831c 100644
--- a/S1.02/Jeu/src/Labyrinthe.java
+++ b/S1.02/Jeu/src/Labyrinthe.java
@@ -1,502 +1,506 @@
-import extensions.CSVFile;
-
-class Labyrinthe extends Program{
-
-    final int NOMBRESALLES = 10;
-    
-    Salle[] salles = new Salle[]{
-                                    newSalle(0,"0110"),
-                                    newSalle(1,"0101"),
-                                    newSalle(2,"1111"),
-                                    newSalle(3,"0101"),
-                                    newSalle(4,"1010"),
-                                    newSalle(5,"1101"),
-                                    newSalle(6,"1100"),
-                                    newSalle(7,"1001"),
-                                    newSalle(8,"1011"),
-                                    newSalle(9,"0011"),
-                                    newSalle(10,"0110")
-                                };
-    
-
-    Salle newSalle(int numero, String sorties){ //Création d'une salle
-        Salle s = new Salle();
-        s.numero=numero;
-        s.sorties=sorties;
-        return(s);
-    }
-
-    Question newQuestion(String question, String reponse){ //Implémente une fonction et sa réponse
-        Question q = new Question();
-        q.question = question;
-        q.reponse = reponse;
-        return q;
-    }
-    
-    String QuestiontoString (Question q){ //Affiche l'énoncé de la question
-        return "" + q.question;
-    }
-
-    String ReponsetoString (Question q){ //Affiche la réponse de la question
-        return "" + q.reponse;
-    }
-
-    Joueur newJoueur(String pseudo){ //Créé un nouveau Joueur
-        Joueur j = new Joueur();
-        j.pseudo = pseudo;
-        j.score = 0;
-        return j;
-    }
-
-    int nbLignes(String cheminFichier){ //retourne le nombre de ligne d'un fichier
-        int i = 1;
-        extensions.File file = newFile(cheminFichier);
-        String verif = readLine(file);
-        while(ready(file)){
-            i = i + 1;
-            verif = readLine(file);
-        }
-        return i;
-    }
-
-    String readFile(String cheminFichier, boolean sertAffichage){ //Lis un fichier le renvoie sous forme de chaine de caractère
-        extensions.File file = newFile(cheminFichier);
-        int longueur = nbLignes(cheminFichier);
-        String res = "";
-        if(sertAffichage){
-            for(int i = 0; i < longueur; i ++){
-                res += readLine(file) + '\n';
-            }
-        } else {
-            for(int i = 0; i < longueur; i ++){
-                res += readLine(file);
-            }
-        }
-        return res;
-    }
-
-    char controleSaisie(){ // verifie que l'utilisateur saisisse bien 1 caractere
-        String choix;
-        do{
-            choix = toLowerCase(readString());
-        }while(length(choix)!= 1);
-        return charAt(choix, 0);
-    }
-
-    char[][] genererSalle(String cheminFichier){ // génère une grille d'une du labyrinthe d'après un fichier (taille 72x19)
-        char[][] lab = new char[19][72];
-        String salle = readFile(cheminFichier, false);
-        int z = 0;
-        for(int i = 0; i < nbLignes(cheminFichier); i ++){
-            for(int j = 0; j < length(lab, 2); j ++){
-                lab[i][j] = charAt(salle, z);
-                z = z + 1;
-            }
-        }
-        return lab;
-    }
-
-    String veriferVoisins(Salle[][] lab, int i, int j){
-        String resultat = "";
-        if (i<length(lab,1) && i>=1 && lab[i-1][j]!=null){
-            resultat = resultat + lab[i-1][j].sorties;
-        }else{resultat=resultat+"EEEE";}
-        if (j<length(lab,2)-1 && lab[i][j+1]!=null){
-            resultat = resultat + lab[i][j+1].sorties;
-        }else{resultat=resultat+"EEEE";}
-        if (i<length(lab,1)-1 && lab[i+1][j]!=null){
-            resultat = resultat + lab[i+1][j].sorties;
-        }else{resultat=resultat+"EEEE";}
-        if (j<length(lab,2)&& j>=1 && lab[i][j-1]!=null){
-            resultat = resultat + lab[i][j-1].sorties;
-        }else{resultat=resultat+"EEEE";}
-        //println(resultat);
-        return(resultat);
-    }
-
-    void choisirSalle(Salle[][] lab, int i, int j){
-        String resultat="";
-        String check = veriferVoisins(lab,i,j);
-        String haut = substring(check,0,4);
-        String droite = substring(check,4,8);
-        String bas = substring(check,8,12);
-        String gauche = substring(check,12,16);
-        if(charAt(haut,2)=='1'){
-            resultat=resultat+'1';
-        }else{resultat=resultat+'.';}
-        if(charAt(droite,3)=='1'){
-            resultat=resultat+'1';
-        }else{resultat=resultat+'.';}
-        if(charAt(bas,0)=='1'){
-            resultat=resultat+'1';
-            }else{resultat=resultat+'.';}
-        if(charAt(gauche,1)=='1'){
-            resultat=resultat+'1';
-        }else{resultat=resultat+'.';}
-        //println(resultat);
-        int nbalea=(int)(random()*10);
-        while(!equals(salles[nbalea].sorties,choixAlea(resultat))){
-            nbalea=(int)(random()*10);
-            //println(nbalea);
-        }
-        lab[i][j]=salles[nbalea];
-    }
-
-    String choixAlea(String chaine){
-        for(int a = 0; a<4;a++){
-            if(charAt(chaine,a)=='.'||charAt(chaine,a)=='E'){
-                chaine=substring(chaine,0,a)+(int)(random()*2)+substring(chaine,a+1,length(chaine));
-            }
-        }
-        return(chaine);
-    }
-
-    Salle[][] genererLab(int nbSalle){ // genere un Layrinthe de nbSalle salle et d'une taille de 72 x 19 par salle !!!! IL FAUT QUE LE nbSalle SOINT IMPAIRE !!!!
-        Salle[][] lab = new Salle[nbSalle][nbSalle];
-        lab[(nbSalle/2)+1][(nbSalle/2)+1] = salles[3];
-        lab[0][0] = salles[0];
-        for(int i=0;i<length(lab,1);i++){
-            for(int j=0;j<length(lab,2);j++){
-                if(lab[i][j]==null){
-                    choisirSalle(lab,i,j);
-                }
-            }
-        }
-        return(lab);
-    }
-
-    void afficheHelp(){
-        print(readFile("ressources/img/Help", true));
-        println("A tout moment dans la partie, appuyer sur \"H\" pour réafficher ce menu");
-        println();
-        readString();
-    }
-
-    int[] deplacement(char[][] Lab, char direction, int positionL, int positionC, Joueur j){ //vérifie si déplacement possible, si oui l'effectue
-        if(direction == 'h'){
-            afficheHelp();
-        }
-        
-        if(direction == 'z' && positionL-1 >= 0 && Lab[positionL-1][positionC] != '@'){ //déplacement haut
-            if(Lab[positionL-1][positionC] == '.'){ //déplacement si case vide
-                Lab[positionL][positionC] = '.';
-                Lab[positionL-1][positionC] = 'P';
-                return new int[]{positionL-1, positionC};
-            } else if(Lab[positionL-1][positionC] == 'M'){ //Si Monstre, affiche la question.
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    Lab[positionL-1][positionC] = '.';
-                    j.score += 1;
-                } else {
-                    j.vie -= 10;
-                }
-            }  else if(Lab[positionL-1][positionC] == 'B'){ //Si Monstre, affiche la question.
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    j.bossVaincu = true;
-                    j.score += 30;
-                } else {
-                    j.vie -= 10;
-                }
-            }
-        }
-
-        if(direction == 's' && positionL+1 < length(Lab, 1) && Lab[positionL+1][positionC] != '@'){ //déplacement bas
-            if(Lab[positionL+1][positionC] == '.'){ //déplacement si case vide
-                Lab[positionL][positionC] = '.';
-                Lab[positionL+1][positionC] = 'P';
-                return new int[]{positionL+1, positionC};
-            } else if (Lab[positionL+1][positionC] == 'M'){
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    Lab[positionL+1][positionC] = '.';
-                    j.score += 1;
-                } else {
-                    j.vie -= 10;
-                }
-            }  else if(Lab[positionL+1][positionC] == 'B'){ //Si Monstre, affiche la question.
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    j.bossVaincu = true;
-                    j.score += 30;
-                } else {
-                    j.vie -= 10;
-                }
-            }
-        }
-
-        if(direction == 'q' && positionC-1 >= 0 && Lab[positionL][positionC-1] != '@'){ //déplacement gauche
-            if(Lab[positionL][positionC-1] == '.'){ //déplacement si case vide
-                Lab[positionL][positionC] = '.';
-                Lab[positionL][positionC-1] = 'P';
-                return new int[]{positionL, positionC-1};
-            } else if (Lab[positionL][positionC-1] == 'M'){
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    Lab[positionL][positionC-1] = '.';
-                    j.score += 1;
-                } else {
-                    j.vie -= 10;
-                }
-            }  else if(Lab[positionL][positionC-1] == 'B'){ //Si Monstre, affiche la question.
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    j.bossVaincu = true;
-                    j.score += 30;
-                } else {
-                    j.vie -= 10;
-                }
-            }
-        }
-
-        if(direction == 'd' && positionC+1 < length(Lab,2) && Lab[positionL][positionC+1] != '@'){ //déplacement droite
-            if(Lab[positionL][positionC+1] == '.'){ //déplacement si case vide
-                Lab[positionL][positionC] = '.';
-                Lab[positionL][positionC+1] = 'P';
-                return new int[]{positionL, positionC+1};
-            } else if (Lab[positionL][positionC+1] == 'M'){
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    Lab[positionL][positionC+1] = '.';
-                    j.score += 1;
-                } else {
-                    j.vie -= 10;
-                }
-            }  else if(Lab[positionL][positionC+1] == 'B'){ //Si Monstre, affiche la question.
-                Question q = newQuestion("Quelle est la capital de la France", "paris");
-                afficheQuestion(q, true);
-                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
-                    j.bossVaincu = true;
-                    j.score += 30;
-                } else {
-                    j.vie -= 10;
-                }
-            }
-        }
-        return new int[]{positionL, positionC};
-    }
-
-    String formatIntituler(String intituler, int tailleTotal, int tailleLigne){ //prend une chaine de caractère et la renvoie sous le format donné
-        String res = "";
-        int format = 0;
-        for(int longueur = 0; longueur < tailleTotal; longueur ++){
-            if(longueur < length(intituler)){
-                res += charAt(intituler, longueur);
-            } else {
-                res += " ";
-            }
-            format += 1;
-            if(format == tailleLigne && longueur != tailleTotal-1){
-                res += '\n';
-                format = 0;
-            }
-        }
-        return res;
-    }
-
-    void testFormatIntituler(){
-        String test = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP";
-        String verif = "abcdefghijkl" +'\n' + "mnopqrstuvwx" + '\n' + "yzABCDEFGHIJ" + '\n' + "KLMNOP      ";
-        assertEquals(verif, formatIntituler(test, 48, 12));
-    }        
-
-    void afficheIntituler(String intituler){ //prend une chaine et l'affiche selon la forme d'affichage des question (voir ressource)
-        print("                ");
-        for(int i = 0; i < length(intituler); i ++){
-            print(charAt(intituler, i));
-            if(charAt(intituler, i) == '\n'){
-                print("                ");
-            }
-        }
-        println();
-    }
-
-    String[][] load(String cheminFichier){ //Charge un fichier csv en un tableau
-        CSVFile file = loadCSV(cheminFichier);
-        String tab[][] =  new String[rowCount(file)][columnCount(file)];
-        for(int i = 0; i < rowCount(file); i ++){
-            for(int j = 0; j < columnCount(file); j++){
-                tab[i][j] = getCell(file, i, j);
-            }
-        }
-        return tab;
-    }
-
-    void ajoutQuestion(String[][] file, int nbAjout){ //Permet d'ajouter nbAjout nouvelle Question
-        String[][] newFile = new String[length(file, 1) + nbAjout][length(file, 2)];
-        for(int i1 = 0; i1 < length(file, 1); i1 ++){ //copie le fichier de base
-            for(int j1 = 0; j1 < length(file, 2); j1 ++){
-                newFile[i1][j1] = file[i1][j1];
-            }
-        }
-        for(int i = length(file, 1); i < length(newFile); i ++){ //ajoute autant de question que demandé à l'appelle de la fonction
-            print("Quel est l'intitulé de la nouvelle question ? : ");
-            String intitu = readString();
-            print("Quelle est la réponse à cette question ? : ");
-            String rep = readString();
-            newFile[i][0]= intitu;
-            newFile[i][1]= rep;
-        }
-        saveCSV(newFile, "ressources/ListeQuestion.csv");
-
-    }
-
-    void ajoutScore(String[][] file, String pseudo, int score){ //ajout de Score (optionnel à faire plus tard)
-
-    }
-
-    void afficheStringTab(String[][] tab){ //Affiche un tableau de String a 2 dimension
-        for(int i = 1; i < length(tab,1); i ++){
-            for(int j = 0; j < length(tab,2); j ++){
-                print(tab[i][j] + "  ");
-            }
-            println();
-        }
-    }
-
-    void afficheQuestion(Question q, boolean reponseLibre){
-        println("################################################################################" + '\n' +
-                "####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####" + '\n' +
-                "####@                                                                      @####");
-        String intituler = formatIntituler(q.question, 48*4, 48);
-        afficheIntituler(intituler);
-        if(reponseLibre){
-            println("####@                                                                      @####" + '\n' +
-                    "####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####" + '\n' +
-                    "################################################################################");
-            for(int i = 0; i < 13; i ++){
-                println();
-            }
-        }
-
-    }
-
-    boolean questionCorrect(Question q){ //Vérifie si on donne la bonne réponse
-        String res = readString();
-        return equals(toLowerCase(res), toLowerCase(q.reponse));
-    }
-
-    void afficheLab(char[][] Lab){ //affiche le Labyrinthe (@ = mur, P = perso, S = sortie, M = monstre, B = boss, 🏠 = shop, .  = case vide)
-        println("################################################################################"+ '\n' +
-                "################################################################################");
-        for(int i =0; i<length(Lab,1);i++){
-            print("####");
-            for(int j =0; j<length(Lab,2);j++){
-                if(Lab[i][j]=='.'){
-                    print(' ');
-                }else{
-                    print(Lab[i][j]);
-                }
-            }
-            print("####");
-            println();
-        }
-        println("################################################################################");
-    }
-
-    int[] indiceDe(char c, char[][] tab){ //revoie les indices d'un caractère dans un tableau de caractère
-        for(int i = 0; i < length(tab, 1); i ++){
-            for(int j = 0; j < length(tab, 2); j ++){
-                if(tab[i][j] == c){
-                    return new int[]{i,j};
-                }
-            }
-        }
-        return new int[]{0,0};
-    }
-    void afficherSalle(int nbr){
-        char[][] salle = genererSalle("ressources/Lab/Salle"+nbr);
-        afficheLab(salle);
-    }
-    void algorithm(){
-        Salle[][] lab = genererLab(5); //genere le Layrinthe
-        String[][] lQuestion = load("ressources/ListeQuestion.csv");
-        print("Voulez vous ajouter des question ? oui (o), non (autre)");
-        boolean ques = equals(toLowerCase(readString()), "o");
-        if(ques){
-            print("Combien voulez vous en ajouter ? : ");
-            int nbAjout = readInt();
-            ajoutQuestion(lQuestion, nbAjout);
-            lQuestion = load("ressources/ListeQuestion.csv");
-            afficheStringTab(lQuestion);
-        }
-        for(int i = 0; i<length(lab,1);i++){
-            for(int j=0;j<length(lab,2);j++){
-                afficherSalle(lab[i][j].numero);
-            }
-        }
-
-        print(readFile("ressources/img/Presentation.txt", true)); //affiche l'écran titre
-        String lancer = readString();
-        while(lancer != ""){ //Vérifie que l'utilisateur fasse "Entrée" et si oui lance le jeu
-            print(readFile("ressources/img/Presentation.txt", true));
-            lancer = readString();
-        }
-
-        afficheHelp();
-
-        print("Rentrez votre pseudo : ");
-        String pseudo = readString();
-        Joueur j = newJoueur(pseudo); //Création du joueur
-        println("" + j.pseudo + " / score : " + j.score + " / vie : " + j.vie + " / boss vaincu ? " + j.bossVaincu);
-        
-        char[][] salle = genererSalle("ressources/Lab/Salle"+lab[0][0].numero);
-        Question q = newQuestion("Quelle est la capital de la France", "paris");
-        afficherSalle(lab[1][0].numero);
-        int[] indiceM = indiceDe('P', salle);
-        salle[indiceM[0]-1][indiceM[1]] = 'M';
-        salle[indiceM[0]-3][indiceM[1]] = 'B';
-        afficheStringTab(load("ressources/score.csv"));
-        
-        while(j.vie > 0 && !j.bossVaincu){
-            afficheLab(salle);
-            println("" + j.pseudo + " / Score : " + j.score + " / PV : " + j.vie );
-            int[] indiceP = indiceDe('P', salle);
-            char choix = controleSaisie();
-            indiceP = deplacement(salle, choix, indiceP[0], indiceP[1], j);
-        }
-        if(j.bossVaincu){
-            print(readFile("ressources/img/Win.txt", true));
-        } else {
-            print(readFile("ressources/img/Lose.txt", true));
-        }
-
-        
-        newQuestion("Quel fleuve passe par Paris ?", "seine");
-        newQuestion("Qui est Guillaume Apollinaire ?", "poète");
-        // newQuestion("Quelle est la raison pour laquelle la Préhistoire a pris fin ?","l'écriture");
-        newQuestion("Quelle est la capitale du Danemark ?","Copenhague");
-        newQuestion("Combien y a-t-il de fautes dans cette phrase : \"Si tu réssidive, tu auras une sanktion ?\"","2");
-        newQuestion("Combien font 5 + 9","14");
-        newQuestion("\"On\" ou \"Ont\" : Ils ... un livre neuf.","ont");
-        newQuestion("\"On\" ou \"Ont\" : ... adore notre chat.","on");
-        newQuestion("\"On\" ou \"Ont\" : Ils ... préparé des surprises.","ont");
-        newQuestion("\"On\" ou \"Ont\" : ... arrive bientôt ?","on");
-        newQuestion("Ecrire en chiffre : trois-cent-vight-deux","322");
-        newQuestion("Ecrire en chiffre : six-cent-six","606");
-        newQuestion("Ecrire en chiffre : six-cent-soixante-dix-neuf","679");
-        newQuestion("Ecrire en chiffre : soixante-neuf","69");
-        newQuestion("Ecrire en chiffre : quatre-cent-quatre-vingts","420");
-        newQuestion("Ecrire en lettre : 491","quatre-cent-quatre-vingt-onze");
-        newQuestion("Ecrire en lettre : 8","huit");
-        newQuestion("Ecrire en lettre : 99","quatre-vingt-dix-neuf");
-        newQuestion("A quel temps est conjugé cette phrase : \"Tu comprendras plus tard.\"","futur");
-        newQuestion("A quel temps est conjugé cette phrase : \"Je vais manger chez un ami.\"","présent");
-        newQuestion("A quel temps est conjugé cette phrase : \"Qu'as tu fais ?\"","passé composé");
-        newQuestion("A quel temps est conjugé cette phrase : \"Ca été ?\"","passé");
-        newQuestion("Convertir 1548 dg en mg.","154800");
-        newQuestion("Convertir 10599 hg en cg.","105990000");
-        newQuestion("Convertir 10 cm en m.","0,1");
-        newQuestion("En quelle année l'Amérique à été découverte par les européens ?","1492");
-        newQuestion("Qui à découvert l'Amérique ?","Christophe Colomb");
-
-        
-    }
-}
+import extensions.CSVFile;
+
+class Labyrinthe extends Program{
+
+    final int NOMBRESALLES = 10;
+    
+    Salle[] salles = new Salle[]{
+                                    newSalle(0,"0110"),
+                                    newSalle(1,"0101"),
+                                    newSalle(2,"1111"),
+                                    newSalle(3,"0101"),
+                                    newSalle(4,"1010"),
+                                    newSalle(5,"1101"),
+                                    newSalle(6,"1100"),
+                                    newSalle(7,"1001"),
+                                    newSalle(8,"1011"),
+                                    newSalle(9,"0011"),
+                                    newSalle(10,"0110")
+                                };
+    
+
+    Salle newSalle(int numero, String sorties){ //Création d'une salle
+        Salle s = new Salle();
+        s.numero=numero;
+        s.sorties=sorties;
+        return(s);
+    }
+
+    Question newQuestion(String question, String reponse){ //Implémente une fonction et sa réponse
+        Question q = new Question();
+        q.question = question;
+        q.reponse = reponse;
+        return q;
+    }
+    
+    String QuestiontoString (Question q){ //Affiche l'énoncé de la question
+        return "" + q.question;
+    }
+
+    String ReponsetoString (Question q){ //Affiche la réponse de la question
+        return "" + q.reponse;
+    }
+
+    Joueur newJoueur(String pseudo){ //Créé un nouveau Joueur
+        Joueur j = new Joueur();
+        j.pseudo = pseudo;
+        j.score = 0;
+        return j;
+    }
+
+    int nbLignes(String cheminFichier){ //retourne le nombre de ligne d'un fichier
+        int i = 1;
+        extensions.File file = newFile(cheminFichier);
+        String verif = readLine(file);
+        while(ready(file)){
+            i = i + 1;
+            verif = readLine(file);
+        }
+        return i;
+    }
+
+    String readFile(String cheminFichier, boolean sertAffichage){ //Lis un fichier le renvoie sous forme de chaine de caractère
+        extensions.File file = newFile(cheminFichier);
+        int longueur = nbLignes(cheminFichier);
+        String res = "";
+        if(sertAffichage){
+            for(int i = 0; i < longueur; i ++){
+                res += readLine(file) + '\n';
+            }
+        } else {
+            for(int i = 0; i < longueur; i ++){
+                res += readLine(file);
+            }
+        }
+        return res;
+    }
+
+    char controleSaisie(){ // verifie que l'utilisateur saisisse bien 1 caractere
+        String choix;
+        do{
+            choix = toLowerCase(readString());
+        }while(length(choix)!= 1);
+        return charAt(choix, 0);
+    }
+
+    char[][] genererSalle(String cheminFichier){ // génère une grille d'une du labyrinthe d'après un fichier (taille 72x19)
+        char[][] lab = new char[19][72];
+        String salle = readFile(cheminFichier, false);
+        int z = 0;
+        for(int i = 0; i < nbLignes(cheminFichier); i ++){
+            for(int j = 0; j < length(lab, 2); j ++){
+                lab[i][j] = charAt(salle, z);
+                z = z + 1;
+            }
+        }
+        return lab;
+    }
+
+    String veriferVoisins(Salle[][] lab, int i, int j){
+        String resultat = "";
+        if (i<length(lab,1) && i>=1 && lab[i-1][j]!=null){
+            resultat = resultat + lab[i-1][j].sorties;
+        }else{resultat=resultat+"EEEE";}
+        if (j<length(lab,2)-1 && lab[i][j+1]!=null){
+            resultat = resultat + lab[i][j+1].sorties;
+        }else{resultat=resultat+"EEEE";}
+        if (i<length(lab,1)-1 && lab[i+1][j]!=null){
+            resultat = resultat + lab[i+1][j].sorties;
+        }else{resultat=resultat+"EEEE";}
+        if (j<length(lab,2)&& j>=1 && lab[i][j-1]!=null){
+            resultat = resultat + lab[i][j-1].sorties;
+        }else{resultat=resultat+"EEEE";}
+        //println(resultat);
+        return(resultat);
+    }
+
+    void choisirSalle(Salle[][] lab, int i, int j){
+        String resultat="";
+        String check = veriferVoisins(lab,i,j);
+        String haut = substring(check,0,4);
+        String droite = substring(check,4,8);
+        String bas = substring(check,8,12);
+        String gauche = substring(check,12,16);
+        if(charAt(haut,2)=='1'){
+            resultat=resultat+'1';
+        }else{resultat=resultat+'.';}
+        if(charAt(droite,3)=='1'){
+            resultat=resultat+'1';
+        }else{resultat=resultat+'.';}
+        if(charAt(bas,0)=='1'){
+            resultat=resultat+'1';
+            }else{resultat=resultat+'.';}
+        if(charAt(gauche,1)=='1'){
+            resultat=resultat+'1';
+        }else{resultat=resultat+'.';}
+        //println(resultat);
+        int nbalea=(int)(random()*10);
+        while(!equals(salles[nbalea].sorties,choixAlea(resultat))){
+            nbalea=(int)(random()*10);
+            //println(nbalea);
+        }
+        lab[i][j]=salles[nbalea];
+    }
+
+    String choixAlea(String chaine){
+        for(int a = 0; a<4;a++){
+            if(charAt(chaine,a)=='E'){
+                chaine=substring(chaine,0,a)+0+substring(chaine,a+1,length(chaine));
+            }
+            if(charAt(chaine,a)=='.'){
+                chaine=substring(chaine,0,a)+(int)(random()*2)+substring(chaine,a+1,length(chaine));
+            }
+        }
+        return(chaine);
+    }
+
+    Salle[][] genererLab(int nbSalle){ // genere un Layrinthe de nbSalle salle et d'une taille de 72 x 19 par salle !!!! IL FAUT QUE LE nbSalle SOINT IMPAIRE !!!!
+        Salle[][] lab = new Salle[nbSalle][nbSalle];
+        lab[(nbSalle/2)+1][(nbSalle/2)+1] = salles[3];
+        lab[0][0] = salles[0];
+        for(int i=0;i<length(lab,1);i++){
+            for(int j=0;j<length(lab,2);j++){
+                if(lab[i][j]==null){
+                    choisirSalle(lab,i,j);
+                }
+            }
+        }
+        return(lab);
+    }
+
+    void afficheHelp(){
+        print(readFile("ressources/img/Help", true));
+        println("A tout moment dans la partie, appuyer sur \"H\" pour réafficher ce menu");
+        println();
+        readString();
+    }
+
+    int[] deplacement(char[][] Lab, char direction, int positionL, int positionC, Joueur j){ //vérifie si déplacement possible, si oui l'effectue
+        if(direction == 'h'){
+            afficheHelp();
+        }
+        
+        if(direction == 'z' && positionL-1 >= 0 && Lab[positionL-1][positionC] != '@'){ //déplacement haut
+            if(Lab[positionL-1][positionC] == '.'){ //déplacement si case vide
+                Lab[positionL][positionC] = '.';
+                Lab[positionL-1][positionC] = 'P';
+                return new int[]{positionL-1, positionC};
+            } else if(Lab[positionL-1][positionC] == 'M'){ //Si Monstre, affiche la question.
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    Lab[positionL-1][positionC] = '.';
+                    j.score += 1;
+                } else {
+                    j.vie -= 10;
+                }
+            }  else if(Lab[positionL-1][positionC] == 'B'){ //Si Monstre, affiche la question.
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    j.bossVaincu = true;
+                    j.score += 30;
+                } else {
+                    j.vie -= 10;
+                }
+            }
+        }
+
+        if(direction == 's' && positionL+1 < length(Lab, 1) && Lab[positionL+1][positionC] != '@'){ //déplacement bas
+            if(Lab[positionL+1][positionC] == '.'){ //déplacement si case vide
+                Lab[positionL][positionC] = '.';
+                Lab[positionL+1][positionC] = 'P';
+                return new int[]{positionL+1, positionC};
+            } else if (Lab[positionL+1][positionC] == 'M'){
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    Lab[positionL+1][positionC] = '.';
+                    j.score += 1;
+                } else {
+                    j.vie -= 10;
+                }
+            }  else if(Lab[positionL+1][positionC] == 'B'){ //Si Monstre, affiche la question.
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    j.bossVaincu = true;
+                    j.score += 30;
+                } else {
+                    j.vie -= 10;
+                }
+            }
+        }
+
+        if(direction == 'q' && positionC-1 >= 0 && Lab[positionL][positionC-1] != '@'){ //déplacement gauche
+            if(Lab[positionL][positionC-1] == '.'){ //déplacement si case vide
+                Lab[positionL][positionC] = '.';
+                Lab[positionL][positionC-1] = 'P';
+                return new int[]{positionL, positionC-1};
+            } else if (Lab[positionL][positionC-1] == 'M'){
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    Lab[positionL][positionC-1] = '.';
+                    j.score += 1;
+                } else {
+                    j.vie -= 10;
+                }
+            }  else if(Lab[positionL][positionC-1] == 'B'){ //Si Monstre, affiche la question.
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    j.bossVaincu = true;
+                    j.score += 30;
+                } else {
+                    j.vie -= 10;
+                }
+            }
+        }
+
+        if(direction == 'd' && positionC+1 < length(Lab,2) && Lab[positionL][positionC+1] != '@'){ //déplacement droite
+            if(Lab[positionL][positionC+1] == '.'){ //déplacement si case vide
+                Lab[positionL][positionC] = '.';
+                Lab[positionL][positionC+1] = 'P';
+                return new int[]{positionL, positionC+1};
+            } else if (Lab[positionL][positionC+1] == 'M'){
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    Lab[positionL][positionC+1] = '.';
+                    j.score += 1;
+                } else {
+                    j.vie -= 10;
+                }
+            }  else if(Lab[positionL][positionC+1] == 'B'){ //Si Monstre, affiche la question.
+                Question q = newQuestion("Quelle est la capital de la France", "paris");
+                afficheQuestion(q, true);
+                if(questionCorrect(q)){ //En cas de bonne réponse efface le monstre
+                    j.bossVaincu = true;
+                    j.score += 30;
+                } else {
+                    j.vie -= 10;
+                }
+            }
+        }
+        return new int[]{positionL, positionC};
+    }
+
+    String formatIntituler(String intituler, int tailleTotal, int tailleLigne){ //prend une chaine de caractère et la renvoie sous le format donné
+        String res = "";
+        int format = 0;
+        for(int longueur = 0; longueur < tailleTotal; longueur ++){
+            if(longueur < length(intituler)){
+                res += charAt(intituler, longueur);
+            } else {
+                res += " ";
+            }
+            format += 1;
+            if(format == tailleLigne && longueur != tailleTotal-1){
+                res += '\n';
+                format = 0;
+            }
+        }
+        return res;
+    }
+
+    void testFormatIntituler(){
+        String test = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP";
+        String verif = "abcdefghijkl" +'\n' + "mnopqrstuvwx" + '\n' + "yzABCDEFGHIJ" + '\n' + "KLMNOP      ";
+        assertEquals(verif, formatIntituler(test, 48, 12));
+    }        
+
+    void afficheIntituler(String intituler){ //prend une chaine et l'affiche selon la forme d'affichage des question (voir ressource)
+        print("                ");
+        for(int i = 0; i < length(intituler); i ++){
+            print(charAt(intituler, i));
+            if(charAt(intituler, i) == '\n'){
+                print("                ");
+            }
+        }
+        println();
+    }
+
+    String[][] load(String cheminFichier){ //Charge un fichier csv en un tableau
+        CSVFile file = loadCSV(cheminFichier);
+        String tab[][] =  new String[rowCount(file)][columnCount(file)];
+        for(int i = 0; i < rowCount(file); i ++){
+            for(int j = 0; j < columnCount(file); j++){
+                tab[i][j] = getCell(file, i, j);
+            }
+        }
+        return tab;
+    }
+
+    void ajoutQuestion(String[][] file, int nbAjout){ //Permet d'ajouter nbAjout nouvelle Question
+        String[][] newFile = new String[length(file, 1) + nbAjout][length(file, 2)];
+        for(int i1 = 0; i1 < length(file, 1); i1 ++){ //copie le fichier de base
+            for(int j1 = 0; j1 < length(file, 2); j1 ++){
+                newFile[i1][j1] = file[i1][j1];
+            }
+        }
+        for(int i = length(file, 1); i < length(newFile); i ++){ //ajoute autant de question que demandé à l'appelle de la fonction
+            print("Quel est l'intitulé de la nouvelle question ? : ");
+            String intitu = readString();
+            print("Quelle est la réponse à cette question ? : ");
+            String rep = readString();
+            newFile[i][0]= intitu;
+            newFile[i][1]= rep;
+        }
+        saveCSV(newFile, "ressources/ListeQuestion.csv");
+
+    }
+
+    void ajoutScore(String[][] file, String pseudo, int score){ //ajout de Score (optionnel à faire plus tard)
+
+    }
+
+    void afficheStringTab(String[][] tab){ //Affiche un tableau de String a 2 dimension
+        for(int i = 1; i < length(tab,1); i ++){
+            for(int j = 0; j < length(tab,2); j ++){
+                print(tab[i][j] + "  ");
+            }
+            println();
+        }
+    }
+
+    void afficheQuestion(Question q, boolean reponseLibre){
+        println("################################################################################" + '\n' +
+                "####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####" + '\n' +
+                "####@                                                                      @####");
+        String intituler = formatIntituler(q.question, 48*4, 48);
+        afficheIntituler(intituler);
+        if(reponseLibre){
+            println("####@                                                                      @####" + '\n' +
+                    "####@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@####" + '\n' +
+                    "################################################################################");
+            for(int i = 0; i < 13; i ++){
+                println();
+            }
+        }
+
+    }
+
+    boolean questionCorrect(Question q){ //Vérifie si on donne la bonne réponse
+        String res = readString();
+        return equals(toLowerCase(res), toLowerCase(q.reponse));
+    }
+
+    void afficheLab(char[][] Lab){ //affiche le Labyrinthe (@ = mur, P = perso, S = sortie, M = monstre, B = boss, 🏠 = shop, .  = case vide)
+        println("################################################################################"+ '\n' +
+                "################################################################################");
+        for(int i =0; i<length(Lab,1);i++){
+            print("####");
+            for(int j =0; j<length(Lab,2);j++){
+                if(Lab[i][j]=='.'){
+                    print(' ');
+                }else{
+                    print(Lab[i][j]);
+                }
+            }
+            print("####");
+            println();
+        }
+        println("################################################################################");
+    }
+
+    int[] indiceDe(char c, char[][] tab){ //revoie les indices d'un caractère dans un tableau de caractère
+        for(int i = 0; i < length(tab, 1); i ++){
+            for(int j = 0; j < length(tab, 2); j ++){
+                if(tab[i][j] == c){
+                    return new int[]{i,j};
+                }
+                println();
+            }
+        }
+        return new int[]{0,0};
+    }
+    void afficherSalle(int nbr){
+        char[][] salle = genererSalle("ressources/Lab/Salle"+nbr);
+        afficheLab(salle);
+    }
+    void algorithm(){
+        Salle[][] lab = genererLab(5); //genere le Layrinthe
+        String[][] lQuestion = load("ressources/ListeQuestion.csv");
+        print("Voulez vous ajouter des question ? oui (o), non (autre)");
+        boolean ques = equals(toLowerCase(readString()), "o");
+        if(ques){
+            print("Combien voulez vous en ajouter ? : ");
+            int nbAjout = readInt();
+            ajoutQuestion(lQuestion, nbAjout);
+            lQuestion = load("ressources/ListeQuestion.csv");
+            afficheStringTab(lQuestion);
+        }
+        for(int i = 0; i<length(lab,1);i++){
+            for(int j=0;j<length(lab,2);j++){
+                afficherSalle(lab[i][j].numero);
+            }
+        }
+
+        print(readFile("ressources/img/Presentation.txt", true)); //affiche l'écran titre
+        String lancer = readString();
+        while(lancer != ""){ //Vérifie que l'utilisateur fasse "Entrée" et si oui lance le jeu
+            print(readFile("ressources/img/Presentation.txt", true));
+            lancer = readString();
+        }
+
+        afficheHelp();
+
+        print("Rentrez votre pseudo : ");
+        String pseudo = readString();
+        Joueur j = newJoueur(pseudo); //Création du joueur
+        println("" + j.pseudo + " / score : " + j.score + " / vie : " + j.vie + " / boss vaincu ? " + j.bossVaincu);
+        
+        char[][] salle = genererSalle("ressources/Lab/Salle"+lab[0][0].numero);
+        Question q = newQuestion("Quelle est la capital de la France", "paris");
+        afficherSalle(lab[1][0].numero);
+        int[] indiceM = indiceDe('P', salle);
+        salle[indiceM[0]-1][indiceM[1]] = 'M';
+        salle[indiceM[0]-3][indiceM[1]] = 'B';
+        afficheStringTab(load("ressources/score.csv"));
+        
+        while(j.vie > 0 && !j.bossVaincu){
+            afficheLab(salle);
+            println("" + j.pseudo + " / Score : " + j.score + " / PV : " + j.vie );
+            int[] indiceP = indiceDe('P', salle);
+            char choix = controleSaisie();
+            indiceP = deplacement(salle, choix, indiceP[0], indiceP[1], j);
+        }
+        if(j.bossVaincu){
+            print(readFile("ressources/img/Win.txt", true));
+        } else {
+            print(readFile("ressources/img/Lose.txt", true));
+        }
+
+        
+        newQuestion("Quel fleuve passe par Paris ?", "seine");
+        newQuestion("Qui est Guillaume Apollinaire ?", "poète");
+        // newQuestion("Quelle est la raison pour laquelle la Préhistoire a pris fin ?","l'écriture");
+        newQuestion("Quelle est la capitale du Danemark ?","Copenhague");
+        newQuestion("Combien y a-t-il de fautes dans cette phrase : \"Si tu réssidive, tu auras une sanktion ?\"","2");
+        newQuestion("Combien font 5 + 9","14");
+        newQuestion("\"On\" ou \"Ont\" : Ils ... un livre neuf.","ont");
+        newQuestion("\"On\" ou \"Ont\" : ... adore notre chat.","on");
+        newQuestion("\"On\" ou \"Ont\" : Ils ... préparé des surprises.","ont");
+        newQuestion("\"On\" ou \"Ont\" : ... arrive bientôt ?","on");
+        newQuestion("Ecrire en chiffre : trois-cent-vight-deux","322");
+        newQuestion("Ecrire en chiffre : six-cent-six","606");
+        newQuestion("Ecrire en chiffre : six-cent-soixante-dix-neuf","679");
+        newQuestion("Ecrire en chiffre : soixante-neuf","69");
+        newQuestion("Ecrire en chiffre : quatre-cent-quatre-vingts","420");
+        newQuestion("Ecrire en lettre : 491","quatre-cent-quatre-vingt-onze");
+        newQuestion("Ecrire en lettre : 8","huit");
+        newQuestion("Ecrire en lettre : 99","quatre-vingt-dix-neuf");
+        newQuestion("A quel temps est conjugé cette phrase : \"Tu comprendras plus tard.\"","futur");
+        newQuestion("A quel temps est conjugé cette phrase : \"Je vais manger chez un ami.\"","présent");
+        newQuestion("A quel temps est conjugé cette phrase : \"Qu'as tu fais ?\"","passé composé");
+        newQuestion("A quel temps est conjugé cette phrase : \"Ca été ?\"","passé");
+        newQuestion("Convertir 1548 dg en mg.","154800");
+        newQuestion("Convertir 10599 hg en cg.","105990000");
+        newQuestion("Convertir 10 cm en m.","0,1");
+        newQuestion("En quelle année l'Amérique à été découverte par les européens ?","1492");
+        newQuestion("Qui à découvert l'Amérique ?","Christophe Colomb");
+
+        
+    }
+}
-- 
GitLab