Vous êtes sur la page 1sur 15

Projet Java Marieme Idrissa Ba

M.Youssfi

Projet java :
Jeu MasterMind
Version 1

/1 1
5
Projet Java Marieme Idrissa Ba
M.Youssfi
ENONCE

On souhaite créer une application orientée objet java qui


permet de modéliser le jeu MasterMind. Pour simplifier le
problème nous allons faire les suppositions suivantes :

- Au lancement de l’application, le programme choisit


aléatoirement une suite de 4 nombres c1, c2, c3 et c4.
Chaque nombre est compris entre 1 et 6. Exemple
6132.
- Ensuite l’utilisateur du jeu doit deviner cette suite en
saisissant un nombre de 4 chiffres. Chaque chiffre est
compris entre 1 et 6. Exemple 2136.
- Le programme doit répondre ensuite par une
indication qui permet de faire savoir à l’utilisateur le
nombre des chiffres bien placés et le nombre des mal
placés. Dans cet exemple, le nombre des bien placés
est 2, car 1 et 3 sont bien placés, et le nombre des mal
placés est 1, car 6 figure dans la suite secrète, mais il
est mal placé.
- L’utilisateur peut reprendre la saisie 8 fois jusqu’à ce
qu’il trouve la suite secrète. C'est-à-dire le nombre des
bien placés sera 4 et le nombre de mal placés sera 0. et
dans ce cas le joueur a gagné. Si non, il peut reprendre
une nouvelle partie de 8 essais.

Pour créer cette application, vous allez faire une approche


objet. Nous vous proposons de créer les classes suivantes :
- Classe Indication.java : une indication est définie par 2
attributs à savoir nbBienPlaces et nbMalPlaces qui
sont de type int. Le constructeur reçoit deux
arguments qui permettent d’initialiser nbBienPlaces et
nbMalPlaces.

/1 2
5
Projet Java Marieme Idrissa Ba
M.Youssfi
- La seule méthode de cette classe étant la méthode
toString(), qui permet de retourner une chaîne de
caractères qui indique le nombre des bien placés et le
nombre des mal placés. Le squelette de la classe
Indication est le suivant :

public class Indication{


// Attributs à définir
public Indication(int a,int b)
{
// Initialisation
}

public String toString(){


// A définir
}
}
- Classe Suite.java : une suite est définie par 4 attributs
c1, c2, c3 et c4 qui représentent les nombres de la
suite. Pour créer une suite, nous allons définir deux
constructeurs :
o Un constructeur qui reçoit 4 argument qui
représentent les valeurs de c1, c2, c3 et c4.
o Un constructeur qui reçoit en argument un
nombre entier N de 4 chiffres. Ces 4 chiffres
représentent respectivement les valeurs de c1,
c2, c3 et c4. Exemple si N=4351 alors c1=4,
c2=3, c3=5 et c4=1.
Les méthodes de cette classe sont les suivantes :
o La méthode statique genererSecret() permet
de retourner un objet de type Suite dont les
valeurs de c1, c2, c3 et c4 sont choisis
aléatoirement en utilisant la fonction random()
de la classe Math qui retourne un nombre réel
aléatoire entre 0 et 1.

/1 3
5
Projet Java Marieme Idrissa Ba
M.Youssfi
o La méthode compare(Suite c) : permet de
retourner un objet de type Indication qui
contient le nombre des bien placés et des mal
placés en comparant la suite C à la suite
actuelle.
o La méthode toString() : retourne une chaîne
de caractères qui contient les valeurs des 4
nombres de la suite. Le squelette de la classe
Suite.java est le suivant :
public class Suite {
int c1,c2,c3,c4;

public Suite(int c1,int c2,int


c3,int c4) {
// Initialisation
}
public Suite(int n){
// A définir
}
public static Suite
genererSecret() {
// A définir
}

public Indication compare(Suite


c){
// Définir le nb_bien et
nb_mal.
return new
Indication(nb_bien,nb_mal);
}

public String toString(){


// A définir
}
}

/1 4
5
Projet Java Marieme Idrissa Ba
M.Youssfi

