Advertisement
Guest User

Untitled

a guest
Dec 12th, 2016
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 11.94 KB | None | 0 0
  1. import java.util.*;
  2.  
  3. public class Mastermind
  4. {
  5.   public static void main(String[] args)
  6.   {
  7.     Scanner s = new Scanner(System.in); //scanner int
  8.     Scanner t = new Scanner(System.in); //scanner String
  9.     Random  r = new Random(); //random
  10.  
  11.     int chiffreschoisis[] = {0,0,0,0};//chiffres a deviner
  12.     int chiffregen[]      = {0,0,0,0};//chiffres entrees
  13.     int bonnerep[]        = {0,0,0};  //riens, vaches, teauraux
  14.  
  15.     boolean gen      = false;   //generation du nombre a deviner
  16.     boolean game     = false;   //gestion du jeu
  17.     boolean enChoix  = false;   //gestion du choix de l'ordi
  18.     boolean testDeja = false;   //regarde les nombres du tableau valPoss
  19.     boolean reponOk  = false;   //pour éviter que le joueur ne réponde n'importe quoi
  20.     boolean working  = false;
  21.  
  22.     int tours = 0;           //compte les tours
  23.  
  24.     int valeurOrdi = 0;      //valeur donnée par l'ordi
  25.  
  26.     int[] valPoss    = new int[4636];                    //liste des valeurs possibles
  27.     int[] valaChois  = new int[16];                      //ensemble des valeurs a choisir au pif
  28.     int taurPoss[]   = {-1,-1,-1,-1};                    //chiffres qui sont peut-être teauraux
  29.     int vachPoss[]   = {-1,-1,-1,-1};                    //chiffres qui sont peut-être vaches
  30.     int taurSur[]    = {-1,-1,-1,-1};                    //chiffres qui sont teauraux
  31.     int vachSur[]    = {-1,-1,-1,-1};                    //chiffres qui sont vaches
  32.     int vide[]       = {-1,-1,-1,-1,-1,-1,-1,-1,-1};     //chiffres non présents
  33.  
  34.     int valDecom[][][] = {{{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
  35.                           {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}},
  36.                           {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}, //[vaches][taureaux][pos du chiffre]
  37.                           {{0,0,0,0},{0,0,0,0},{0,0,0,0},{0,0,0,0}}};//chacun des nombnres de valuse, mais décomposés
  38.  
  39.     int valuse[][] = {{0,0,0,0},{0,0,0,0},{0,0,0,0}};//[vaches][taureaux]
  40.  
  41.     int n          = 0;              //sert de curseur dans vide[]
  42.     int u          = 0;              //sert de curseur dans valPoss
  43.     int w          = 0;              //curseur dans chiffreschoisis
  44.     int com        = 0;              //compteurs dans
  45.  
  46.     int repOrdi    = 0;
  47.     int choix      = 0;
  48.     int monChoix   = 0;
  49.  
  50.     System.out.println("Jouer en mode \"IA\" (l'ordinateur détermine le chiffre) où \"Normal\" (vous determinez le chiffre) ?.");
  51.     String mode = t.nextLine();
  52.  
  53.     if (mode.equals("IA")||mode.equals("iA")||mode.equals("Ia")||mode.equals("ia"))//mode IA
  54.      {
  55.        while (gen  == false)//on génère le chiffre que l'IA va tenter de deviner
  56.         {
  57.           System.out.println("Choisissez un chiffre entre 1023 et 9876.");
  58.           System.out.println("Il ne peut y avoir deux fois le même chiffre.");
  59.           monChoix = s.nextInt(); //entre un nombre
  60.           int c1, c2, c3, c4;
  61.  
  62.           c1 = monChoix%10; c2 = (monChoix%100)/10; c3 = (monChoix%1000)/100; c4 = (monChoix%10000)/1000; //isole les chiffres
  63.  
  64.           if (c1 != c2 && c3 != c4 && c1!=c3 && c2 !=c4 && c1 != c4 && c2 != c3) //teste chacun des chiffres
  65.            {
  66.             chiffreschoisis[0]=c4;  //atribue le dernier chiffre a la case 0
  67.             chiffreschoisis[1]=c3;  //atribue le chiffre 3 a la case 1
  68.             chiffreschoisis[2]=c2;  //atribue le chiffre 2 a la case 2
  69.             chiffreschoisis[3]=c1;  //atribue le chiffre 1 a la case 3
  70.  
  71.             gen = true;            // fin de la gestion du nombre
  72.  
  73.            }
  74.           else
  75.            {
  76.              System.out.println("Conditions non-respectées.");
  77.            }
  78.          }
  79.        while (game == false)//l'IA va trouver ce chiffre
  80.         {
  81.           enChoix  = false;
  82.           testDeja = false;
  83.           int o = 0; //compte les tours de la boucle suivante, correspond a une case de valPoss
  84.  
  85.           while (enChoix  == false)//l'ordinateur choisit un nombre
  86.            {
  87.                 testDeja = false;
  88.                 enChoix  = false;
  89.                 working  = false;
  90.  
  91.                 o = 0;
  92.                 while (testDeja == false)
  93.                  {
  94.                    while (working == false)//on va décomposer toutes les réponses possibles
  95.                     {
  96.                       int uu = 0;
  97.                       int v  = 0;
  98.                       while (u < 3)//on remplit valDecom
  99.                        {
  100.                          while (v < 3)
  101.                           {
  102.                             valDecom[uu][v][0] = (valuse[uu][v]%10000)/1000;   valDecom[uu][v][1] = (valuse[uu][v]%1000)/100;
  103.                             valDecom[uu][v][2] = (valuse[uu][v]%100)/10;       valDecom[uu][v][3] =  valuse[uu][v]%10;
  104.                             v++;
  105.                           }
  106.                          v=0;
  107.                          u++;
  108.                        }
  109.                       //Test des valeurs
  110.                       //[vaches][taureaux][pos du chiffre]
  111.                       if (valDecom[1][0][0] == valDecom[1][1][0])
  112.                        {
  113.                          vachPoss[com] = valDecom[0][0][0];
  114.                         // com++;
  115.                        }
  116.                       working=true;
  117.                     }
  118.                    choix = r.nextInt((9877-1023))+1023; //choisit un nombre
  119.  
  120.                    int f1, f2, f3, f4;
  121.  
  122.                    f1 = choix%10; f2 = (choix%100)/10; f3 = (choix%1000)/100; f4 = (choix%10000)/1000; //isole les chiffres
  123.  
  124.                    if (f1 != f2 && f3 != f4 && f1!=f3 && f2 !=f4 && f1 != f4 && f2 != f3) //teste chacun des chiffres
  125.                     {
  126.                      chiffreschoisis[0]=f4;  //atribue le dernier chiffre a la case 0
  127.                      chiffreschoisis[1]=f3;  //atribue le chiffre 3 a la case 1
  128.                      chiffreschoisis[2]=f2;  //atribue le chiffre 2 a la case 2
  129.                      chiffreschoisis[3]=f1;  //atribue le chiffre 1 a la case 3
  130.  
  131.                      testDeja = true;        // fin de la gestion du nombre
  132.                     }
  133.                  }
  134.                 while (o < 4636)
  135.                  {
  136.                    if (choix != valPoss[o]) //on regarde si le nombre n'a pas encore été déjà choisit
  137.                     {
  138.                       testDeja = true;
  139.                       valPoss[o]=choix;     //entre la valeur dans le tableau
  140.                       o = 9999;             //sort de la boucle
  141.                       enChoix = true;       // fin de la gestion du nombre
  142.                     }
  143.                    else
  144.                     {
  145.                       o++;                  //on passe a la case d'après
  146.                     }
  147.               }
  148.            }
  149.           repOrdi = chiffreschoisis[0]*1000+chiffreschoisis[1]*100+chiffreschoisis[2]*10+chiffreschoisis[3];
  150.           System.out.println("L'ordinateur a choisi le nombre : " + repOrdi);
  151.  
  152.           if (repOrdi == monChoix)
  153.            {
  154.               System.out.println("L'ordinateur a trouvé la bonne réponse au bout de " + tours + " tours.");
  155.               game = true;
  156.            }
  157.           else
  158.            {
  159.              reponOk = false;
  160.              while (reponOk == false)
  161.               {
  162.                 System.out.print("Combien de vaches ? ");
  163.                 int vaches   = s.nextInt();
  164.                 System.out.print("\nCombien de taureaux ? ");
  165.                 int taureaux = s.nextInt();
  166.  
  167.                 if (vaches < 0 || vaches > 4 || taureaux < 0 || taureaux > 3 || (taureaux + vaches) > 4)//le joueur a répondu n'importe quoi
  168.                  {
  169.                    System.out.println("\nUn peu de sérieux s'il vous plait.");
  170.                  }
  171.                 else
  172.                  {
  173.                    if (tours > 4636)
  174.                     {
  175.                       System.out.println("Vous avez menti, et piégé l'IA.");
  176.                     }
  177.                    reponOk = true;
  178.                    tours++;
  179.                    int y,x;                //compteurs des boucles ci-dessous
  180.                    valPoss[u] = repOrdi;   //on inclut le choix de l'ordi dans valPoss, afin qu'il ne le tire pas de nouveau
  181.                    //cas extrêmes
  182.                    valuse[vaches][taureaux] = repOrdi;
  183.                  }
  184.               }
  185.  
  186.            }
  187.         }
  188.      }
  189.     else //mode normal si on ne choisit pas l'IA
  190.      {
  191.        System.out.println("L'ordinateur choisit un chiffre entre 1023 et 9876.");
  192.        while (gen  == false)
  193.         {
  194.           choix = r.nextInt(9877)+1023; //choisit un nombre
  195.           int c1, c2, c3, c4;
  196.  
  197.           c1 = choix%10; c2 = (choix%100)/10; c3 = (choix%1000)/100; c4 = (choix%10000)/1000; //isole les chiffres
  198.  
  199.           if (c1 != c2 && c3 != c4 && c1!=c3 && c2 !=c4 && c1 != c4 && c2 != c3) //teste chacun des chiffres
  200.            {
  201.             chiffreschoisis[0]=c4;  //atribue le dernier chiffre a la case 0
  202.             chiffreschoisis[1]=c3;  //atribue le chiffre 3 a la case 1
  203.             chiffreschoisis[2]=c2;  //atribue le chiffre 2 a la case 2
  204.             chiffreschoisis[3]=c1;  //atribue le chiffre 1 a la case 3
  205.  
  206.             gen = true;            // fin de la gestion du nombre
  207.  
  208.             System.out.println("L'ordinateur a choisi un nombre.");
  209.            }
  210.           else
  211.            {
  212.  
  213.            }
  214.         }
  215.        while (game == false)
  216.         {
  217.           boolean betise = false;
  218.           int rep = 0;
  219.  
  220.           while (betise == false)
  221.            {
  222.              System.out.println("Entrez un nombre entre 1023 et 9876.");
  223.              rep = s.nextInt();
  224.              if (rep < 1023 || rep > 9876)
  225.               System.out.println("Un peu de sérieux. S'il vous plait.");
  226.              else
  227.               betise = true;
  228.            }
  229.  
  230.           bonnerep[0]=0;bonnerep[1]=0;bonnerep[2]=0; // reinitialise le nombre de vaches & taureaux
  231.           int r1,r2,r3,r4;
  232.           r1 = rep%10; r2 = (rep%100)/10; r3 = (rep%1000)/100; r4 = (rep%10000)/1000;//isole les chiffres
  233.  
  234.           //teste chacun des chiffres isolés pour voir si ils sont taureaux ou vaches
  235.           if (r4 == chiffreschoisis[0])//taureaux
  236.            {
  237.              bonnerep[2]++;
  238.            }
  239.           else if (r4 == chiffreschoisis[1] || r4 == chiffreschoisis[2] || r4 == chiffreschoisis[3])//vaches
  240.            {
  241.              bonnerep[1]++;
  242.            }
  243.           else
  244.            {
  245.              bonnerep[0]++;
  246.            }
  247.  
  248.           if (r3 == chiffreschoisis[1])//taureaux
  249.            {
  250.              bonnerep[2]++;
  251.            }
  252.           else if (r3 == chiffreschoisis[0] || r3 == chiffreschoisis[2] || r3 == chiffreschoisis[3])//vaches
  253.            {
  254.              bonnerep[1]++;
  255.            }
  256.           else
  257.            {
  258.              bonnerep[0]++;
  259.            }
  260.  
  261.           if (r2 == chiffreschoisis[2])//taureaux
  262.            {
  263.              bonnerep[2]++;
  264.            }
  265.           else if (r2 == chiffreschoisis[1] || r2 == chiffreschoisis[0] || r2 == chiffreschoisis[3])//vaches
  266.            {
  267.              bonnerep[1]++;
  268.            }
  269.           else
  270.            {
  271.              bonnerep[0]++;
  272.            }
  273.  
  274.           if (r1 == chiffreschoisis[3])//taureaux
  275.            {
  276.              bonnerep[2]++;
  277.            }
  278.           else if (r1 == chiffreschoisis[1] || r1 == chiffreschoisis[2] || r1 == chiffreschoisis[0])//vaches
  279.            {
  280.              bonnerep[1]++;
  281.            }
  282.           else
  283.            {
  284.              bonnerep[0]++;
  285.            }
  286.  
  287.           if (bonnerep[2]==4)//victoire
  288.            {
  289.              System.out.println("Victoire ! Le bon nombre était : " + chiffreschoisis[0]+
  290.                                 chiffreschoisis[1]+chiffreschoisis[2]+chiffreschoisis[3] + "\n"+
  291.                                 "Il vous a fallu " + (tours+1) + " essais.");
  292.  
  293.              game = false; //on sort de la boucle
  294.            }
  295.           else
  296.            {
  297.              System.out.println("Il y a " + bonnerep[1] + " vache(s) et " + bonnerep[2] + " taureau(x).");
  298.              tours++;
  299.            }
  300.  
  301.         }
  302.      }
  303.  
  304.   }
  305. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement