• Aucun résultat trouvé

La partie est perdue lorsque un t´etramino est verrouill´e compl`etement au-dessus de la ligne de vie

N/A
N/A
Protected

Academic year: 2022

Partager "La partie est perdue lorsque un t´etramino est verrouill´e compl`etement au-dessus de la ligne de vie"

Copied!
4
0
0

Texte intégral

(1)

IUT Littoral 2019 - 2020

Info 2A C++

Projet – T´etris

Ce projet est `a faire en binˆome et `a remettre le lundi 6 janvier 2010 durant le cours.

1. Pr´esentation

T´etris est un jeu de type puzzle o`u les pi`eces sont dest´etraminos(un assemblage de 4 carr´es

´

el´ementaires). Les t´etraminos, tir´es al´eatoirement, tombent 1 `a 1 dans le puits.

Le joueur peut d´eplacer le t´etramino tombant vers la gauche ou vers la droite avec les fl`eches correspondantes du clavier ou lui faire faire une rotation avec la fl`eche du haut. S’il le souhaite, il peut accel´erer la chute du t´etramino avec la fl`eche du bas. Une fois que le t´etramino ne peut plus tomber, le joueur peut le d´eplacer lat´eralement ou lui faire faire des rotations avant que celui-ci ne soit d´efinitivement verrouill´e. Si une ligne compl`ete du puits est recouverte par des morceaux de t´etraminos, elle est retir´ee, le joueur marque des points et tout ce qui est au-dessus de cette ligne dans le puits tombe.

La partie est perdue lorsque un t´etramino est verrouill´e compl`etement au-dessus de la ligne de vie. Plus le joueur compl`ete de lignes, plus son score, son niveau et la vitesse de chute augmentent.

Le but de ce TP est de coder un jeu t´etris fonctionnel. Un squelette de code contenant la gestion de l’interface graphique, la gestion des ´ev`enements, les diff´erentes structures et la trame du code que vous aurez `a ´ecrire vous est fourni sur mon site au LMPA.

T´el´echarger et d´ecompresser le squelette du projet correspondant `a votre OS.

2. Structures

Notre version du t´etris sera bas´ee sur 3 structures : Puits,TetraminoetTetris. Celles-ci sont d´efinies et partiellement initialis´ees dans le fichiertetris.h.

Il y a 7 formes diff´erentes de t´etramino, num´erot´ees de 1 `a 7. Chaque t´etramino est compos´e d’un carr´e central (dessiner en noir sur le tableau suivant) et de 3 carr´es p´eriph´eriques. Le tableau suivant illustre les 7 formes de t´etramino ainsi que leurs rotations possibles. Le nom des t´etraminos n’est pas utilis´e dans le programme. La structureTetramino est alors compos´ee de

— forme : la forme du t´etramino (de 1 `a 7) ;

— rotation : pour l’angle de rotation, multiple de 90 (initialis´e `a 0) ;

— x,y : les coordonn´ees du centre du t´etramino (initialis´e `a (0,0)) ;

— x1,y1,x2,y2,x3,y3 : les coordonn´ees relatives (au centre) des 3 autres carr´es.

(2)

2

forme nom rotation=0 rotation=1 rotation=2 rotation=3

1 I

2 J

3 L

4 O

5 S

6 T

7 Z

La structurePuitsrepr´esente un ensemble de carr´ees et est compos´ee de

— hauteur : hauteur totale du puits, en nombre de carr´es (initialis´e `a 28) ;

— largeur : largeur totale du puits, en nombre de carr´es (initialis´e `a10) ;

— grille: les valeurs des carr´es du puits.

Le carr´e `a la position (x, y) de la grille vaut 0 s’il est vide ou vaut le num´ero de la forme du t´etramino ayant d´epos´e le carr´e. Pour acc´eder aux valeurs de la grille on a les fonctions :

— lire position(Puits p,int x,int y)retourne la valeur `a la position(x,y)du puitsp.

— ecrire position(Puits p,int x,int y,int v) assigne la valeurv`a la position(x,y) du puits p.

La structureTetrisest compos´ee de

— couleursun tableau de 8 couleurs. Celle d’indice 0 est noire, celles d’indicei >0 corres- pond au t´etramino de forme i;

— puits : le puits du t´etris ;

— tetramino courant: le t´etramino en train de tomber ;

— prochain tetramino : le prochain t´etramino `a tomber ;

— dx,dy: la position du point en bas `a gauche pour le dessin du puits (initialis´es `a(10,10)) ;

— taille carre : la taille des carr´es `a dessiner (initialis´e `a 20) ;

— ligne vie : position de la ligne de vie dans le puits (initialis´e `a 22) ;

— lignes terminees : nombre de lignes termin´ees (initialis´e `a0) ;

— niveau: niveau du joueur, de 1 `a 20 ;

— score : score du joueur (initialis´e `a 0) ;

