Bonjour,

Je souhaite développer un jeu tel que :

  • Il y a deux joueurs et l'un deux doit capturer les billes de l'autre.
  • Il y a une méthode distribue_bille() qui permet au joueur de distribuer les billes et donc de se déplacer.
  • Il y a aussi une méthode capture_bille() qui permet de capturer les billes de l'autre.


Le problème est que le Joueur arrive à distribuer les billes mais n'arrive pas à capturer les billes.

Dans la méthode capture_bille() quand je place System.out.println("9") avant if((Joueur2.cas[23-numero_case].nombre_bille!=0)&&(Joueur2.cas[numero_case-8].nombre_bille!=0)), 9 est affiché. Par contre, si je mets System.out.println("9") après if((Joueur2.cas[23-numero_case].nombre_bille!=0)&&(Joueur2.cas[numero_case-8].nombre_bille!=0)), 9 n'est pas affiché.

Comme si le problème résidait dans le if((Joueur2.cas[23-numero_case].nombre_bille!=0)&&(Joueur2.cas[numero_case-8].nombre_bille!=0))

Voici l'erreur que j'obtiens :
Exception in thread "main" java.lang.NullPointerException
at Joueur1.capture_bille(Joueur1.java:197)
at Joueur1.distribue_bille(Joueur1.java:178)
at Joueur1.distribue_bille(Joueur1.java:171)
at Joueur1.distribue_bille(Joueur1.java:171)
at Jeu.lance_jeu(Jeu.java:27)
at Jeu.main(Jeu.java:113)
Voici mon code
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
void capture_bille() {
    if ((8 <= numero_case) && (numero_case <= 15)) {
        // System.out.println("9");
        if ((Joueur2.cas[23 - numero_case].nombre_bille != 0) && (Joueur2.cas[numero_case - 8].nombre_bille != 0)) {
        //System.out.println("9");
            nombre_bille = Joueur2.cas[23 - numero_case].nombre_bille + Joueur2.cas[numero_case - 8].nombre_bille;
            System.out.print(nombre_bille);
            Joueur2.cas[23 - numero_case].nombre_bille = 0;
            Joueur2.cas[numero_case - 8].nombre_bille = 0;
 
            if (compteur != 0) {
                Bille case_vide = getcase_vide();
                numero_case = case_vide.getnumero_case();
 
                distribue_bille();
            } else {
                numero_case = temp;
                distribue_bille();
            }
 
        }
    }
}
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
33
34
35
36
37
38
39
40
41
 
      void distribue_bille(){
 if ((0 <= numero_case) && (numero_case < 16)) {
 
        nombre_bille = cas[numero_case].nombre_bille;
 
        for (int i = numero_case + 1; i < numero_case + nombre_bille; i++) {
            cas[i].nombre_bille = cas[i].getnombre_bille() + 1;
        }
 
        cas[numero_case].nombre_bille = 0;
 
        if (cas[numero_case + nombre_bille].nombre_bille == 0) {
 
            cas[numero_case + nombre_bille + 1].nombre_bille = cas[numero_case + nombre_bille + 1].getnombre_bille() + 1;
 
            System.out.println("Le Joueur1 a fait Mador");
 
        } else {
 
            System.out.println("distribue");
 
            cas[numero_case + nombre_bille].nombre_bille = cas[numero_case + nombre_bille].getnombre_bille() + 1;
            numero_case = numero_case + nombre_bille;
 
            if ((0 <= numero_case) && (numero_case <= 8)) {
 
                distribue_bille();
                cas[numero_case].nombre_bille = 0;
 
            } else {
                if (numero_case >= 8) {
 
                    temp = numero_case;
                    capture_bille();
 
                    System.out.println("capture");
                }
            }
        }
    }
Quelqu'un saurait-il m'indiquer comment résoudre ce problème ?

Merci d'avance pour votre aide.