/** * Retourne les cases où l'on peut deplacer le personnage selectionné * * @param p personnage selectionné * @return les cases où l'on peut deplacer le personnage selectionné */ public ArrayList<int[]> VoisinageCaseDeplacement(Personnage p) { boolean[] obstacle = {false, false, false, false, false, false, false, false}; ArrayList<int[]> voisinage = new ArrayList<int[]>(); int x = p.getPosition()[0]; int y = p.getPosition()[1]; int pm = p.getPointMouvement(); int pmd = p.getPointMouvementDiagonale(); for (int i = 1; i <= pm; i++) { if (x - i >= 0) { int[] positionCaseSelectionné = {x - i, y}; if (!obstacle[0] && !this.getCase(positionCaseSelectionné).estVide()) obstacle[0] = true; else if (!obstacle[0] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); else if (p.getSaitVoler() && obstacle[0] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); } if (x + i < TaillePlateauX) { int[] positionCaseSelectionné = {x + i, y}; if (!obstacle[1] && !this.getCase(positionCaseSelectionné).estVide()) obstacle[1] = true; else if (!obstacle[1] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); else if (p.getSaitVoler() && obstacle[1] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); } if (y - i >= 0) { int[] positionCaseSelectionné = {x, y - i}; if (!obstacle[2] && !this.getCase(positionCaseSelectionné).estVide()) obstacle[2] = true; else if (!obstacle[2] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); else if (p.getSaitVoler() && obstacle[2] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); } if (y + i < TaillePlateauY) { int[] positionCaseSelectionné = {x, y + i}; if (!obstacle[3] && !this.getCase(positionCaseSelectionné).estVide()) obstacle[3] = true; else if (!obstacle[3] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); else if (p.getSaitVoler() && obstacle[3] && this.getCase(positionCaseSelectionné).estVide()) voisinage.add(positionCaseSelectionné); } } if (pmd != 0) { for (int i = 1; i <= pmd; i++) { int[] positionCaseSelectionné0 = {x - i, y - i}; int[] positionCaseSelectionné1 = {x - i, y + i}; int[] positionCaseSelectionné2 = {x + i, y + i}; int[] positionCaseSelectionné3 = {x + i, y - i}; if (x - i >= 0 && y - i >= 0) { if (!obstacle[4] && this.getCase(positionCaseSelectionné0).estVide()) voisinage.add(positionCaseSelectionné0); else if (!obstacle[4] && !this.getCase(positionCaseSelectionné0).estVide()) obstacle[4] = true; else if (obstacle[4] && p.getSaitVoler() && this.getCase(positionCaseSelectionné0).estVide()) voisinage.add(positionCaseSelectionné0); } if (x - i >= 0 && y + i < TaillePlateauY) { if (!obstacle[5] && this.getCase(positionCaseSelectionné1).estVide()) voisinage.add(positionCaseSelectionné1); else if (!obstacle[5] && !this.getCase(positionCaseSelectionné1).estVide()) obstacle[5] = true; else if (obstacle[5] && p.getSaitVoler() && this.getCase(positionCaseSelectionné1).estVide()) voisinage.add(positionCaseSelectionné1); } if (x + i < TaillePlateauX && y + i < TaillePlateauY) { if (!obstacle[6] && this.getCase(positionCaseSelectionné2).estVide()) voisinage.add(positionCaseSelectionné2); else if (!obstacle[6] && !this.getCase(positionCaseSelectionné2).estVide()) obstacle[6] = true; else if (obstacle[6] && p.getSaitVoler() && this.getCase(positionCaseSelectionné2).estVide()) voisinage.add(positionCaseSelectionné2); } if (x + i < TaillePlateauX && y - i >= 0) { if (!obstacle[7] && this.getCase(positionCaseSelectionné3).estVide()) voisinage.add(positionCaseSelectionné3); else if (!obstacle[7] && !this.getCase(positionCaseSelectionné3).estVide()) obstacle[7] = true; else if (obstacle[7] && p.getSaitVoler() && this.getCase(positionCaseSelectionné3).estVide()) voisinage.add(positionCaseSelectionné3); } } } return voisinage; }