[Java] Jeu des allumettes

Fratellis10

고수
Bonsoir tout le monde,
Après avoir pas mal codé en C, C++ j'ai décidé de me mettre en Java afin de me préparer pour mes études supérieures (ipl).
Histoire de revoir les bases du Java (conditions, boucles,...)
J'ai décidé de programmer un petit jeu des allumettes.
SI vous voyez, genre celui au fort boyard dont le but est de laisser l'adversaire tirer la dernière allumette. Enfin voici mon code, tout marche sauf lorsque je veux recommencer une partie, il me semble que c'est un problème du aux initialisations des variables mais je saisis pas trop: enfin, un code vaut mieux qu'un long discours donc:

PHP:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int nbreInitialallumettes = 20; // Debut d'initialisation des variables
        int nbreAllumettes = 0;
        int determinerJoueur = 0;
        char reponse = ' ';
        String joueur = new String();  // Fin d'initialisation des variables
        
        System.out.println("Le nombre initial d'allumettes est de "+ nbreInitialallumettes +"!");
        System.out.println("Le but du jeu est tout simple, vous devez enlever 1, 2 ou 3 allumettes par tour!");
        System.out.println("Le joueur prenant la dernière allumette perdra la partie!");
        System.out.println("--------------------------------------------------------------------------------");
        do{ // Tant que l'utilisateur envoie le char 'O', on exécute cette boucle
            do{ // Tant que le nbre d'allumettes est > que O on exécute cette boucle
                if (determinerJoueur % 2 == 0 || determinerJoueur == 0) // Permet de switcher les joueurs
                    joueur = "Joueur 1";
                else
                    joueur = "Joueur 2";
                determinerJoueur++;
                
                System.out.println(joueur+" combien d'allumettes souhaitez vous retirer?");
                Scanner sc = new Scanner(System.in);
                int nbreaenlever = sc.nextInt(); 
                
                if (nbreaenlever > 3 || nbreaenlever < 1)
                {
                    nbreaenlever = 0;
                    System.out.println("Impossible d'éffectuer cette opération (le nombre d'allumettes à enlever est erroné)");
                    System.out.println(joueur+" passe son tour!");
                }
                if (determinerJoueur == 1) // L'incrementation a déjà eu lieu ci-dessus donc la variable vaut 1 au départ
                {
                    nbreAllumettes = nbreInitialallumettes - nbreaenlever;
                }
                if (determinerJoueur > 1)
                {
                    nbreAllumettes = nbreAllumettes - nbreaenlever;
                }
                System.out.println("Il reste donc "+nbreAllumettes+" allumettes!");
                System.out.println("--------------------------------------------");

            }while(nbreAllumettes > 0);
            if (joueur == "Joueur 1" )
                joueur = "Joueur 2";
            else
                joueur = "Joueur 1";
            System.out.println(joueur+" a gagné la partie!");
            System.out.println("--------------------------");
            System.out.println("Voulez vous rejouer? (O/N)");
            Scanner sc = new Scanner(System.in);
            String str = sc.nextLine();
            reponse = str.charAt(0);

        }while(reponse == 'O');
        System.out.println("Au revoir!");
    }
}
>>> j'avoue mon code peut parraitre bizarre surtout hors de la boucle à la fin mais ce sont des contraintes que je me suis imposé afin de développer ma logique (un simple X a perdu au lieu de gagné par exemple :p)
 

pixandco

Say hello
Mes connaissances sont plus que basiques, mais pourquoi t as un do ?

Pourquoi tu mets pas un for( int i = 0; i < nombreAlumettes; i++) a la place ?
 
1er
OP
Fratellis10

Fratellis10

고수
Plus par habitude, mais c'est sur que ça aurait été aussi bon ;) Au final ça revient exactement au même.
Puis un autre avantage de la boucle do... while, c'est qu'elle s'exécute au moins une fois.
 
K

klinkcha

ex membre
salut

ça doit tourner comme ça


