Alors en information c'est que tu as un tableau à deux dimensions de taille 5x5.
Du coup, je te conseille de modifier ta fonction bougerPiece déjà en la renommant PoserPiece et de la faire de la manière suivante :
Tout d'abord créer une classe Position ou donne lui le nom que tu veux
public class Position(){
public int i;
public int j;
Position(int x, int y) {
this.i = x;
this.j = y;
}
}
Ensuite tu peux modifier ta fonction principale pour quel sois plus lisible et claire :
System.out.println("Joueur 1, ou voulez-vous placer la 1er partie de votre croisseur (qui prend deux case): ");
Position p1 = poserPremierePiece(tab, 1);
System.out.println("ou voulez placer la 2nd partir de votre croisseur: ");
poserPiece(tab, 1, p1);
Ma proposition de fonction poserPremierePiece avec en parametre ton tableau et la valeur de la pièce (s'il y a plusieurs joueur peut être donner une valeur différente serait cool). Donc cette fonction permet de poser la premiere piece puis de retourner à quel position ça a été posé. Bien sûr, il se peut qu'une position initiale ne sois pas adapté, exemple tu poses un bateau en diagonale dans le coin supérieur gauche, donc ça condamne une case. A toi de rajouter des conditions pour que ça marche dans tous les cas.
public static Position poserPremierePiece(int[][] tab, int valeurPiece)
{
boolean isCorrect = false;
int i = -1;
int j = -1;
while(!isCorrect)
{
try{
i = Terminal.lireInt();
j = Terminal.lireInt();
if(tab[i][j] == 0)
{
correct = true;
tab[i][j] == valeurPiece;
}
} catch(TerminalException e){
Terminal.ecrireString("Vous avez tapé autre chose qu’un entier");
Terminal.ecrireStringln(" Veuillez recommencer");
} catch(ArrayIndexOutOfBoundsException e){
Terminal.ecrireString("La position i,j que vous avez choisi n'existe pas au sein du plateau");
Terminal.ecrireStringln(" Veuillez recommencer");
}
}
return Position(i,j);
}
Et enfin la fonction poserPiece qui prend en parametre ton tableau, la valeur de la pièce et la position de la pièce initiale :
public static void poserPiece(int[][] tab, int valeurPion, Position p){
boolean isCorrect = false;
int i = -1;
int j = -1;
while(!isCorrect)
{
try{
i = Terminal.lireInt();
j = Terminal.lireInt();
if(tab[i][j] == 0)
{
if(verifierProximiterPiece(p, Position(i,j))
{
tab[i][j] = valeurPion;
isCorrect = true;
} else {
Terminal.ecrireString("Votre pièce est trop éloignée !");
Terminal.ecrireStringln(" Veuillez recommencer");
}
}
} catch(TerminalException e){
Terminal.ecrireString("Vous avez tapé autre chose qu’un entier");
Terminal.ecrireStringln(" Veuillez recommencer");
} catch(ArrayIndexOutOfBoundsException e){
Terminal.ecrireString("La position i,j que vous avez choisi n'existe pas au sein du plateau");
Terminal.ecrireStringln(" Veuillez recommencer");
}
}
}
Je pense que ça peut être pas mal, tu n'es pas obligé de reprendre à 100% mon code mais voici une approche que je trouve un peu plus correcte. Et dans mon cas tu dois coder toi même la fonction verifierProximiterPiece qui prend en parametre la position initiale de ta pièce et la position de la seconde piece et renvoie true ou false.
En tout cas, je pense que ça pourra te donner pas mal d'idée. Bonne chance