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) :
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; } 
}
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
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; 
    }
plateau[][] est un plateau de pièces. La fonction ci-dessus renvoie true si la ligne est libre et false sinon.
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.