Implantation du jeu 2048

Projet: 2048
15 novembre 2014
Après plusieurs heures de programmation intense, l'objectif est de se détendre
avec votre nouvelle version du jeu 2048 !
Le jeu 2048 est une variante du
Gabriele
jeu de taquin,
inventée par le web designer
Cirulli (quelqu'un de votre âge...) en mars 2014. Le jeu est une grille
4×4 où chaque case/tuile est soit vide, soit une puissance de 2. Le but du jeu est
de faire glisser (verticalement et/ou horizontalement) toutes les tuiles (en même
temps) sur la grille an de combiner les tuiles de même valeurs. Si deux tuiles de
k
même valeur (2 ) sont adjacentes pendant le glissement, alors elles se combinent
en une unique tuile étiquetée par la somme des valeurs (2
k+1
). Après chaque
déplacement, une nouvelle tuile apparaît aléatoirement sur un des emplacements
2, soit 4, avec probalité respective
1
9
et
. Pour que le jeu commence, il faut au minimum une tuile sur la grille
10
10
(habituellement deux). Le jeu se termine lorsque toutes les tuiles sont occupées
vides. Cette nouvelle tuile a pour valeur soit
et que plus aucun mouvement ne permet de combiner de tuiles.
Après avoir étudié le démineur, le sudoku. . . voici le
2048 !
Encore une grille
à coder ! Encore des règles et conditions à satisfaire. . . Et surtout un rapport !
(oui ça c'est nouveau. . .)
Rendre un programme mettant en oeuvre le jeu 2048, et rédiger
Ob jectif :
un rapport de projet.
Pour les modalités pratique (soutenance, ...), voire le début de l'autre sujet.
Bases du jeu
Le niveau
0
(alias le niveau J'en fais pas plus qu'en TP) du projet est de
modéliser et implémenter une version du jeu
2048
en mode console en C++.
En s'inspirant du TP sudoku, on pourra modéliser une grille de jeu par un
type
Grille et identier l'achage, les règles et les actions du jeu par diérentes
deplacement_autorise, etc ). Ces diérentes fonctions
fonctions (affichage,
devront être
spéciées, documentées
et
testées.
haut, bas, gauche
À ce premier niveau, on rentre chaque déplacement (
droite )
par l'intermédiaire de caractères (par exemple
1
h, b, g
et
d
ou encore
et
i,
k, j et l). De plus on ache la grille après chaque déplacement, avec la nouvelle
tuile apparue. Voir ci-dessous un exemple d'exécution :
...
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 128 ∗ 4 ∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗ 16 ∗ 4 ∗ 2 ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗
∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
Entrer
commande :
h
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 128 ∗ 4 ∗ 4 ∗ 2 ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 4 ∗ 16 ∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗
∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
Entrer
commande :
g
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 128 ∗ 8 ∗ 2 ∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 4 ∗ 16 ∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗
∗
∗ 4 ∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
Entrer
commande :
La moyenne pourra être obtenue si le jeu est
...
fonctionnel
:
le(s) chier(s) de votre projet compile(nt),
le code est spécié, documenté et testé (incluant le code des tests),
le jeu respecte les règles et spécications du
2048,
lors de l'achage, les colonnes sont bien alignées, quelles que soient les
valeurs de chaque tuile :
2
Correct
Pas
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 128 ∗ 128 ∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗ 16 ∗ 4 ∗ 2 ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗
∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
correct
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 128 ∗ 128 ∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗ 16 ∗ 4 ∗ 2 ∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗
∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗ 2 ∗
∗
∗
∗
∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗∗
∗
et si le rapport est bien rédigé (orthographe...) et comprend :
une
une
présentation du jeu,
documentation de votre application.
Amélioration
Le niveau 1 (ou comment gagner des points avec un minimum d'eorts)
propose diérentes améliorations (faciles) :
1. Le site du jeu original propose un système de score. Étudier son fonctionnement, ajouter cette fonctionnalité à votre code/jeu et écrire la documentation. (∼
1pt)
2. Comme sur le jeu original, rajouter un peu de couleur à notre triste
console. . . (∼
1pt)
3. On aimerait jouer en utilisant directement les èches (
droite )
haut, bas, gauche
et
du clavier, sans avoir à appuyer sur entrée à chaque fois. Étudier
diérentes solutions envisageables et ajouter cette fonctionnalité. (∼
2pt)
4. Pour des raisons de jouabilité encore une fois, on aimerait que l'achage
d'une grille se fasse à la même place que la grille précédente, plutôt que
de les voir à la suite. Autrement dit, on souhaiterait que l'écran se raraichisse. Étudier diérentes solutions et ajouter la fonctionnalité. (∼
Pour les
2pt)
3 derniers points, une solution envisageable est d'utiliser la bibliothèque
ncurses.
Attention : L'utilisation de certaines librairies nécessite d'ajouter des para-
mètres de compilation. Si tel est le cas, le rapport devra expliciter la procédure
de compilation.
Compilation
Le niveau 2 (on veut passer la barre des
16 ?)
:
Code::blocks
vous cache
bien des choses. . . en particulier que se passe-t-il vraiment lorsque vous cliquez
sur le petit icone en forme d'engrenage ? La compilation de votre programme. . .
3
Étudier les instructions de compilation et proposer un
compiler votre projet. (∼
Makefile permettant de
2pt)
Attention : Deux choix s'orent à vous, créer un (petit)
adapté à votre projet ou trouver un
Makefile
Makefile (simple)
générique qui compile tout. . .
Pour mériter les points de la question, l'important est de comprendre ce qui se
passe (n'oublions pas la soutenance. . .).
Pour aller plus loin...
Le niveau 42 (le vrai geek comprend !) : Un jeu en mode console ? Mouais. . .
j'aimerais une vraie fenêtre. . . ou mieux, avoir l'appli sur mon portable. . .
1. Découvrir SDL (ou mieux GTK+) et proposer une version du
une interface graphique. (∼
2048
avec
2pt)
2. Vous en voulez encore ? Une version
android
ou
iOS
c'est possible ? (∼
2pt)
La note maximale est sûrement de
20
mais. . . des points se cachent encore
dans la soutenance de votre projet. . . Ceux qui atteignent le dernier niveau
assurent (presque) le
20 mais tout n'est pas perdu pour les autres. . . Soutenance
bien préparée et travail soigné seront récompensés !
4