— game over : vaut truesi le jeu est perdu (initialis´e `a false).

3. Ce qu’il faut faire

Exercice 1. Modifier la fonction affichage tetris(Tetris& tetris) pour que celle-ci af- fiche le contour du puitstetris.puits en blanc et la ligne de vie en gris `a l’aide des fonctions dessine ligne(int x1,int y1,int x2,int y2)etdefini couleur dessin(Couleur c). Les variables blancetgris de type Couleursont d´ej`a d´efinies.

Exercice 2. Modifier la fonction initialisation tetramino(Tetramino& t,int f)qui ini- tialise le t´etraminot`a la forme d’indice fpour une rotation de0.

(3)

3

Exercice 3. Terminer la fonction affichage tetramino(Tetris& tetris, Tetramino& t) permettant d’afficher un t´etramino dans le puits. Vous pourrez tester vos fonctions de cr´eation et d’affichage de t´etramino en d´e-commentant la partie correspondante dansaffichage tetris.

N’oubliez pas de re-commenter le code-test avant de poursuivre.

Exercice 4. La structureTetriscomporte 2 ´el´ements de typeTetramino:tetramino courant etprochain tetramino. Le premier est le t´etramino tombant dans le puits et le deuxi`eme est le prochain `a tomber. Lors de la cr´eation d’un nouveau t´etramino on assigneprochain tetramino

`

a tetramino courant. On modifie ensuite la position(x,y) de tetramino courantpour qu’il soit affich´e au milieu en haut du puits. On cr´ee alors un nouveau t´etramino de forme al´eatoire dansprochain tetramino et on modifie sa position(x,y)pour qu’il soit affich´e en-dessous du mot Suivant. C’est le but de la fonctionnouveau tetramino(Tetris& tetris).

Exercice 5. Modifier la fonction deplace tetramino(Tetramino& t,int mx,int my) pour qu’elle retourne une copie du t´etraminottranslat´e de (mx,my).

Exercice 6. Modifier la fonctionteste position(Tetris& tetris,int x,int y)pour qu’elle retourne true si la case `a la position (x,y) est une case vide du puits tetris.puits, et non une case occup´ee ou `a l’ext´erieur du puits.

Exercice 7. Modifier la fonction teste tetramino(Tetris& tetris,Tetramino& t) qui re- tourne truesi le t´etraminotest enti`erement `a l’int´erieur du puits tetris.puitset si sa place est libre.

Exercice 8. Modifier la fonction evenement deplacement(Tetris& tetris,int direction) qui d´eplace le t´etraminotetris.tetramino courantd’une case vers la gauche (direction=-1) ou vers la droite (direction=1) si possible. On utilisera les fonctions deplace tetramino et teste tetramino.

Exercice 9. Modifier la fonctionevenement chute(Tetris& tetris)qui fait tomber le t´etramino tetris.tetramino courantd’une case si possible. La fonction retourneratrue si la chute a pu ˆ

etre r´ealis´ee etfalse sinon.

Exercice 10. Modifier la fonction tourne tetramino(Tetramino& t) pour qu’elle retourne une copie du t´etraminotapr`es rotation de 90 dans le sens trigonom´etrique (voir tableau). Les t´etraminosIetOseront trait´es s´epar´ement. Pour les autres on pourra utiliser la forme matricielle d’une rotation d’angle α dans le rep`ere standard :

cos(α) −sin(α) sin(α) cos(α)

Exercice 11. Modifier la fonction evenement rotation(Tetris& tetris) qui fait tourner le t´etraminotetris.tetramino courant si possible.

Exercice 12. Modifier la fonctionverouillage tetramino(Tetris& tetris) qui verouille le t´etramino tetris.tetramino courant dans la grille : les carr´es de la grille recouverts par le t´etramino prennent la valeur de la forme de celui-ci.

(4)

4

Exercice 13. Modifier la fonction verouillage tetramino(Tetris& tetris) qui teste si le t´etraminotetris.tetramino courantest enti`erement au-dessus de la ligne de vie. On commen- cera par d´eterminer la plus petite ordonn´ee des carr´es du t´etramino, qu’on stockera dansymin.

Siymin est plus grand que tetris.ligne vie on arme tetris.game over`a true et on quitte la fonction. Sinon on cr´ee un nouveau t´etramino `a l’aide de la fonction nouveau tetramino.

Exercice 14. Modifier la fonction verouillage tetramino(Tetris& tetris) pour qu’elle supprime et d´etermine le nombre de lignes finies, qu’on stockera dansnombre lignes finies.

Exercice 15. Modifier la fonction verouillage tetramino(Tetris& tetris) pour qu’elle mette `a jourtetris.lignes termineescomptant le nombre de lignes termin´ees depuis le d´ebut de la partie,tetris.niveaupour le niveau du joueur ettetris.scorepour le score du joueur.

Le niveau du joueur augmente de 1si le joueur a termin´e plus de 10×niveaulignes, le niveau maximal ´etant de 20. L’augmentation du score d´epend du nombre nombre lignes finies de lignes finies en verouillant le dernier t´etramino (entre 0 et 4), de la hauteur du t´etraminoymin et du niveaudu joueur suivant par la formule suivante :

ajout score= (tetris.niveau+ymin)×multiple o`u multipled´epend de nombre lignes finies:

nombre lignes finies 0 1 2 3 4 multiple 0 100 300 500 800

Références

Documents relatifs

This paper contributes a framework for ASP application programming which features the following concrete solutions: (i) inertial fluents for declarative reason- ing about program

Para el análisis de las trazas de TetrisAnalytics se realizan dos pruebas difer- entes con el n de evaluar la clasicación de los jugadores con respecto a sus movimientos

Among the first authors that addressed the problem of designing Tetris controllers, Tsitsiklis and Van Roy [36] applied a feature based value iteration algorithm and reported a score

J’ai évité les répétitions en utilisant des pronoms personnels ou des synonymes.. J’ai écrit mon texte

– Une description de votre impl´ementation et des choix que vous avez faits (par exemple comment vous avez impl´ement´e la chute des pi`eces ou le tirage al´eatoire de la

Nous présentons ces comparaisons figure 7 et 8 pour différentes valeurs d’angle  (15°, 45° et 90°) et dans les deux cas de figure : un perturbateur flottant (figure 7) ou

L’atelier de traduction avait pour but de leur faire (re-)découvrir le travail de traduction à partir d’un support différent et avec des enjeux plus vastes que la sanction de la

Plus tard, Bertsekas et Tsitsik- lis ont proposé l’algorithme λ-Policy Iteration et l’ont appliqué à Tetris (Bertsekas et al., 1996). Pour ce faire, ils ont proposé un ensemble