Bonjour à tous,
je suis entrain de développer une petite interface graphique modélisant un jeu de plateau et je souhaite savoir s'il y a une ou des pièces sur le chemin entre deux cases (les cases sont représentées par des objets de la classe Position que voici) :
Grâce à cette classe, je souhaite savoir si une ligne entre deux cases (deux positions) est libre ou non et ceci, horizontalement, verticalement et en diagonale. Voici la fonction que je développe pour celà :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 public class Position { // La position est définie par un numéro de ligne et un de colonne private int ligne; private int colonne; public Position(int ligne, int colonne) { // Constructeur this.ligne = ligne; this.colonne = colonne; } // Retourne le numéro de ligne de la position. public int ligne() { return ligne; } // Retourne le numéro de colonne de la position. public int colonne() { return colonne; } }
plateau[][] est un plateau de pièces. La fonction ci-dessus renvoie true si la ligne est libre et false sinon.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 public boolean ligneLibre(final Position depart, final Position arrivee) { // Ligne non libre horizontalement if((depart.ligne() == arrivee.ligne())){ for(int i = Math.abs(arrivee.colonne()-depart.colonne())-(Math.abs(arrivee.colonne()-depart.colonne())-1) ; i<Math.abs(arrivee.colonne()-depart.colonne()) ; i++){ if(plateau[depart.ligne()][i] != null){ // S'il y a une pièce return false; } } } // Ligne non libre verticalement if((depart.colonne() == arrivee.colonne())){ for(int i = Math.abs(arrivee.ligne()-depart.ligne())-(Math.abs(arrivee.ligne()-depart.ligne())-1) ; i<Math.abs(arrivee.ligne()-depart.ligne()) ; i++){ if(plateau[i][depart.colonne()] != null){ // S'il y a une pièce return false; } } } // Ligne non libre en diagonale if(Math.abs(depart.ligne()-arrivee.ligne()) == Math.abs(depart.colonne()-arrivee.colonne())){ for(int i = Math.abs(arrivee.ligne()-depart.ligne())-(Math.abs(arrivee.ligne()-depart.ligne())-1) ; i<Math.abs(arrivee.ligne()-depart.ligne()) ; i++){ for(int j = Math.abs(arrivee.ligne()-depart.ligne()); j >= Math.abs(arrivee.ligne()-depart.ligne())-(Math.abs(arrivee.ligne()-depart.ligne())-1); j--){ if(plateau[i][j] != null){ // S'il y a une pièce return false; } } } } // Sinon, on retourne toujours vrai car ligne libre return true; }
Je pense avoir trouvé pour la ligne horizontale ou verticale, mais la diagonale me pose des problèmes. Si vous avez des idées, merci beaucoup !
Et si vous voyez des fautes, n'hésitez pas à me le préciser, merci.
Partager