(Retour à la liste)

D-1. 2048


Le 2048 est un jeu qui se joue sur une grille de 4x4. Des blocs représentant des puissances de 2 (2, 4, 8, 16, 32, etc.) sont contenus dans cette grille (certaines cases peuvent aussi être vides). Initialement, la grille contient deux blocs de valeur 2 ou 4 placés aléatoirement.

Plateau de 2048

À chaque tour, le joueur peut déplacer les blocs vers le haut, le bas, la gauche ou la droite. À chaque déplacement, les blocs se déplacent dans la direction choisie jusqu'à rencontrer un autre bloc ou le bord de la grille. Si deux blocs de même valeur se rencontrent, ils fusionnent en un bloc de valeur double. Après chaque mouvement, un bloc additionnel de valeur 2 ou 4 apparaît dans une case vide.

Le joueur gagne quand il obtient un bloc de valeur 2048. Le joueur perd quand la grille est remplie et qu'il n'est plus possible de déplacer les blocs.

Exemple en ligne : https://play2048.co/

Cahier des charges

Votre programme affiche la grille de jeu et demande à l'utilisateur quelle action il veut effectuer. L'utilisateur peut saisir les lettres z, q, s ou d pour déplacer les blocs vers le haut, la gauche, le bas ou la droite. Lorsque l'utilisateur a entré son action, le programme calcule la nouvelle grille de jeu. Il y a alors deux cas :

À chaque fois qu'un bloc doit apparaître, votre programme doit choisir aléatoirement entre 2 et 4. La probabilité d'apparition du bloc 2 est de 90% et celle du bloc 4 est de 10%.

Si l'utilisateur crée un bloc de valeur 2048, le programme affiche un message de félicitations et demande au joueur s'il veut tout de même continuer à jouer. Si oui, le jeu continue jusqu'à ce que l'utilisateur perde. Si non, le programme s'arrête.

Le programme s'arrête quand la grille est pleine et que le joueur n'a aucune action valide à effectuer. La valeur de la case la plus haute obtenue par le joueur est alors affichée.

Déplacement des blocs

Le déplacement des blocs n'est pas aussi simple qu'il n'y paraît. Pour expliquer les règles, supposons que le joueur veut déplacer les blocs vers la gauche (le fonctionnement est le même dans les autres directions). Chaque ligne est alors traitée indépendamment. Nous nous intéressons ici à une ligne donnée (il suffit de reproduire la même chose sur chacune des lignes).

On traite les blocs de gauche à droite. On déplace le bloc le plus à gauche possible. Si le bloc (A) est bloqué par un autre bloc (B), deux cas existent :

Je vous recommande de créer une fonction (appelée par exemple deplace_gauche(tab)) qui prend en paramètre un tableau tab de 4 entiers et qui renvoie le tableau modifié après déplacement des blocs vers la gauche. Vous pourrez ensuite utiliser cette fonction pour déplacer les blocs vers le haut, le bas et la droite en inversant les tableaux pris en entrée et reçus en sortie de cette fonction.

Exemples : (on suppose que 0 représente une case vide)

Pour aller plus loin (palier 4)

Une fois que vous avez atteint le palier 3 des fonctionnalités, voici quelques idées pour aller plus loin et atteindre le palier 4 :