Séance du 06/01/20:
Voici la solution provisoire que j'ai trouvé pour former une grille de 4 par 4 :
La solution d'Eva est meilleure pour la suite du programme, je l'ai donc aidé à coder toutes les valeurs.
(le cube blanc n'est pas impliqué par les lignes de code ci-dessous)
Séance du 20/01/20:
Voir la photo sur: Carnet de bord commun
Je pense qu'il faudrait créer un tableau contenant les valeurs en x et y des blocs.
void deplacement (){
if (key == CODED){
if (keyCode == LEFT) {
xCube = xCube - 100;}
if (keyCode == RIGHT){
xCube = xCube + 100;}
if (keyCode == UP) {
yCube = yCube - 100;}
if (keyCode == DOWN) {
yCube = yCube + 100;}
}
else {
s = s + key;
}
}
Séance du 13/01/20:
Nous avons essayé, grâce à l'exemple "object", de faire bouger notre cube, mais nous avons échoué... Nous n'avons pas encore trouvé de solution.
Séance du 27/01/20:
J'ai rajouté des conditions dans la fonction de déplacement pour ne pas que les cubes puissent se déplacer en dehors du quadrillage, voir caractères en gras du code si-contre:
Avant, les cubes pouvaient se déplacer partout dans la fenêtre (et même au-delà). Néanmoins, nous rencontrons maintenant un nouveau souci: lorsque le bloc est en bas, nous ne pouvons pas le remonter.
Problème résolut immédiatement en ré-écrivant les lignes de cette fonction.
Capture du résultat sur le Carnet de bord commun
if (key == CODED){
if (keyCode == LEFT ) {
xCube=xCube;}
else {xCube = xCube - 100;};
}
if (keyCode == RIGHT){
if (xCube>=310 ){
xCube=xCube;}
else { xCube = xCube + 100;};
}
if (keyCode == UP) {
if ( yCube>=10 ){
yCube=yCube;}
else {yCube = yCube - 100;};
}
if (keyCode == DOWN) {
if (yCube>=310 ){
yCube=yCube;}
else {yCube = yCube + 100;};
}}
}
Travail personnel 28/01/20:
Créations des différentes fonctions (qui seront utilisées plus tard) pour les différents déplacements des cubes: 3 cases au maximum (fonction déjà créée en groupe)
2 cases (si 1 bloc est positionné sur la 3ème case)
1 case (si deux blocs sont déjà présent sur la lignes)
0 case (si la ligne est déjà comblée de blocs)
Ci contre, exemple de la variable pour 2 cases et 0 case:
+Recherche d'une fonction pour ajouter un nouveau cube lors de chaque déplacement.
void deplacement0 (){
if (compteur_de_cube<16) {
compteur_de_cube =compteur_de_cube +1;
}
println(compteur_de_cube);
if (key == CODED){if (keyCode == LEFT ) {
xCube[0] = xCube[0];}
if (keyCode == RIGHT){
xCube[0] = xCube[0];}
if (keyCode == UP) {
yCube[0] = yCube[0];}
if (keyCode == DOWN) {
yCube[0] = yCube[0];}
}
void deplacement2 (){
if (compteur_de_cube<16) {
compteur_de_cube =compteur_de_cube +1;
}
println(compteur_de_cube);
if (xCube[0]<=15){
xCube[0]=xCube[0];}
else {xCube[0] = xCube[0] - 200;}
}
if (keyCode == RIGHT){
if (xCube[0]>=310){
xCube[0]=xCube[0];}
else {xCube[0] = xCube[0] + 200;}
}
if (keyCode == UP) {
if (yCube[0]<=15){
yCube[0]=yCube[0];}
else {yCube[0] = yCube[0] - 200;}
}
if (keyCode == DOWN) {
if (yCube[0]>=310){
yCube[0]=yCube[0];}
else {yCube[0] = yCube[0] + 200;}
}}
}
Séance du 17/02/20:
L'objectif fixé pour moi est de proposer au joueur 2 solution lorsque sa partie se termine:
- terminer le jeu (fermeture de la fenêtre)
- démarrer une nouvelle partie
Voici le début de mes lignes de code (ci-contre), encore très incomplètes du au manque de temps. Elles ne font que placer des rectangles de couleur avec les futures touches exécutives.
//propopsition d'une nouvelle partie
noStroke ();
fill(0);
rect (0, 0, 500, 500);
noStroke ();
fill(250);
rect (135, 100, 200, 30);
fill (10);
textSize (15);
text ("nouvelle partie", 180 ,121 );}
}
Travail personnel du 18/02/20:
//rectangle "fin du jeu"
noStroke ();
fill(250);
rect (135, 250, 200, 30);
fill (10);
textSize (15);
text ("fin du jeu", 200 ,270 );
Continuité de la séance précédente (voir ci-dessus)
Travail personnel du 22/02/20:
Je cherche à ce que le jeu ne s'arrête que lorsqu'on ne peut plus effectuer de déplacement, car à l'heure actuelle le jeu affiche "perdu" dès qu'il y a 16 blocs, or nous pouvons parfois continuer à jouer. Pour remédier à celà, j'ai créé une fonction boolean "perdu".
J'ai créé une fonction du même type lorsque le jeu est gagné (rappel: le jeu est gagné quand le joueur atteint un bloc de valeur 2048)
De plus, j'ai rajouté une simple ligne pour qu'un nouveau cube apparaisse même après une multiplication (avant, un nouveau cube apparaissait seulement si le mouvement ne permettait pas de multiplication).
Travail personnel du 23/02/20:
J'ai changé la couleur du fond lorsque le joueur a perdu, de plus la couleur des boutons "nouvelle partie" et "fin du jeu" change lorsque la souris se positionne dessus.
La fonction concernant la "nouvelle partie" est terminée ainsi que la fonction "fin du jeu".
Travail personnel du 28/02/20:
Objectifs:
Rectifier le code car les nouveaux cubes (après multiplication n’apparaissent pas aux bon endroit, ils gênent la progression des autres cubes), de plus il faut modifier les fonctions de mouvement des cubes pour qu'ils soient corrects:
-Tous les cubes doivent se déplacer vers les extrémités (au plus possible), et non de seulement une case
-Si des cubes se multiplient, un cube disparaît et le nouveau cube prend sa position.
Pour cela j'ai créé une fonction booléenne qui permet de vérifier s'il y a eu une multiplication ou non. Cette fonction sera appelé lorsqu'il faudra connaitre le déplacement de chaque cube.
boolean multiplication {
//appel des variables i et j
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
//si cubes se sont multipliés (mvt droit)
if (valCube [i+1][j] == valCube [i+1][j]*2) {
return true;
}
//si cubes se sont multipliés (mvt gauche)
if (valCube [i-1][j] == valCube [i-1][j]*2) {
return true;
}
//si cubes se sont multipliés (mvt bas)
if (valCube [i][j+1] == valCube [i][j+1]*2) {
return true;
}
//si cubes se sont multipliés (mvt haut)
if (valCube [i][j-1] == valCube [i][j-1]*2) {
return true;
}
}
}
return false;
}
Travail en groupe du 05/03/20:
Mise en place d'une fonction pour changer les couleurs suivant la valeur du cube.
+Recherche d'une fonction pour améliorer le déplacement des cubes, mais celle ci ne fonctionne pas.
Travail personnel du 06/03/20:
Je cherche à finaliser les mouvements, pour cela j'ai essayé plusieurs méthodes que vous trouverez ci-dessous
Essaie n°1 (avec des if et des else): NE FONCTIONNE PAS
//s'il y a 1 cubes dans une colonne
if (j==1) {
//s'il n'y a pas de cube 3 fois consécutives
if (valCube [i][j+3] ==0) {
//le cube se déplace de 3
valCube [i][j+3] = valCube [i][j];
valCube [i][j] = 0;
} else {
//s'il n'y a pas de cube 2 fois consécutives
if (valCube [i][j+2] ==0) {
//le cube se déplace de 2
valCube [i][j+2] = valCube [i][j];
valCube [i][j] = 0;
} else {
//s'il n'y a pas de cube en dessous
if (valCube [i][j+1] ==0) {
// cube se déplace de 1
valCube [i][j+1] = valCube [i][j];
valCube [i][j] = 0;
} else {
valCube [i][j] = valCube [i][j];
}
}
}
}
Essaie n°2 (à partir de la ligne de code existante): NE FONCTIONNE PAS
//S'il n'y a pas de cube en dessous
if (valCube [i][j+1] == 0) {
valCube [i][j+1] = valCube [i][j];
}
//S'il n'y a pas de cube en dessous
if (valCube [i][j+2] == 0) {
valCube [i][j+2] = valCube [i][j];
} else{
valCube [i][j+1] = valCube [i][j];
}
//S'il n'y a pas de cube en dessous
if (valCube [i][j+3] == 0) {
valCube [i][j+3] = valCube [i][j];
} else {
valCube [i][j+2] = valCube [i][j];}
Essaie n°3 (avec une fonction booléenne): NE FONCTIONNE PAS
boolean mvt3(){ for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
if (valCube [i][j+3]==0 && valCube [i][j+2]==0 && valCube [i][j+1]==0) {
return true;
}
if (valCube [i][j-3]==0 && valCube [i][j-2]==0 && valCube [i][j-1]==0) {
return true;
}
if (valCube [i-3][j]==0 && valCube [i-2][j]==0 && valCube [i-1][j]==0) {
return true;
}
if (valCube [i+3][j]==0 && valCube [i+2][j]==0 && valCube [i+1][j]==0) {
return true;
}
}
}
return false;
}
boolean mvt2(){
for (int i=0; i<4; i++) {
for (int j=0; j<4; j++) {
if (valCube [i][j+2]==0 && valCube [i][j+1]==0) {
return true;
}
if (valCube [i][j-2]==0 && valCube [i][j-1]==0) {
return true;
}
if (valCube [i-2][j]==0 && valCube [i-1][j]==0) {
return true;
}
if (valCube [i+2][j]==0 && valCube [i+1][j]==0) {
return true;
}
}
}
return false;
}
boolean mvt3 = mvt3();
boolean mvt2 = mvt2();
if (mvt2) {
valCube [i][j+2] = valCube [i][j];
}
if (mvt3) {
valCube [i][j+3] = valCube [i][j];
}
Travail personnel du 07/0/20:
Objectif du jour: La multiplication doit se faire sur les extrémités en priorité.
Avec l'état actuel du code, si nous avons une suite telle que 2-2-2, la multiplication (du au mouvement de droite) va aboutir à 4-2, alors qu'elle devrait donner 2-4.
Il faut donc rajouter des lignes de codes (dans chaque fonctions de déplacement) pour que des conditions de priorités interviennent. Je vais essayer de la faire fonctionner avec une fonction booléenne vraie si 3 cubes de même valeurs se suivent, ainsi nous pourrons ensuite ordonner la multiplication sur les extrémités.
+Amélioration du site
Essaie de la fonction booléenne:
boolean meme_valeur(){
for (int j=0; j<4; j++) {
for (int i=0; i<4; i++) {
if(valCube [i][j] = valCube [i+1][j] = valCube [i+2][j]){
return true;
}
if (valCube [i][j] = valCube [i-1][j] = valCube [i-2][j]){
return true;
}
valCube [i][j] = valCube [i][j+1] =valCube [i][j+2]){
return true;
}
if (valCube [i][j] = valCube [i][j-1] = valCube [i][j-2]){
return true;
}
return false;
}
}
}