import java.util.Scanner; class Recouvrement { private static Scanner scanner = new Scanner(System.in); public static void main(String[] args) { boolean [][] grille = new boolean [10][10]; initGrille(grille); ajouterElements(grille); System.out.println("\nMerci d'avoir joué!"); } /** * Essaie de remplir la grille avec un objet de longueur donnée * dans une direction donnée en partant des coordonnées * (targetRow, targetCol). * @param grille * @param targetRow * @param targetCol * @param direction * @param longueur * @return true si le placement est réussi et false sinon */ static boolean remplitGrille(boolean [][] grille, int targetRow, int targetCol, char direction, int longueur) { int deltaRow = 0, deltaCol = 0; int dim = grille.length; // On calcule ici la direction dans laquelle aller depuis // les coordonnées indiquées par l'utilisateur. // Ex: pour aller au nord, il faut monter d'une // ligne en restant sur la // même colonne. switch (direction) { case 'N': deltaRow = -1; deltaCol = 0; break; case 'S': deltaRow = 1; deltaCol = 0; break; case 'E': deltaRow = 0; deltaCol = 1; break; case 'O': deltaRow = 0; deltaCol = -1; break; } // On se place sur la case de départ int tempRow = targetRow; int tempCol = targetCol; // Est-il possible de placer l'élément ? boolean possible = true; // Avant de modifier la grille il faut vérifier s'il est // possible de mettre tout l'objet for (int i = 0; (i < longueur && possible); i++) { if ((tempRow < 0) || (tempRow >= dim)) { possible = false; } else if ((tempCol < 0) || (tempCol >= dim)) { possible = false; } else if (grille [tempRow][tempCol]) { possible = false; } // On se déplace sur la case suivante tempRow += deltaRow; tempCol += deltaCol; } // Le placement est possible, et on peut donc mettre // à jour la grille if (possible) { tempRow = targetRow; tempCol = targetCol; for (int i = 0; i < longueur; i++) { grille [tempRow][tempCol] = true; tempRow += deltaRow; tempCol += deltaCol; } } return possible; } /** * Initialise toutes les cases de la grille à false * @param grille */ static void initGrille(boolean[][] grille) { int dim = grille.length; for (int row = 0; row < dim; row++) { for (int col = 0; col < dim; col++) { grille[row][col] = false; } } } /** * Permet à l'utilisateur de demander le placement d'objets * sur la grille. * @param grille */ static void ajouterElements(boolean[][] grille) { int col, row; char dir; int length; System.out.print("Entrez la taille " + "(négative pour arrêter le programme): "); length = scanner.nextInt(); // L'utilisateur signifie qu'il veut arrêter // d'introduire des objets en spécifiant une //longueur négative while (length >= 0) { do { System.out.print("Entrez coord. x : "); col = scanner.nextInt(); } while ((col < 0) || (col >= grille.length)); do { System.out.print("Entrez coord. y : "); row = scanner.nextInt(); } while ((row < 0) ||(row >= grille.length)); do { System.out.print("Entrez direction (N,S,E,O) : "); dir = scanner.next().charAt(0); } while ((dir != 'N') && (dir != 'S') && (dir != 'E') && (dir != 'O')); System.out.print("Placement en (" + col + "," + row + ") direction " + dir + " longueur " + length + " -> "); if (remplitGrille(grille, col, row, dir, length)) { System.out.println("Succès"); afficheGrille(grille); } else { System.out.println("Echec"); } System.out.println(); System.out.print("Entrez la taille " + "(négative pour arrêter le programme): "); length = scanner.nextInt(); } } /** * Affichage de la grille * @param grille */ static void afficheGrille(boolean[][] grille) { int dim = grille.length; for (int row = 0; row < dim; row++) { for (int col = 0; col < dim; col++) { if (grille[row][col]) System.out.print("#"); else System.out.print("."); } System.out.println(); } } }
Pages: 1 2