import java.util.Scanner;

public class Main {
public static void main(String[] args) {
int nbreInitialallumettes = 20; // Debut d'initialisation des variables
int nbreAllumettes = 0;
int determinerJoueur = 0;
char reponse = ' ';
String joueur = new String(); // Fin d'initialisation des variables

System.out.println("Le nombre initial d'allumettes est de "+ nbreInitialallumettes +"!");
System.out.println("Le but du jeu est tout simple, vous devez enlever 1, 2 ou 3 allumettes par tour!");
System.out.println("Le joueur prenant la dernière allumette perdra la partie!");
System.out.println("--------------------------------------------------------------------------------");
Scanner sc = new Scanner(System.in);//vaut mieux qu'elle soit dehors
int nbreaenlever;
do{ // Tant que l'utilisateur envoie le char 'O', on exécute cette boucle
do{ // Tant que le nbre d'allumettes est > que O on exécute cette boucle
if (determinerJoueur % 2 == 0 || determinerJoueur == 0) // Permet de switcher les joueurs
joueur = "Joueur 1";
else
joueur = "Joueur 2";
determinerJoueur++;

System.out.println(joueur+" combien d'allumettes souhaitez vous retirer?");
nbreaenlever = sc.nextInt();

if (nbreaenlever > 3 || nbreaenlever < 1)
{
nbreaenlever = 0;
System.out.println("Impossible d'éffectuer cette opération (le nombre d'allumettes à enlever est erroné)");
System.out.println(joueur+" passe son tour!");
}
if (determinerJoueur == 1) // L'incrementation a déjà eu lieu ci-dessus donc la variable vaut 1 au départ
{
nbreAllumettes = nbreInitialallumettes - nbreaenlever;
}
if (determinerJoueur > 1)
{
nbreAllumettes = nbreAllumettes - nbreaenlever;
}
System.out.println("Il reste donc "+nbreAllumettes+" allumettes!");
System.out.println("--------------------------------------------");

}while(nbreAllumettes > 0);
if (joueur.equalsIgnoreCase("Joueur 1") )
joueur = "Joueur 2";
else
joueur = "Joueur 1";
System.out.println(joueur+" a gagné la partie!");
System.out.println("--------------------------");
System.out.println("Voulez vous rejouer? (O/N)");
//Scanner sc = new Scanner(System.in);
String str = sc.next();
reponse = str.charAt(0);
if(reponse=='o'|reponse=='O'){
determinerJoueur = 0;
nbreAllumettes = 0;


}

}while(reponse == 'O'|reponse == 'o');
System.out.println("Au revoir!");
}
}
 
K

klinkcha

