Partiel – Le jeu du casseur de rochers

Transcription

Partiel – Le jeu du casseur de rochers
Université Pierre et Marie Curie (UPMC) – Master d’Informatique – M1/STL/CPS
1
Partiel – Le jeu du casseur de rochers
Frédéric Peschanski
Mars 2012
Durée : 2 heures
Document autorisé : Notes de cours
Introduction
Ce devoir consiste à formaliser, à l’aide du langage de spécifications de services vu en cours, un modèle
légèrement simplifié du jeu : «le casseur de rochers» ou boulder dash TM (également connu sous le nom
emerald mine, rocks & diamonds, . . . ).
Important : l’objectif de ce devoir est d’exploiter au mieux les constructions du langage de spécification
étudié en cours. On souhaite obtenir une spécification cohérente, complète et bien modulaire.
Cahier des charges
L’objectif du jeu est de mener le héro — originellement connu sous le nom de Rockford — dans un dédale
sous-terrain à la recherche de diamants.
Les principaux concepts à formaliser pour ce jeu sont les sui0000000
1111111
000000
111111
0000000
1111111
000000
111111
000000
111111
vants :
0000000
1111111
000000
111111
0000000
1111111
000000
111111
000000
111111
0000000
1111111
000000
111111
0000000
1111111
000000
111111
000000
111111
– le héro (en jaune) que l’on déplace dans les quatre directions 1111111
0000000
000000
111111
0000000
1111111
000000
111111
000000
111111
0000000
1111111
000000
111111
0000000
1111111
000000
111111
000000
(gauche/droite et haut/bas),
0000000111111
1111111
000000
0000000111111
1111111
000000111111
000000
111111
0000000
1111111
000000
111111
0000000
1111111
000000
111111
000000
111111
000000
111111
– les blocs graphiques qui composent le terrain de jeu,
000000
111111
000000
111111
– les blocs vides (fond noir) dans lesquels le héro peut se
000000
111111
000000
111111
déplacer librement,
000000
111111
000000
111111
– les blocs en terre que le héro peut creuser (il deviennent
000000
111111
000000
111111
alors vides),
000000
111111
000000
111111
000000
111111
– les murs qui sont infranchissables et indestructibles,
000000
111111
000000
111111
– les rochers que le héro peut pousser à gauce et ou à droite
000000
111111
000000
111111
vers des blocs vides et qui tombent vers le bas lorsqu’ils se
000000
111111
000000
111111
retrouvent sous des blocs vides (attention à la tête !),
000000
111111
000000
111111
000000
111111
– les diamants que le héro doit ramasser. Si un diamant
000000
111111
000000
111111
se trouve au dessus d’un bloc vide, alors il peut égale000000
111111
000000
111111
ment tomber comme un rocher . . . et écraser le héro ! (en
000000
111111
000000
111111
revanche, on ne peut pousser un dimant puisqu’on le ra000000
111111
000000
111111
masse en se déplaçant vers lui),
000000
111111
– la sortie (unique) fermée à l’origine et qui ne s’ouvre que
lorsque tous les diamants du terrain ont été collectés.
On donne ci-dessous l’ensemble des services à modéliser, mais on pourra les formaliser dans un ordre
quelconque. Cet ordre ne pourra être déterminé qu’après lecture complète du cahier des charges et
premières ébauches au brouillon. On pourra aussi ajouter des services auxiliaires, si on le juge nécessaire
ou utile.
Université Pierre et Marie Curie (UPMC) – Master d’Informatique – M1/STL/CPS
2
Terrain de jeu
Le service Terrain représente un niveau de jeu qui est composé d’un ensemble de blocs disposés selon un
rectangle. Chaque coordonnée (i, j) dans ce rectangle correspond à un bloc. Sur la figure du jeu ci-dessus,
le bloc aux coordonnées (1, 1) est le mur en haut à gauche, juste au dessus de la sortie en (1, 2). Le bloc
en (2, 2) (à droite de la sortie) est vide et le bloc en (1, 3) (en dessous de la sortie) est en terre. Un rocher
en (3, 4) est en train de tomber sur le héro localisé en (3, 6). Si ce dernier reste immobile pendant encore
deux pas de jeu il sera écrasé par le rocher et la partie sera terminée. Pour éviter cette issue fatale, il
peut creuser en se déplaçant vers le bloc de terre en (2, 6) ou il peut collecter le diamant en (4, 6) par un
déplacement vers la droite . . . bonne opération !
Le héro peut également se déplacer vers le haut pour se rapprocher du rocher, mais cette direction lui
sera fatale !
Pour simuler un terrain «infini» on considère que les coordonnées sont cycliques. Par exemple le bloc
situé en dessous du héro devrait être aux coordonnées (3, 7) mais on «sort» alors du terrain. Ce bloc en
(3, 7) est fusionné avec le bloc en (3, 1) (au milieu en haut) qui est un mur. De ce fait, le héro ne peut se
déplacer vers le bas puisqu’il est bloqué par le mur (3, 1). Si le bloc en (3, 1) était vide, le héro pourrait
se déplacer vers le bas et serait «téléporté» dans le bloc (3, 1).
La taille du terrain de jeu sera fixée lors de la construction, et les blocs seront par défaut tous vides avec
le joueur en haut à gauche. On pourra modifier un bloc à une coordonnées spécifiée en faisant attention
de bien respecter les invariants du jeu (ex. : un seul joueur dans le terrain).
Blocs
Le service Bloc permet de modéliser la base commune des objets manipulés dans le jeu : en pratique des
rectangles graphiques mais dans le modèle la représentation graphique peut être abstraite. Les différentes
catégories de blocs sont : Vide, Terre, Mur, Hero, SortieFermee, SortieOuverte, Rocher, Diamant.
Moteur du jeu
Le service MoteurJeu modélisera le jeu lui-même avec comme principale opération le calcul d’un pas de
jeu. Lors de ce calcul, on pourra passer en paramètre un déplacement éventuel du héro dans une direction
gauche, droite haut ou bas et on met à jour le terrain. Par exemple, si le joueur creuse un bloc de terre,
ce dernier sera remplacé par le bloc héro et l’ancien bloc héro sera lui remplacé par un bloc vide. Autre
exemple : un rocher avec un bloc vide sous-lui prendra la place de ce dernier, et le rocher sera remplacé
par un bloc vide.
Remarque : le nombre maximal de pas de jeu sera fixé à l’avance.
On prendra soin de détecter la fin du jeu : partie gagnée ou perdue avec un observateur adéquat. On ne
pourra entreprendre un pas de jeu supplémentaire si la partie est terminée. Les possibilités de terminaison
de partie sont les suivantes :
1. le joueur se déplace vers la sortie ouverte : la partie est gagnée !
2. le joueur reçoit un rocher ou un diamant sur la tête : la partie est perdue !
3. le nombre maximal de pas de jeu est atteint : la partie est perdue !

Documents pareils