Guest User

Démineur

a guest
Dec 19th, 2014
273
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 8.06 KB | None | 0 0
  1. // Votre package
  2. package module_631;
  3.  
  4. import java.util.Scanner;
  5.  
  6. /**
  7.  * @author Reksy ||Tiago Almeida
  8.  */
  9. public class module_631 {
  10.  
  11.     /**
  12.      * @param args the command line arguments
  13.      */
  14.    
  15.    
  16.  public static final char bombe = 9;
  17.    
  18.    
  19.     public static void main(String[] args) {
  20.  
  21.         Scanner sc = new Scanner(System.in);
  22.  
  23.         //déclarationde variables
  24.        
  25.         int randLigne, randCollone, cpt;    //variables de génération du tableau
  26.         int maxLigne = 10;                  //Nombre  de lignes pour notre carte
  27.         int maxCollone = 10;                //Nombre de Collones pour notre Carte
  28.         int nbrBombes = 10;                 //Nombre de bombes dans la carte
  29.          
  30.        
  31.         // Initialisation de la matrice qui nous servira de Carte
  32.         int tableau[][] = new int[maxLigne][maxCollone];
  33.        
  34.        
  35.        
  36.   System.out.println("BIENVENU AU SUPER MINI-DEMINEUR !!!");
  37.   System.out.println();
  38.  
  39.  
  40.         //PLACEMENT DES BOMBES
  41.         cpt = 0;
  42.         while (cpt < nbrBombes) {
  43.  
  44.             //Création aléatoire de l'endroit où nous plaçons nos bombes
  45.             randLigne = (int) (Math.random() * (maxLigne));
  46.             randCollone = (int) (Math.random() * (maxCollone));
  47.  
  48.            
  49.             // Si la case ne contien pas de bombe on en met une puis on incrémente notre compteur de bombes
  50.             if (tableau[randLigne][randCollone] != bombe) {
  51.                 tableau[randLigne][randCollone] = bombe;
  52.                 cpt++;
  53.  
  54.             }
  55.         }
  56.  
  57.         //REMPLISSAGE DES INDICATEURS DE BOMBES
  58.        
  59.         //Boucle sur les lignes
  60.         for (int li = 0; li < maxLigne; li++) {
  61.            
  62.              //Boucle sur les collones
  63.             for (int col = 0; col < maxCollone; col++) {
  64.                
  65.                 //ON controle que la case ne contienne déja une bombe
  66.                 if (tableau[li][col] != bombe) {
  67.                     tableau[li][col] = remplirChamp(li, maxLigne, col, maxCollone, tableau);
  68.                 }
  69.             };
  70.         };
  71.  
  72.        
  73.        
  74.         //AFFICHAGE DU RESULTAT
  75.        
  76.         //Boucle sur les lignes
  77.         for (int li = 0; li < maxLigne; li++) {
  78.  
  79.             //Boucles sur les collones
  80.             for (int col = 0; col < maxCollone; col++) {
  81.  
  82.                 //Nous affichons un * s'il s'agit d'une bombe
  83.                 if(tableau[li][col]==bombe){
  84.                     System.out.print('*');
  85.                 }else{
  86.                     System.out.print(tableau[li][col]);
  87.                 }
  88.             };
  89.  
  90.             //Retour a la ligne lorsqu'on change de ligne
  91.             System.out.println();
  92.         };
  93.  
  94.         //Notre mini-démineur est poli
  95.         System.out.println("En vous souhaitant une bonne journée !!!");
  96.     }
  97.  
  98.    
  99.    
  100.     /*
  101.     *  Fonction qui défini le minimum entre une variable A et une variable B
  102.     * @ prend en parametre des valeurs entieres
  103.     * @ retourn la valeur plus petite
  104.     */
  105.     public static int minimum(int a, int b) {
  106.  
  107.         int min = 0;
  108.  
  109.         if (a < b) {
  110.             min = a;
  111.         } else {
  112.             min = b;
  113.         }
  114.  
  115.         // retourne la valeur la plus petite des deux valeurs entre a et b
  116.         return min;
  117.  
  118.     };
  119.  
  120.    
  121.     /*
  122.     *  Fonction qui situe puis controle si la case existe si c'est le cas on incremente une variable resultat qui retourne le nombre de bombes qui adjacente une case.
  123.     * @ prend en parametre des int et une matrice tableau
  124.     * @ retourn le nombre de bombes qui entourent la case
  125.     */
  126.     public static int remplirChamp(int ligne, int maxLigne, int collone, int maxCollone, int[][] tableau) {
  127.        
  128.  
  129.         // variables locales
  130.         int resultat = 0;
  131.         int droite, gauche, bas, haut, hautGauche, hautDroite, basGauche,basDroite;
  132.  
  133.        
  134.         // Nous situons notre case par rapport à toutes les directions, c'est à dire combien de cases il y a à gauche , droite , haut , bas etc par rapport à la matrice.
  135.         droite= calculCellules(collone + 1, maxCollone, true);
  136.         gauche = calculCellules(collone + 1, maxCollone, false);
  137.         bas = calculCellules(ligne + 1, maxLigne, true);
  138.         haut = calculCellules(ligne + 1, maxLigne, false);
  139.  
  140.         // Nous définissons le minimum entre directions pour avoir la limite de jusqu'ou on peut aller dans la direction donnée
  141.         hautGauche=minimum(haut,gauche);
  142.         hautDroite=minimum(haut,droite);
  143.         basGauche=minimum(bas,gauche);
  144.         basDroite=minimum(bas,droite);
  145.        
  146.        
  147.         //Nous controllons qu'il y aie des cases qui existent à gauche
  148.         if (gauche > 0  ) {
  149.             // Nous controlons s'il y a une bombe à gauche à l'aide de la méthode  "estAdjacentBombe"
  150.             if (estAdjacentBombe(ligne, 0, collone, -1, tableau)) {
  151.                 //Si la bombe existe nous incrémentons la valeur résultat
  152.                 resultat++;
  153.             }
  154.  
  155.         }
  156.        
  157.         //Même principe que la portion de code "Gauche"
  158.         if (droite > 0  ) {
  159.             if (estAdjacentBombe(ligne, 0, collone, 1, tableau)) {
  160.                 resultat++;
  161.             }
  162.  
  163.         }
  164.        
  165.         //Même principe que la portion de code "Gauche"
  166.         if (bas > 0  ) {
  167.             if (estAdjacentBombe(ligne, 1, collone, 0, tableau)) {
  168.                 resultat++;
  169.             }
  170.  
  171.         }
  172.        
  173.         //Même principe que la portion de code "Gauche"
  174.         if (haut > 0  ) {
  175.             if (estAdjacentBombe(ligne, -1, collone, 0, tableau)) {
  176.                 resultat++;
  177.             }
  178.  
  179.         }
  180.        
  181.         //Même principe que la portion de code "Gauche"
  182.         if (hautGauche > 0  ) {
  183.             if (estAdjacentBombe(ligne, -1, collone, -1, tableau)) {
  184.                 resultat++;
  185.             }
  186.  
  187.         }
  188.        
  189.         //Même principe que la portion de code "Gauche"
  190.         if (hautDroite > 0  ) {
  191.             if (estAdjacentBombe(ligne, -1, collone, 1, tableau)) {
  192.                 resultat++;
  193.             }
  194.  
  195.         }
  196.        
  197.         //Même principe que la portion de code "Gauche"
  198.         if (basDroite > 0  ) {
  199.             if (estAdjacentBombe(ligne, 1, collone, 1, tableau)) {
  200.                 resultat++;
  201.             }
  202.  
  203.         }
  204.        
  205.         //Même principe que la portion de code "Gauche"
  206.         if (basGauche > 0  ) {
  207.             if (estAdjacentBombe(ligne, 1, collone, -1, tableau)) {
  208.                 resultat++;
  209.             }
  210.  
  211.         }
  212.         return resultat;
  213.  
  214.     }
  215.     /*
  216.     *  Fonction qui controle si la case située a
  217.     * @ prend en parametre les coordonnées de base de la cellule, puis les coordonnées de la cellule qu'on doit controler et finalement le tableau à deux dimentions
  218.     * @ retourn un boolean qui indique si la case visée contient ou pas une bombe
  219.     */
  220.     public static boolean estAdjacentBombe(int xBase, int positionX, int yBase, int positionY, int[][] tableau) {
  221.         boolean boolAdjacent = false;
  222.  
  223.         // Nous changeons la valeur de booladjacent à true si la case visée contient une bombe
  224.             if(tableau[((int) (xBase + positionX))][(int) (yBase + positionY)]==bombe){
  225.                 boolAdjacent=true;
  226.             }
  227.            
  228.             //Nous retournons le résultat du controle
  229.         return boolAdjacent;
  230.  
  231.     }
  232.  
  233.     /*
  234.     *  Fonction qui retourne le nombre de collones ou lignes par rapport aux bords
  235.     *
  236.     */
  237.     public static int calculCellules(int currentCol, int nbrCol, boolean positif) {
  238.  
  239.        
  240.         //Initialisation de la variable local
  241.         int nbrCollones = 0;
  242.  
  243.        
  244.         // J'entends par positif la droite pour les collones  ou le bas pour les lignes
  245.         if (positif) {
  246.             nbrCollones = nbrCol - currentCol;
  247.         } else {
  248.  
  249.             nbrCollones = nbrCol - (nbrCol - currentCol);
  250.  
  251.             if (nbrCollones >= 0) {
  252.                 nbrCollones--;
  253.             }
  254.         }
  255.  
  256.         //Nous retournons notre valeur final
  257.         return nbrCollones;
  258.  
  259.     }
  260.    
  261. };
Advertisement
Add Comment
Please, Sign In to add comment