Bonjour !
Je suis en terminale S dans une spécialité Information et Sciences du Numérique (ISN) et je dois préparer un projet pour passer un oral poru le bac.
On a seulement commencé à apprendre le Java cette année, autant dire que c'est grave la galère, sachant que ce jeu doit être réalisée en Java :$ (mon jeu consiste juste à déplacer un personnage sur une grille et rencontre des monstres pour les attaquer)
J'ai pas mal taffer dessus, c'est loin d'être parfait, mais je rencontre un bug lorsque j'associe les déplacements aux combats.
Les déplacement Haut et Bas fonctionnent très très bien avec les attaques, mais lorsque j'essaye les deplacements Gauches et Droites, un message d'erreur s'affiche :
"Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10
at Grille.deplacerD(Grille.java:243)
(ou at Grille.deplacerG)
at Main.main(Main.java:48)"
J'ai fais quelques recherches pour résoudre ça mais rien n'y fais, je n'arrive pas à débloqué ! Pourtant, avant ces déplacements marchaient très bien..
Merci d'avance pour vos réponses !
Je vous envoie mon programme Grille (si vous avez besoin des parties Main, Personnage et monstre, je vous les enverrais aussi)
import java.util.*;
public class Grille {
// Attributs
private int nbLig;
private int nbCol;
private char [][] grille;
// Constructeurs
public Grille(int n, int p){
nbLig = n;
nbCol = p;
grille = new char[nbLig][nbCol];
/* i++ : augmenter la valeur de un à chaque fois (i+1)*/
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
grille[i][j] = '-';
}
}
}
// Acesseurs
public char getCase(int l, int c){
return grille[l-1][c-1];
}
//Methodes
public void afficher(){
System.out.println();
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
System.out.print(" | " + grille[i][j]);
}
System.out.println(" | " );
}
System.out.println();
}
// Placer
public void placer(int l, int c, char t){ /* placer(ligne, colonne, type) */
l = l-1;
c = c-1;
if (l<0 || c<0 || l>nbLig || c>nbCol){
System.out.print("Erreur de déplacement !" );
return;
}
grille[l][c] = t;
}
Personnage p1 = new Personnage();
Monstre m1 = new Monstre();
public int Combat(){
System.out.println("Début du combat..." );
if(p1.getvie() > 0 && m1.getvie() > 0){
System.out.println("\nVoulez-vous attaquez ? \n1: Oui \n2: Non" );
Scanner sc2 = new Scanner(System.in);
int nb = sc2.nextInt();
switch (nb){
case 1 : System.out.println("\nVous lancez une attaque !" );
m1.setvie(m1.getvie() - p1.attaquer());
System.out.println();
System.out.println("Caractéristiques de l'adversaire : " + m1.tostring());
System.out.println();
System.out.println("Vous êtes attaqué !" );
System.out.println();
p1.settvie(p1.getvie() - m1.attaquer()) ;
System.out.println("Vos caractéristiques : " + p1.tostring());
afficher();
break;
case 2 : System.out.println("Fuite.. Pas de dégâts infligés." );
afficher();
}}
else{ System.out.println("\nFin du Combat... " );
if(p1.getvie() <= 0 && m1.getvie() > 0){
System.out.println("\nFin du Combat... " );
System.out.print("Vous avez perdu. Fin du jeu." ); }
if(p1.getvie() >0 && m1.getvie() < 0){
char tmp;
System.out.println("\nFin du Combat... " );
System.out.print("Vous avez gagné !" );
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
if(grille[i][j] == 'J'){
if(i+1 <= nbLig && grille[i+1][j] == 'M'){
tmp = grille[i][j];
grille[i][j] = '-';
grille[i+1][j] = tmp;
return 1;
}}
if(grille[i][j] == 'J'){
if(i-1 >= 0 && grille[i-1][j] == 'M'){
tmp = grille[i][j];
grille[i][j] = '-';
grille[i-1][j] = tmp;
return 1;
}}
if(grille[i][j] == 'J'){
if(j+1 <= nbCol && grille[i][j+1] == 'M'){
tmp = grille[i][j];
grille[i][j] = '-';
grille[i][j+1] = tmp;
return 1;
}}
if(grille[i][j] == 'J'){
if(j-1 >= 0 && grille[i][j-1] == 'M'){
tmp = grille[i][j];
grille[i][j] = '-';
grille[i][j-1] = tmp;
return 1;
}}
}}
}
}
return 0; }
public int deplacerH(){ /* deplacerH = deplacer vers le haut le personnage */
char tmp;
/*i++ * augmenter la valeur de un à chaque fois (i+1)*/
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
if(grille[i][j] == 'J'){ //On cherche le joueur
if(i-1 >= 0 && grille[i-1][j] == '-'){ //On teste la position
tmp = grille[i][j]; //On copie le perso
grille[i][j] = '-'; //On vide la case
grille[i-1][j] = tmp; //Et on deplace le perso
return 1;
}}
//S'il y a un monstre
while(i-1 >= 0 && grille[i-1][j] == 'M'){
Combat();
}
}
}
return 0; }
public int deplacerB(){
char tmp; //variable temporaire//
/* i++ : augmenter la valeur de un à chaque fois (i+1)*/
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
if(grille[i][j] == 'J'){ //On cherche le joueur
if(i+1 <= nbLig && grille[i+1][j] == '-'){ //On teste la position
tmp = grille[i][j]; //On copie le perso
grille[i][j] = '-'; //On vide la case
grille[i+1][j] = tmp; //Et on deplace le perso
return 1;
}}
//S'il y a un monstre
while(i+1 <= nbLig && grille[i+1][j] == 'M'){
Combat();
}
}
}
return 0; }
public int deplacerD(){
char tmp; //variable temporaire//
/* i++ : augmenter la valeur de un à chaque fois (i+1)*/
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
if(grille[i][j] == 'J'){ //On cherche le joueur
if(j+1 <= nbCol && grille[i][j+1] == '-'){ //On teste la position
tmp = grille[i][j]; //On copie le perso
grille[i][j] = '-'; //On vide la case
grille[i][j+1] = tmp; //Et on deplace le perso
return 1; }}
//S'il y a un monstre
while(j+1 <= nbCol && grille[i][j+1] == 'M'){
Combat(); }
}
}
return 0; }
public int deplacerG(){ /* deplacerH = deplacer vers le haut le personnage */
char tmp; //variable temporaire//
/* i++ : augmenter la valeur de un à chaque fois (i+1)*/
for(int i=0; i<nbLig; i++){
for(int j=0; j<nbCol; j++){
if(grille[i][j] == 'J'){ //On cherche le joueur
if(j-1 >= 0 && grille[i][j-1] == '-'){ //On teste la position
tmp = grille[i][j]; //On copie le perso
grille[i][j] = '-'; //On vide la case
grille[i][j-1] = tmp; //Et on deplace le perso
return 1; }}
//S'il y a un monstre
while(i-1 >= 0 && grille[i][j-1] == 'M'){
Combat();
}
}
}
return 0; }
}