- Pour simplifier la saisie au clavier, vous pouvez


définir une fois pour toute la class StdInput.java qui
permet de saisir un nombre entier, un nombre de type
float, un nombre d type double ou une chaîne de
caractères. Le code java de cette classe est le suivant :
import java.io.*;
public class StdInput{
public static String readLine()
throws IOException{
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
String s=clavier.readLine();
return s;
}
public static int readInt() throws
IOException{
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
int
s=Integer.parseInt(clavier.readLine());
return s;
}
public static float readFloat()
throws IOException{
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
float
s=Float.parseFloat(clavier.readLine());
return s;
}
public static double readDouble()
throws IOException{

/1 5
5
Projet Java Marieme Idrissa Ba
M.Youssfi
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
double
s=Double.parseDouble(clavier.readLine());
return s;
}

}
- L’application principale est créée dans la classe
MasterMind.java. Cette classe contient :
o La méthode main qui permet de lancer une
boucle infinie de type :
 while(true){……}
 Dans cette boucle, nous affichons le
texte :
• Que désirez vous faire ?
o Jouer contre
l’ordinateur……1
o Quitter
……………………
…2
 Si l’utilisateur a saisi 1, on fera appel
à la méthode play() qui sera
définie,ultérieurement.
 Si l’utilisateur a saisi 2, On va quitter
l’application. System.exit(0).
o La méthode play() permet de :
 Générer une suite secrète.
 Afficher le texte
• J’ai choisi une suite de 4
nombres.
• A vous de deviner.
 Se lancer dans une boucle qui permet
de :

/1 6
5
Projet Java Marieme Idrissa Ba
M.Youssfi
• Afficher le texte « Essai
Numéro i » ; i étant
incrémenté après chaque
essai.
• Demander à l’utilisateur de
saisir un nombre de 4 chiffres
pour deviner la suite secrète.
• Comparer la suite saisie par
l’utilisateur et la suite secrète.
• Si la suite saisie est la même
que la suite secrète (Nombre
de bien placés de l’indication
est égal à 4), Afficher le
message :
o Vous avez gagné,
vous avez fait le
« Nombre » Essais :
• Si ce n’est pas le cas, Afficher
à l’utilisateur le nombre des
bien placés et le nombre des
mal placés et redemander à
l’utilisateur de saisir à
nouveau une nouvelle suite.
• Si le nombre d’essais est
égale à 8, Afficher le
message :
o Vous avez perdu,
puis afficher à
nouveau le menu
principal.
Travail à faire :
1- Créer la classe Indication.java
2- Créer la classe Suite.

/1 7
5
Projet Java Marieme Idrissa Ba
M.Youssfi
3- Tester la classe Suite avec une simple application
TestSuite.java
4- Créer la classe StdInput.java
5- Créer l’application MasterMind
6- Tester votre application.
7- Compresser toutes les classes de votre projet dans
un fichier MasterMindV1_VotreNom.jar

/1 8
5
Projet Java Marieme Idrissa Ba
M.Youssfi

IMPLEMENTATION
CLASSE MASTERMIND

package Jeu;

import java.io.IOException;

