Projet de Programmation Orientée Objets
Licence 3,
2005-2006
Borodino
Auteurs: MM. G. Capron, B. Gentou, Y. Jurski, J-B. Yunès. Sous le contrôle de M. E. Asarin.
On déterminera après analyse puis on implémentera en langage Java les structures objets réalisant un jeu baptisé Borodino.
Le jeu se déroule sur un plateau, simple grille de cases.
Les pions sont de différents types. Certains se déplacent de façon élémentaire: un pion ne passe d'une case à une autre que si les deux cases concernées sont directement voisines.
Lorsqu'au moins deux pions se situent sur une même case des combats s'engagent, à l'issue desquels un seul pion reste (un seul gagnant).
À chaque tour de jeu, les pions qui le peuvent se déplacent et d'eventuels combats s'engagent, ainsi de suite. On déterminera soi-même ce qui constituera la fin du jeu.
Il existe différents types de pions:
À chaque pion correspond:
Dès que deux pions sont en présence un combat s'engage à l'issue duquel l'un des pions disparaît du plateau. L'engagement commence après que l'un des deux pionss ait été choisi comme attaquant (c'est-à-dire celui qui inflige des dommages). Ces dommages sont fonction de la force de frappe de l'attaquant, et constitue pour le défenseur une perte correspondante de vitalité. Ensuite les rôles s'inversent et ce jusqu'à ce que l'un des deux protagonistes perdent toute sa vitalité. À ce moment, le gagnant hérite du perdant ses points d'héritage, qui lui permettent de reconstituer sa vitalité.
Un tour de jeu est d'abord constitué par le déplacement des pions (les pions simulés se déplacent selon un algorithme à déterminer, les pions des joueurs se déplacent au gré du bon vouloir de ces derniers), puis par la résolution des combats. Il est possible qu'à un instant donné plusieurs pions soient sur la même case. En ce cas, une suite de combats s'engagent de telle sorte qu'à la fin reste plus qu'un seul pion sur cette case. Un combat ne faisant intervenir que deux protagonistes, on choisira donc sur un critère non fixé (mais à déterminer!) deux pions parmi ceux présents sur la case, et ce tant, que cela est possible.
On remarquera que cette spécification est incomplète, c'est à la fois volontaire (comment le jeu se termine-t-il ?) et inévitable (les auteurs sont humains ?). Il faudra donc rendre à la fois cohérente et complète cette spécification (une lecture attentive et une analyse sont donc nécessaires). Il faudra notamment spécifier les règles exactes de calcul des dommages, et de la modification de la vitalité, de la force de frappe et/ou de l'héritage (on peut imaginer que plus on gagne de combats plus on est fort, etc).
Ensuite, il faudra déterminer quels sont les «concepts» pertinents nécessaires à une mise en place/simulation «objet» du problème.
Il est aussi demandé d'implanter le tout dans le langage Java, langage dans lequel il est rappelé qu'une conception objet s'implémente normalement assez naturellement.
On notera qu'aucun graphisme évolué n'est demandé: il ne faut pas perdre de temps à cela! Un simple affichage utilisant des caractères standards suffira bien assez. La présence d'une telle interface ne sera jugée et appréciée que si la conception globale du programme est intéressante.
Des extensions sont possibles à condition qu'elles s'intègrent naturellement dans la conception, c'est-à-dire sans en modifier les fondements... De plus ces extensions ne doivent être envisagées que si la réalisation du sujet de base fonctionne déjà, elles ne seront donc jugées et appréciées que dans ce cas. Ainsi il sera possible (donc non nécessaire ni exhaustif):
Nous insistons sur le fait que le programme devra être réalisé en
utilisant une structuration objet des concepts. Le choix des
interfaces/classes et objets devra être longuement pensé. D'autre part,
l'utilisation justifiée de classes Java
prédéfinies dans les
packages par défaut sera jugé comme un point positif (inutile et absurde de
réinventer la roue à chaque fois).
Il est demandé de documenter correctement les classes et interfaces
conçues, l'utilisation de javadoc
est très fortement
recommandée.
Un rapport faisant état des reflexions menées et des choix de conceptions réalisés devra accompagner le code source.
Ce projet fera l'objet d'une soutenance au cours de laquelle l'ensemble du groupe ayant travaillé dessus devra être présent (aucune abscence ne sera tolérée) et chaque individu sera encouragé à intervenir. Une petite préparation de cette soutenance sera bienvenue.
Le projet devra être réalisé par groupe de 2 ou 3 personnes (ni plus, ni moins).
Les dates de remise de projet et de soutenances seront précisées ultérieurement et communiquées par les enseignants et par voie d'affichage (Web et panneaux).
On notera que le conseil d'UFR a voté à l'unanimité qu'aucune dispense de projet ne sera accordée pour le cours de programmation orientée objet. Un étudiant ne présentant pas de projet sera donc crédité de la note 0.