Carnet de bord
Vendredi 05 Décembre :
Nous avons réfléchis sur l’allure générale de notre programme , ce que l’utilisateur verra. Nous sommes partis sur l’idée d’une fenêtre rectangulaire nous n’avons pas trouvé la taille idéale nous y re réfléchirons le vendredi suivant. Nous avons fait la légende des balles :
-La balle rouge : la couleur n’y est pas .
- La balle noir : la couleur y est mais mal placée
- La balle blanche : la couleur y est et est bien placée
Puis nous avons choisis le nombre de balle de différentes couleur que pourra choisir l’utilisateur . Nous avons choisis 6 couleurs différentes.
Parmi toutes ces balles de différentes couleurs l’utilisateur en choisie 5 et il peut mettre plusieurs fois la même . On s’est demandée combien d’essais étaient nécessaire pour que le jeu soit ni impossible ni trop facile . On a choisis comme base de départ 10 essais . Puis pour voir la faisabilité du jeu nous l’avons testé sur une feuille de papier.
En essayant de faire le jeu avec les règles que nous avions établie de nouveaux problèmes se sont posés a nous .
Comme la balle d’une même couleur pouvait être à deux endroits différents, si l’ordi a choisi un ensemble de couleur dont la couleur choisi en double par l’utilisateur y est une fois, alors la couleur y était mais n’y était pas à la fois, ce qui est contradictoire. Cela remet donc en question notre légende de départ concernant les balles.
On s’est demandé si on devait ajouter une balle de légende qui serait « la balle y est une fois mais pas plusieurs fois » or cela changeait le jeu Mastermind. Il y a donc quelque chose dans notre règle qui fait que ça ne marche pas.
Nous avons donc pour objectif la prochaine fois de trouver une solution au problème.
Allure provisoire :
Vendredi 19 décembre 2014 :
Nous avons réduis le nombre de balles que l'utilisateur doit choisir à 4 . Nous avons augmenté le nombre de couleurs possible à 8.
- 0 36 255 //bleu foncé
- 250 255 0 // jaune
- 0 227 255 // bleu clair
- 14 224 39 //vert
- 255 0 0 //rouge
- 255 15 228 //rose
- 102 10 142 //violet
- 255 166 0//orange
Nous avons ensuite trouvé la solution au probléme de la semaine derniére : -une boule noire signifie que la balle est mal placée mais que la couleur est présente.
-une boule blanche signifie que la balle est bien placée.
- 0 0 0//noir
- 255 255 255 //blanc
Nous avons aussi mis à jour le carnet de bord.
Mardi 30 Décembre 2014:
Nous avons fais notre site web ensemble . Malheureusement ce n'etait pas ce que nous attendions ! Nous avons donc passé beaucoup de temps à essayer d'enlever un fond sur un théme .Mais ce site ne permet pas de changer un fond facilement . Finalement nous avons changé de théme .
Ensuite nous avons commencé la trace écrite de ce que nous voulions que notre programme fasse . Nous publierons la trace écrite quand elle sera finis entiérement car beaucoup d'éléments restent flous .
Vendredi 09 Janvier 2015:
Nous avons commencé l'interface graphique avec GUI builder. Nous avons crée un bouton " valider " pour que l'utilisateur puisse valider son choix . En allant dans le GUI on a modifier la taille de l'interface et sa couleur . Nous avons aussi mis un label servant de titre . Voici l'apperçu de l'interface pour l'interface actuelle:
Nous avons ensuite réflechis a comment faire valider une par une ces couleurs à l'utilisateur . Nous avons penser a mettre sous chaque boules une bouton tournant à 10 positions qui ferait varier la couleurs de la boule . Nous essairons cette solution au prochain cour . Voici le code du sketch puis du BuI que vous pouvez aussi voir dans la partie " Etat du code " .
Sketch code :
Dimanche 11 Janvier 2015:
Nous avons fait un récapitulatif déroulant de comment doit s'organiser notre code . Il y aura une partie graphique , et une pour le coeur du jeu.
Voici le récapitulatif de ce que doit faire le code ( or interface graphique ) :
1/ Distribution aléatoire ( combinaison) pour l'IA ( combinaison qui sera caché )
2/ Le jeu démarre ( joueur choisit )
3/ IA indique :
- nombre de bonne couleurs bien placées
- nombre de bonne couleurs bien placées
ex :
break = fin du jeu
combJ = combinaison joueur
combC = combinaison IA
1 = il reste des tours
2= le joueur n'a pas trouvé
* si combJ == combC alors ( break )
* tant que ( 1&&2 ) ( not break)
4/ Si le joueur n'a pas trouvé a la fin = perdu sinon = gagne
Il faut maintenant qu'on réussisse à mettre tout cela sous forme . Le 1 er probléme pour le coeur du jeu auquel nous avons a faire est la distribution aléatoire des balles pour l'IA.
Nous pensons qu'il faudra d'abord créer une liste de boule de differentes couleurs dans laquelle l'IA en piochera aléatoirement .
- list = newList ;
Vendredi 16 Janvier 2015:
Grâce à GUI Builder, nous avons créer huit boutons sur lesquels nous avons inscrit la couleur correspondante. Nous nous sommes alors demandées comment faire pour faire apparaitre une balle lorsqu'on clique sur un bouton, puis comment faire pour que la balle soit de la couleur correspondante.
Dans un premier temps nous avons déclarer les variables x et y, ensuite nous avons rajouter la méthode fill (couleur()), puis ellipse (x,y,30,30) et enfin x=x+30. Ainsi lorsque nous cliquons sur un bouton la balle s'affiche, et si nous recliquons sur le même bouton ou un autre, une balle s'affiche à côté de la première et ainsi de suite.
Voici à quoi ressemble notre interface graphique pour le moment:
Vendredi 23 janvier 2015:
Dans un premier temps, nous avons associé chaque couleur choisie à tout les boutons correspondants avec la méthode fill et ellipse. Dans un second temps nous avons cherchés à faire afficher les quatre balles les unes à la suite des autres, puis lorsque l'on clique sur la touche " Valider ! " faire afficher quatre autres balles en dessous des précédentes. Nous avons donc rajouter les lignes de codes qui suivent sous le println associé au bouton valider :
y=y+50;
x=50;
Vendredi 30 janvier 2015:
Nous nous sommes intéressées à la partie de l'IA. Nous avons donc commencés par tenter de comprendre le code de mastermind que le professeur nous a envoyé. Le code étant divisé en trois parties, la création aléatoire de la combinaison secrète, le void keyPressed() et le void submit(). Nous nous sommes penchées sur la création aléatoire de la combinaison, et avons modifiés le code qui nous servait d'exemple afin qu'il soit adapté à notre projet.
Voici le code en question :
/* Transposition sur Processing du mastermind simplifié de Javascool. A TERMINER*/
int combinaisonMystere []={0,0,0,0};
int combiSaisie []={0,0,0,0};
boolean victoire = false;
int i;
int x=0;
int y=0;
int keyIndex = 0;
int keynom =0;
boolean combiOK = false;
boolean estOK = false;
int nombredecoup =0 ;
boolean [] estEvalueMystere = {false, false, false, false};
String phrase1;
void setup(){
background(0);
size(640, 660);
//println("Programme test permettant de suivre les valeurs de variables au cours de son exécution");
text ("Java Mastermind 4 couleurs. Jouez contre l'ordinateur.", 0, 20);
// Création aléatoire de la combinaison mystère
for (i = 0; i < 4 ; i ++) {
//combinaisonMystere [i]=(int)(Math.random() * (100));
while ( combinaisonMystere [i] != 82 && combinaisonMystere [i] != 86 && combinaisonMystere [i] != 66 && combinaisonMystere [i] != 74) {
combinaisonMystere [i]=(int)(Math.random() * (100));
//println(i);
//println (combinaisonMystere [i]);
}
}
//char combinaisonMystere = (char)(Math.random() * (10000));
//println ("La combinaisonMystere est");
for (i = 0; i < 4 ; i ++) {
println (combinaisonMystere [i]);
}
phrase1 = ("" + (char) (combinaisonMystere[0]));
for (i = 1; i < 4; i ++) {
phrase1 += " " + ("" + (char) (combinaisonMystere[i]));}
println (phrase1);
text("Les 4 couleurs possibles sont Rouge(82) Vert(86) Bleu(66) et Jaune(74)", 0, 40);
}
void keyPressed() {
if (key == 'r' ) { combiSaisie [keyIndex] = 82;text("R",x,y+200);
if (keyIndex <3){keyIndex = keyIndex +1;}else { keyIndex =0; submit();}
x=x+10;
if (x==40){x=0; y=y+20;}
}
if (key == 'b' ) { combiSaisie [keyIndex] = 66;text("B",x,y+200);
if (keyIndex <3){keyIndex = keyIndex +1; }else { keyIndex =0; submit();}
x=x+10;
if (x==40){x=0; y=y+20;}
}
if (key == 'v' ) { combiSaisie [keyIndex] = 86;text("V",x,y+200);
if (keyIndex <3){keyIndex = keyIndex +1;}else { keyIndex =0; submit();}
x=x+10;
if (x==40){x=0; y=y+20;}
}
if (key == 'j' ) { combiSaisie [keyIndex] = 74;text("J",x,y+200);
if (keyIndex <3){keyIndex = keyIndex +1;}else { keyIndex =0; submit();}
x=x+10;
if (x==40){x=0; y=y+20;}
}
}
void submit(){
text("Vous avez " + (8-nombredecoup) +" essais",200,y+200);
nombredecoup = nombredecoup+1;
text (combiSaisie [keyIndex], 100, y+200);
if (nombredecoup ==8) {text("Vous avez perdu",200,y+220);x=0;y=0;fill(0); rect(0,150,400,400);nombredecoup =0;}
int valeur []={0,0,0,0};
int x1=0;
int y1=0;
for (int i = 0; i < 4; i ++) {
valeur [i] = combiSaisie [i];
//println (valeur[i]);
// test des couleurs bien placées
if (valeur[i] == combinaisonMystere [i]) {x1=x1+1;estEvalueMystere [i] = true;}}
for ( i = 0; i < 4; i ++) {
// test des couleurs mal placées ( A REVOIR !!!!!!)
for (int j = 0; j < 4; j ++) {
//boolean b = valeur[i] == combinaisonMystere [j] && i != j && estEvalueMystere [j] == false;
//println (b);
if (valeur[i] == combinaisonMystere [j] && i != j && estEvalueMystere [j] == false ) {y1=y1+1; estEvalueMystere [j] = true;}
}
}
println (x1 + " couleurs bien placées");
text (x1 + " couleurs bien placées", 350, y+200);
if (x1 == 4) {nombredecoup =8;println ("Vous avez gagné"); text("Vous avez gagné",100,500);victoire = true;}
println (y1 + " couleurs mal placées");
text (y1 + " couleurs mal placées",350,y+210);
//Ecrire sur la console les lettres correspondant au code ASCII des caractères
String phrase = ("" + (char) (valeur[0]));
for (i = 1; i < 4; i ++) {
phrase += " " + ("" + (char) (valeur[i]));}
//println (phrase);
if (victoire == false) { println("Vous avez perdu");println (phrase1);}
}
void draw() {
fill(102);
rect(81, 81, 63, 63);
}
Vendredi 30 janvier au soir :
Nous avons continués l'interface , il fallait limiter le nombre de boule par tour et limiter le nombre de tour .
Limiter le nombre de tour : - définission d'une variable définissant le nombre de tour max et une variable qui indique le tour courant s'écrémentant à chaque validation de tour .
Limiter nombre balles : - on a mis un nombre de boule max par tour , plus une variable qui s'écremente à chaque ajout de boule et se remet à zéro lors de chaque tour .
Nous avons définis huit variables couleurs qui nous serons utile à la fois pour l'affichage et les algorithmes du mastermind .
Grace à tout ceci le joueur ne peut pas dépasser le nombre de boule maximun d'un tour et ne peut pas valider son choix le temps qu'il n'a pas mis le nombre de boules maximum .
Samedi 31 janvier 2015 :
Nous avons créés deux tableaux . Le premier contient la combinaison gagnante , puis un vide de la même taille que celui de la combinaison gagnante.
A chaque fois que l'on ajoute une boule , la boule est ajoutée dans le deuxième tableau puis quand on valide le choix on appelle une fonction qui fait la comparaison entre les deux tableaux.
Cette fonction parcours la combinaison du joueur en comparant une à une les couleurs par rapport au tableau de la combinaison gagnante .
Si toutes les couleurs sont identiques alors la partie est gagnée sinon on continue la partie .
Nous avons encore continués l'interface . Nous avons mis une condition sur le bouton valider ( en plus de celle victoire ) qui vérifie si le nombre du tour courant n'est pas égal à celui du tour maximum , si elle est égale au nombre de tour max et que la combinaison n'est toujours pas bonne , " defaite " s'affiche sur l'interface .
On modifie le texte du bouton valider qui devient " recommencer " et donc on utilise une nouvelle variable boolean " recommencer" ( qui est à faux par défaut ) nous l'avons mis à vrai à ce moment là.
Ensuite on rajoute une nouvelle condition au clic du bouton valider ( au début du code de gestion clic bouton ) qui va tester si la variable recommencer est à vrai . Si elle est vrai on met le boolean " recommencer " à faux , et on appel la fonction setup dans laquelle nous avons placé le code d'initialisation du jeu ( background , variables , tableau ==> et contiendra quand nous l'aurons fait la fonction de combi aléatoire ) .
Dimanche 01 février 2015 :
Jusqu' à présent nous avions testés le jeu avec une liste gagnante fixe maintenant nous avons rajoutés une fonction de combinaison gagnante aléatoire .
combinaison gagnante aléatoire : nous avons créés un nouveau tableau qui contient toutes les couleurs possibles . On créé la fonction " compiutrandomcombinationwin " , qui va attribuer à chaque élément du tableau une couleur aléatoire de la liste de couleur . Pour chaque éléments du tableau de combinaison gagnante :
-
on choisit un index ( entier qui indique la position dans le tableau ) aléatoire compris entre 0 et la taille de la liste de couleurs -1
-
on récupère la couleur située à cet index dans la liste de couleur ( nous avons donc récupérés une couleur aléatoire ) .
-
On attribue cette couleur aléatoire à l’élément en question .
Il ne manque plus qu'à vérifier pour chaque tour qu'elles sont les boules de couleurs bien placées et mal placées .
Pour ceci à la fin de chaque tour , dans le cas ou la combinaison n'est pas gagnante , on appelle une fonction qui va calculer ces informations.
Le principe c'est qu'on compare un à un les éléments entre les deux tableaux ( combinaison joueur et gagnante ) . Si la couleur est identique on incrémente le nombre de boule de bonnes couleurs bien placé , sinon on cherche cette couleur dans tous les autres index de la combinaison gagnante . Si on retrouve la couleur parmi ces index alors on incrémente le compteur du nombre de bonne couleur mal placée ( pour cela on appelle une fonction qui a pour paramètre la couleur en question et son index dans le tableau du joueur et qui va comparer la couleur avec tous les index différents de celui donné en paramètre , et qui renvoie 1 si cette couleur est trouvée et sinon 0) .
Il suffit ensuite d'afficher à chaque tour sur l'interface ces informations à côtés des balles choisies par le joueur.
Vendredi 6 Février 2015:
Nous nous sommes rendu compte que nous n'avions pas écrit sur l'interface ce qu'était une balle blanche et une balle noire . Mais nous ne pouvions pas ré ouvrir GUI car sinon il supprimait tout ce qui a été fait . Nous avons donc directement fait la modification sur notre programme :
Lundi 23 Février 2015 :
Cependant, comme on supprime une balle en en rajoutant une "creuse" par dessus, il reste toujours le contour. Nous avons donc decidé que pour chaque début de tour, nous allions déssiner 4 balles creuses qui seront ensuite remplies par le joueur.
On regle ainsi le probleme précédent tout en permettant au joueur de voir directement lorsqu'il a enclenché un nouveau tour, le nombre de balles à jouer, etc.
public void drawNewTurn() {

CODE FINAL