public class MasterMind {

public static void play()throws IOException


Suite s =Suite.genererSecret();
System.out.println("SLT JAI CHOISI 4 NOMBRES");
System.out.println("A VOUS DE LES DEVINER BONNE
CHANCE!! ");
int i=0;
int num;
boolean trouve=false;
while((trouve==false)&&(i!=8)){
i++;

System.out.println("essai numero "+i);

System.out.println("Veuillez saisir un
nombre de 4 chiffres");
num=StdInput.readInt();
Suite s2 =new Suite(num);
Indication I=s.compare(s2);
if(I.getNbBP()==4){
System.out.println("VOUS AVEZ GAGNE
C'EST LA BONNE COMBINAISON!! vous avez fait
"+i+"essais");
trouve=true;

/1 9
5
Projet Java Marieme Idrissa Ba
M.Youssfi

}
else

System.out.println(I.toString());

if(i==8){
System.out.println("VOUS AVEZ PERDU");
System.out.println(s.toString());
}
}
}
public static void main(String[]args)throws IOException{

while(true) {
System.out.println("Que desirez-vous faire?\n");
System.out.println("*Jouer contre lordinateur :1\n" );
System.out.println("*Quitter:2");
int reponse;
reponse= StdInput.readInt();
if(reponse==1)
play();
else
if(reponse==2)
System.exit(0);
else
System.out.println("entrer un chiffre 1 et 2");
}
}

CLASS INDICATION
package Jeu;

public class Indication {


int nbBP;
int nbMP;

/1 10
5
Projet Java Marieme Idrissa Ba
M.Youssfi
public Indication(int a,int b){
nbBP=a;
nbMP=b;

}
public String toString(){
return("le nombre de bien placés
est:"+nbBP+",le nombre de mal place est"+nbMP);
}

public int getNbBP() {


return nbBP;
}
public void setNbBP(int nbBP) {
this.nbBP = nbBP;
}
public int getNbMP() {
return nbMP;
}
public void setNbMP(int nbMP) {
this.nbMP = nbMP;
}

CLASSE StdInput

package Jeu;
import java.io.*;
public class StdInput{
public static String readLine()
throws IOException{
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
String s=clavier.readLine();
return s;
}
public static int readInt() throws
IOException{

/1 11
5
Projet Java Marieme Idrissa Ba
M.Youssfi
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
int
s=Integer.parseInt(clavier.readLine());
return s;
}

public static float readFloat() throws IOException{

BufferedReader clavier=new
BufferedReader(newInputStreamReader(System.in));
float
s=Float.parseFloat(clavier.readLine());
return s;
}
public static double readDouble()
throws IOException{
BufferedReader clavier=new
BufferedReader(new
InputStreamReader(System.in));
double
s=Double.parseDouble(clavier.readLine());
return s;
}

}
Classe Suite
package Jeu;

public class Suite {

int c1;
int c2;
int c3;
int c4;
public Suite (int c1,int c2,int c3,int c4){

/1 12
5
Projet Java Marieme Idrissa Ba
M.Youssfi
this.c1=c1;
this.c2=c2;
this.c3=c3;
this.c4=c4;

public Suite(int N){

c1=N/1000;
int reste=N%1000;
c2=reste/100;
reste=N%100;
c3=reste/10;
reste=N%10;
c4=reste;

}
public static Suite genererSecret() {

int a1=(int)(1+Math.random()*5);
int a2=(int)(1+Math.random()*5);
int a3=(int)(1+Math.random()*5);
int a4=(int)(1+Math.random()*5);

return new Suite(a1,a2,a3,a4);

public Indication compare(Suite s){


int nbP=0;
int nbM=0;

if(this.c1==s.c1)
nbP++;
else
if (this.c1==s.c2||this.c1==s.c3||
this.c1==s.c4)
nbM++;

if(this.c2==s.c2)

/1 13
5
Projet Java Marieme Idrissa Ba
M.Youssfi
nbP++;
else

if (this.c2==s.c1||this.c2==s.c3||this.c2==s.c4)
nbM++;

if(this.c3==s.c3)
nbP++;

else

if (this.c3==s.c1||this.c3==s.c2||this.c3==s.c4)

nbM++;

if(this.c4==s.c4)
nbP++;
else

if this.c4==s.c1||this.c4==s.c2||this.c4==s.c3)
nbM++;

return new Indication(nbP,nbM);


}
public String toString(){
return("la combinaison est "+c1+c2+c3+c4);
}
}

EXEMPLE EXECUTION

Que desirez-vous faire?

*Jouer contre l’ordinateur: 1

*Quitter:2

/1 14
5
Projet Java Marieme Idrissa Ba
M.Youssfi
1

SLT JAI CHOISI 4 NOMBRES


A VOUS DE LES DEVINER BONNE CHANCE!!

essai numero 1
Veuillez saisir un nombre de 4 chiffres
1432
le nombre de bien placés est:0,le nombre de
mal place est2
essai numero 2
Veuillez saisir un nombre de 4 chiffres

/1 15
5

Vous aimerez peut-être aussi