Partiel 2013 - Master informatique

Transcription

Partiel 2013 - Master informatique
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
1
Partiel BombermanTM !
Binh-Minh Bui-Xuan
Mars 2013
Durée : 2 heures
Document autorisé : Notes de cours
Introduction
Ce sujet de partiel fait partie d'un devoir global (partiel+projet) consistant à formaliser, à l'aide du
langage de spécications de services vu en cours, un modèle légèrement simplié du mode multi-joueur
du jeu
BombermanTM
version
DOS,
développé par Hudson Soft en 1992 sous le nom de
Dyna Blaster.
Dans cet épisode de la série, le héros, l'adorable et certainement très adoré Cheerful White dans sa quête
pour délivrer la lle du Dr. Mimori, son inventeur, décide d'attaquer à coups de dynamite l'étage le
plus haut d'un bâtiment très hightech . Le kidnappeur, riche propriétaire desdits locaux hightech, n'est
rien d'autre que le magnique autre invention du même Dr. Mimori, le fameux Cool Black. Cet étage
du bâtiment est également peuplé de misérables vilains fauchés, qui ne s'intéressent qu'à l'argent et la
capture du héros ou du kidnappeur, peu leur importe : ce sera pour eux une promotion chez le riche
victorieux, ou l'argent du riche capturé le cas échéant.
Cahier total des charges (partiel + projet)
On donne ci-dessous un aperçu des services à modéliser dans le cadre du projet réalisé dans l'UE. Cependant, seuls les services décrits par la suite de l'énoncé sont à modéliser pour le partiel.
le héros (bonnet blanc) que l'on peut soit déplacer dans
les quatre directions (gauche/droite et haut/bas) soit
faire fabriquer une bombe à l'endroit où il se trouve,
le kidnappeur (bonnet noir) que l'on peut faire faire
les mêmes opérations,
les vilains (bleus et oranges) explosibles à la dynamite,
les blocs graphiques qui composent le terrain de jeu :
les blocs vides (fond vert) dans lesquels le héros, le
kidnappeur, et les vilains peuvent se déplacer librement,
les murs en brique (gris non-uni) explosibles à la
dynamite : le mur en question devient alors soit un
bloc vide, soit un objet consommable appelé power-
up,
les murs métalliques (gris uni) infranchissables,
immobiles et indestructibles,
les power-ups que le héros et le kidnappeur peuvent
utiliser pour diverses conséquences merveilleuses,
les bombes que le héros et le kidnappeur peuvent créer
rien qu'avec leurs mains pleines de doigts( !).
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
2
Enoncé du partiel
L'objectif du partiel est d'exploiter au mieux les constructions du langage de spécication étudié en cours.
On souhaite obtenir une spécication cohérente, complète et bien modulaire. Il est vivement conseillé de
lire la totalité de l'énoncé et faire des ébauches au brouillon. Décrire les services suivantes :
Terrain de jeu
Le service
Terrain représente l'étage le plus haut du complexe hightech que possède maintenant Cool Black.
Ce niveau richement décoré et étrangement peuplé sera décrit avec plus de précision dans l'énoncé du
projet de l'UE. Pour l'instant, le terrain est composé d'un ensemble de blocs disposés selon un rectangle.
Chaque coordonnée
(i, j)
dans ce rectangle correspond à un bloc. La taille du terrain sera xée lors de
la construction (13 lignes et
15
colonnes dans le jeu original), et les blocs seront par défaut tous vides et
ne contient pas de trésor.
Le service
Bloc permet de modéliser la base commune des objets propres au bâtiment du beau kidnapVide, MurBrique,
peur. Chaque bloc doit permettre notamment des observateurs donnant son type (
MurMetal)
et l'éventuel trésor qui y est caché (
Rien, PowerUp1, PowerUp2,
etc).
Bombe
Le service
Bombe permet la gestion des bombes présentes pendant le combat. Les bombes sont des objets
fragilement explosibles que le héros et le kidnappeur créent à souhait tant qu'il leur reste un soue de
vie. Selon la force vitale de chacun, la bombe ainsi larguée aura une amplitude spécique (entre
3
et
11
généralement). On suppose que toute bombe est à retardement et explose après un certain nombre donné
de pas de jeu : compte à rebours initialisé par une valeur xée à l'avance (10 par exemple).
Moteur du jeu
Le service
MoteurJeu modélisera le jeu lui-même. A terme, ce service devrait permettre des observateurs
donnant le terrain de jeu, la liste des bombes présentes, la liste des vilains en vie, les coordonnées du
héros/kidnappeur, ainsi que leur état de santé. Pour simplier pendant le partiel, ce service ne supervisera
que le terrain de jeu, la liste des bombes présentes, et les coordonnées du héros, initialement ayant valeur
(2, 2),
ainsi que son état de vie, initialement jeune et fort. Le service aura 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éros dans une direction gauche, droite, haut ou bas, ou encore l'action consistant à fabriquer une bombe
là où il se trouve. On mettra à jour le terrain et la liste des bombes le cas échéant (ceci dit, pour le partiel
la mise à jour du terrain est triviale puisqu'il n'y a que des blocs vides). Puis, on doit aussi superviser
les explosions éventuelles des bombes présentes dans la liste. On suppose que l'explosion d'une bombe
détruit simultanément tout ce qui se trouve dans la même ligne ou le même colonne de celle-ci, sauf
ceux qui se trouvent strictement plus loin que l'amplitude de la bombe. Le nombre maximal de pas de
jeu sera xé à l'avance et on prendra soin de détecter la n du jeu avec un observateur adéquat : partie
gagnée ou perdue, voir nulle, selon le point de vue de chacun. 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 héros explose tout seul comme un grand, le kidnappeur est victorieux et vit avec sa captive dans la
richesse jusqu'à la n de leurs jours ; 2. le héros survit (malgré lui) après que le nombre maximal de pas
de jeu est atteint, la partie est nulle, et les spectateurs se contenteront d'attendre le prochain épisode.
Exemple d'un pas de jeu : notre héros intrépide décide de larguer une bombe d'amplitude
3. Le moteur
de jeu devra superviser la création ainsi que l'ajout d'une nouvelle bombe aux attributs souhaités dans la
liste des bombes présentes sur le champs de bataille. Par exemple, celle-ci dès sa création doit s'apprêter
à détonner après un certain nombre donné de pas de jeu xé à l'avance : valeur du compte à rebours xé
à
10 par exemple. On parcourt ensuite la liste des
autres bombes déjà présentes sur le champs de bataille
et on décrémente leur compte à rebours. Maintenant, une bombe explose si (et seulement si) son compte
à rebours atteint la valeur
0.
L'explosion d'une bombe réduit en cendre tout ce qui se trouve à sa porté :
ainsi, une bombe à l'amplitude
(7, 13), (12, 8), (2, 8),
5
explosant en position
(7, 8)
détruira ce qui se trouve en position
etc, mais pas ce qui se trouve en position
(7, 14)
ni en
(6, 7).
(7, 8),
Université Pierre et Marie Curie (UPMC) Master d'Informatique M1/STL/CPS
3
L'ajout du mur métallique
Un bloc de type
MurMetal
représente un mur métallique : un pilier indestructible, immobile, infran-
chissable, ne contenant pas de power-up et qui, en plus, bloque les lignes de destruction provoquées par
l'explosion d'une bombe, peu importe l'amplitude de la bombe. Ainsi, s'il existait un mur métallique
en position
(7, 11),
le héros en position
(7, 13)
sera sauvé de l'explosion d'une bombe placée en
(7, 8).
Décrire les modications/ajouts à eectuer dans vos specications si le terrain contient des blocs de type
MurMetal.