ex membre
PHP:
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        int nbreInitialallumettes = 20; // Debut d'initialisation des variables
        int nbreAllumettes = 0;
        int determinerJoueur = 0;
        char reponse = ' ';
        String joueur = new String();  // Fin d'initialisation des variables
        
        System.out.println("Le nombre initial d'allumettes est de "+ nbreInitialallumettes +"!");
        System.out.println("Le but du jeu est tout simple, vous devez enlever 1, 2 ou 3 allumettes par tour!");
        System.out.println("Le joueur prenant la dernière allumette perdra la partie!");
        System.out.println("--------------------------------------------------------------------------------");
        Scanner sc = new Scanner(System.in);//vaut mieux qu'elle soit dehors
        int nbreaenlever;
        do{ // Tant que l'utilisateur envoie le char 'O', on exécute cette boucle
            do{ // Tant que le nbre d'allumettes est > que O on exécute cette boucle
                if (determinerJoueur % 2 == 0 || determinerJoueur == 0) // Permet de switcher les joueurs
                    joueur = "Joueur 1";
                else
                    joueur = "Joueur 2";
                determinerJoueur++;
                
                System.out.println(joueur+" combien d'allumettes souhaitez vous retirer?");                
                nbreaenlever = sc.nextInt(); 
                
                if (nbreaenlever > 3 || nbreaenlever < 1)
                {
                    nbreaenlever = 0;
                    System.out.println("Impossible d'éffectuer cette opération (le nombre d'allumettes à enlever est erroné)");
                    System.out.println(joueur+" passe son tour!");
                }
                if (determinerJoueur == 1) // L'incrementation a déjà eu lieu ci-dessus donc la variable vaut 1 au départ
                {
                    nbreAllumettes = nbreInitialallumettes - nbreaenlever;
                }
                if (determinerJoueur > 1)
                {
                    nbreAllumettes = nbreAllumettes - nbreaenlever;
                }
                System.out.println("Il reste donc "+nbreAllumettes+" allumettes!");
                System.out.println("--------------------------------------------");

            }while(nbreAllumettes > 0);
            if (joueur.equalsIgnoreCase("Joueur 1") )
                joueur = "Joueur 2";
            else
                joueur = "Joueur 1";
            System.out.println(joueur+" a gagné la partie!");
            System.out.println("--------------------------");
            System.out.println("Voulez vous rejouer? (O/N)");
            //Scanner sc = new Scanner(System.in);
            String str = sc.next();
            reponse = str.charAt(0);
            if(reponse=='o'|reponse=='O'){
                determinerJoueur = 0;
                nbreAllumettes = 0;
               

            }

        }while(reponse == 'O'|reponse == 'o');
        System.out.println("Au revoir!");
    }
}
 
K

klinkcha

ex membre
c beaucoup mieux..
 
1er
OP
Fratellis10

Fratellis10

고수
Ca marche nickel, merci klinchka ;)
 
K

klinkcha

ex membre
bonne continuation.. :°)
 
1er
OP
Fratellis10

Fratellis10

고수
Merci ;) Prochaine étape, coder tout ceci avec une interface graphique
 
L

lamia2012

ex membre
salut.j'ai unn tp sur le jeu d'allummetes en appliqant l'algorithme minmax .si qulqu'un m'aider svp.je suis null sur ce tp.comment traduire ce tp en minmax en java.
 

Skarbone

Le méchant Ω
minmax c'est pas le truc qui permet au premier joueur d'être certain de gagner?

Si oui, pour le jeu de fort boyard, c'est pas très compliqué: il faut toujours laisser a l'adversaire un nombre d'allumette qui n'est PAS multiple de 4.
 

Skarbone

Le méchant Ω
(sinon pour le premier code j'ai pas tout lu, mais tu devrais gérer les exception, si je met une lettre au lieu d'un chiffre, ton programme plante complètement :d)

(sinon la deuxieme condition du premier IF est inutile (0%0 = 0 de toute manière :))



(JE SAIS c'est vieux comme post et il a surement la solution depuis :D)
 

SkYlEsS

Elite
Mais tu te trompes sur le minimax ;)
 
L

lamia2012

ex membre
j'ai pas bien compris vous réponses
.je doit faire ce jeu par minmax mais je ne c'est pas comment commencé.
 
L

lamia2012

ex membre
si vous avez des solution aide moi svp.
 
L

lamia2012

ex membre
ah.ok.merci
 
L

lamia2012

ex membre
bonjour;
pour le tp sur les allumettes; je dois insérer des images d'allumettes dans mon interface java.j'essaye de chercher sur google j'ai pas trouver des tuto bien m'aides.j'ai trouve seulement comment insérer une image de fond .
plus de ça je dois utiliser l'écouteur de mouse pour des que je clique sur mon images elle disparaitre.
si quelqu'un a une idée ; aide moi.
merci
 

Skarbone

Le méchant Ω
avec netbeans c'est super simple, tu fous un jlabel et tu choisi son Icon :)
 
L

lamia2012

ex membre
j'ai pas travaille avec netbeans et je le connais pas beaucoup.si il y a des solutions sur eclipse aidez moi.puisque j'ai déjà commencer avec eclipse.
merci
 
Haut