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:

Grâce au code ci contre, le bloc se déplace dans le quadrillage, mais il ne disparaît pas de ses emplacements précédents. Nous cherchons donc la solution pour déplacer un bloc sans laisser de trace.

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

void deplacement (){
if (key == CODED){

if (keyCode == LEFT ) {

if (xCube<=15){
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 (key == CODED){if (keyCode == LEFT ) {
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.

lignes de code:

//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:

nouvelles lignes de code dans le même void:

   //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.




Finalement, cette fonction ne permet pas d'aboutir à l'objectif fixé, elle est donc supprimée.

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;
}
}
}

La fonction ne fonctionne pas.

Lycée B.Palissy 164 Bd de la Liberté 47000 Agen
Optimisé par Webnode
Créez votre site web gratuitement ! Ce site internet a été réalisé avec Webnode. Créez le votre gratuitement aujourd'hui ! Commencer