Projet POO : Programmation Orientee Objet Premi`ere anneeF Modalites Ce projet est `a realiser en binome. Vous indiquerez la composition de votre binome dans un chier denomme AUTHORS (place `a la racine du repertoire de votre projet) qui doit contenir les noms et logins UNIX des membres du groupe, un par ligne. Travail `a rendre : Vous devez rendre un mini-rapport de projet (5 pages maximum, format pdf) en plus de vos chiers sources. Vous y detaillerez les dicultes auxquelles vous avez ete confronte, et comment vous les avez resolues. Vous indiquerez egalement le nombre dheures passees sur les dierentes etapes de ce projet (conception, codage, tests, redaction du rapport) par chaque membre du groupe. Comment rendre votre projet : Vous deposerez sur ARCHE une archive (.zip ou .tar.gz) contenant le code source (toutes les classes, avec documentation) de votre projet ainsi que votre rapport. http://arche.univ-lorraine.fr/mod/assign/view.php?id=176315 Avant le 25 mars 2015, a` 23h55. (aucune soumission en retard ne sera acceptee) Evaluation : Un projet ne compilant pas sera sanctionne par une note adequate. Aucune soumission par email ne sera acceptee. Des soutenances individuelles de projet seront organisees `a une date ulterieure. Vous serez juge sur la qualite de votre programme et de sa documentation, celle de votre rapport et votre capacite `a expliquer son fonctionnement. F Travail personnel et honnetete Ne trichez pas! Ne copiez pas! Si vous le faites, vous serez lourdement sanctionnes. Nous ne ferons pas de distinction entre copieur et copie. Vous navez pas de (bonne) raison de copier. En cas de probl`eme, nous sommes pret `a vous aider. Encore une fois : en cas de doute, envoyez un courriel `a vos enseignants, ca ne les derange pas. Par tricher, nous entendons notamment : Rendre le travail dun coll`egue avec votre nom dessus; Obtenir une reponse par GoogleTM ou autre et mettre votre nom dessus; Recuperer du code et ne changer que les noms de variables et fonctions ou leur ordre avant de mettre votre nom dessus (moving chunks of code around is like moving food around on your plate to diguise the fact that you havnt eated all your brussel sprouts); Permettre `a un coll`egue de sinspirer de votre travail. Assurez vous que votre repertoire de travail nest lisible que par vous meme. Il est plus que tr`es probable que nous detections les tricheries. Chacun a son propre style de programmation, et personne ne code la meme chose de la meme mani`ere. De plus, il existe des programmes tr`es ecaces pour detecter les similarites douteuses entre copies (MOSS, http://theory.stanford.edu/~aiken/moss/). En revanche, il est possible (voire conseille) de discuter du projet et dechanger des idees avec vos coll`egues. Mais vous ne pouvez rendre que du code ecrit par vous-meme. Vous indiquerez dans votre rapport toutes vos sources dinspiration (comme les sites internet de vulgarisation de linformatique que vous auriez consulte). F Bibliographie Le probl`eme presente a ete initialement propose par John DeNero, Tom Magrino, and Eric Tzeng en 2014 en tant que Nifty Assignment au groupe dinteret ACM Special Interest Group on Computer Science Education (SIGCSE). Le sujet original peut etre consulte `a ladresse suivante : Projet 2015-2016 http://nifty.stanford.edu/2014/denero-ants-vs-somebees/ Il a ete adapte pour le langage Java par Joel Ross : http://faculty.washington.edu/joelross/courses/archive/f14/cs261/hwk/2/ La documentation de lAPI Java : http://docs.oracle.com/javase/8/docs/api/. F Presentation du probl`eme : Fourmis contre Abeilles Dans ce projet, vous allez creer un jeu de type tower defense , appele Fourmis contre Abeilles , inspire du jeu Plants vs. Zombies . Dans ce jeu, vous pouvez controler la reine des fourmis, et equiper votre colonie avec les fourmis les plus courageuses que vous pouvez trouver. Vos fourmis devront proteger leur reine des abeilles malveillantes qui attaquent votre territoire. En jetant des feuilles aux abeilles, les fourmis pourront enerver les abeilles et les faire fuir. Si vous narrivez pas `a proteger votre reine, elle sera attaquee par les abeilles et risque de mourir. Pour implementer ce jeux, on protera des avantages de la programmation orientee objet, en utilisant lheritage et le polymorphisme pour simplier la programmation et eviter la duplication de code. De plus, ce projet vous permettra de vous entraner `a travailler avec un large projet existant, notamment `a le lire et comprendre. F Objectifs Sentrainer `a la programmation objet avec heritage et polymorphisme Sentrainer `a la lecture, comprehension et modication de code existant F Fichiers necessaires Vous trouverez sur ARCHE (http://arche.univ-lorraine.fr/course/view.php?id=7973), un chier .zip contenant les images et squelettes du programme. Ce chier contient un grand nombre de chiers Java, qui implementent le cur du jeu. Il vous faudra importer ces chiers dans Eclipse. Le chier .zip contient dautres chiers additionnels. Le repertoire img contient des images et icones pour les fourmis, et le chier antlist.properties contient de linformation sur quel image va avec quel type de fourmis (ceci est un bon exemple de lutilisation dun chier externe pour stocker de linformation, ce qui permet de reutiliser et modier le programme sans recompiler). Il vous faudra mettre ces chiers dans le repertoire principal de votre projet Eclipse, pour obtenir ceci : (Attention : le repertoire img et le chier antlist.properties se trouvent `a linterieur du repertoire projet, et pas dans src!) F Le jeu Vous pouvez lancer le jeu en executant la methode principale de la classe AntsVsSomeBees.java. Vous devriez voir une interface ressemblant `a ceci (les commentaires en bleu decrivent comment jouer) : 2 Projet 2015-2016 Le jeu est pret `a etre joue! Vous pouvez placer des fourmis et essayer de defendre votre reine contre les abeilles. (Dans le code initial, les fourmis ne consomment pas de nourriture.) Ce jeu est compose de plusieurs composantes : Colony : Les fourmis vivent dans une colonie, cest-`a-dire un ensemble de tunnels, qui sont representes par des objets de type Place. La colonie a un stock de nourriture, necessaire `a la reproduction des fourmis. Seulement une fourmi peut occuper une Place (un endroit dans le tunnel), mais il ny a pas de limite sur le nombre dabeilles! Ants : Creer une fourmi supplementaire consomme de la nourriture; la quantite de nourriture necessaire varie en fonction du type de fourmi `a creer. Chaque type de fourmi peut faire des actions dierentes. Les deux types les plus simples sont la HarvesterAnt, qui produit une unite de nourriture par tour, et la ThrowerAnt, qui jette une feuille vers les abeilles chaque tour. Bees : Les abeilles vont voler `a travers les tunnels vers la reine, qui se situe tout `a gauche. Si une fourmi bloque le trajet dune abeille, elle va sarreter et piquer la fourmi. Un jeu de Fourmis contre Abeilles se joue en une serie de tours. Dans chaque tour, des abeilles peuvent entrer dans la colonie. (Vous pouvez rajouter des fourmis `a tout instant.) Apr`es, tous les insectes (fourmis, puis abeilles) executent leurs actions : les abeilles piquent les fourmis, et les fourmis jettent des feuilles vers les abeilles. Le jeu se termine dans deux cas : soit la reine a ete atteinte par une abeille (et vous avez perdu), soit toutes les abeilles ont ete eliminees par vos fourmis (et vous avez gagne). F Le code Limplementation de ce jeu utilise plusieurs classes comme pour tout programme oriente objet bien concu, chaque concept dans le jeu est implemente par sa propre classe. La classe AntColony modelise une colonie de fourmis. Elle contient les endroits dans la colonie, avec une interface publique qui restreint lacc`es `a ces endroits. Les endroits sont representes par la classe Place, qui modelise un seul placement dans un tunnel, et les insectes qui y resident. La classe Hive est une sous-classe de Place, elle contient des champs et methodes supplementaires pour tracer linvasion des abeilles. Les insectes eux-memes sont modelises par la classe Insect, avec une sous-classe pour les fourmis et une sous-classe pour les abeilles. Tout insecte a un emplacement (Place), une valeur de ARMOR, et une methode action() qui execute les actions de linsecte `a chaque tour. La classe Ant a dautres sous-classes pour les dierents types de fourmis, avec des variables et actions propres. Les deux classes de base, HarvesterAnt et ThrowerAnt, sont dej`a fournies pour que vous puissiez tester le jeu. Le jeu lui-meme est gere par la classe AntGame. Cette large classe est un JPanel sur lequel les fourmis et abeilles sont achees. De plus, il y a un Timer qui ache de facon recurrente de nouvelles instances du jeu pour visualiser son evolution. 3 Projet 2015-2016 Vous pouvez lancer le jeu avec la classe AntsVsSomeBees, qui contient la methode principale. Cette methode instancie un objet AntColony (vous pouvez regarder son JavaDoc pour plus de details) et un objet Hive, puis demarre le jeu. Quelques options qui pourront vous servir pour jouer : AntColony colony = new AntColony(1, 8, 0, 2); //is the default testing layout (one tunnel) AntColony colony = new AntColony(1, 8, 0, 10); //testing layout with 10 food AntColony colony = new AntColony(3, 8, 0, 2); //makes a full tunnel layout AntColony colony = new AntColony(3, 8, 3, 2); //makes a full tunnel layout with water (see below) Hive hive = Hive.makeTestHive(); //makes a simple hive with just a couple bees Hive hive = Hive.makeFullHive(); //makes a hive full of bees Hive hive = Hive.makeInsaneHive(); //makes a challenging hive! Vous pouvez modier et melanger ces constructeurs an de jouer `a des congurations de partie dierentes. Le code est organise dans deux paquetages. Le paquetage core contient la majorite des classes (le coeur du jeu). Le paquetage ants contiendra tous les dierents types de fourmis que vous allez creer! Vous serez amenes `a modier certaines de ces classes fournies, comme explique dans la suite. Il est conseille de lire le code pour avoir une idee de son fonctionnement. Pour cela, vous pouvez commencer avec la classe principale. Sachez que le code contient des concepts avances que vous navez peut-etre pas encore vus, comme des Maps, des listes chanees ou de la reexion. F Travail `a realiser Il est recommande de lire une premi`ere fois lensemble des consignes avant de commencer! Le projet est compose de nombreuses (mais generalement petites) taches que vous devez completer. Les sections marquees dune etoile (*) sont plus consequentes et plus complexes donc pensez `a organiser votre temps en fonction. Nourriture et moissonneuses Pour le moment, il ny a pas de cout de deploiement pour aucun type de fourmi, donc il ny aucun de dans le jeu. Il vous faut ajouter des couts en nourriture. Remarquez que les fourmis ont un cout en nourriture de 0. Vous pouvez redenir cela dans les sous-classes (ThrowerAnt et HarvesterAnt). Etant donne que la variable de cout de nourriture (foodCost) est protegee (protected), il est facile de le faire. Si vous allez plus loin dans les consignes, vous verrez que toutes les fourmis auront des couts en nourriture et des valeurs darmure dierentes. Comme ces valeurs seront toutes les memes au depart, elles seront speciees dans le constructeur pour chaque type de fourmi. Etant donne que nous devons tout de meme appeler le constructeur de la classe parente de tous les types de fourmis, il serait interessant davoir un constructeur de la classe parente qui inclut ces deux valeurs pour ainsi les initialiser plus facilement. Ajoutez ce type de constructeur. Speciez le cout en nourriture pour les classes de fourmis HarvesterAnt et ThrowerAnt (voir tableau ci-dessous), et veriez que vous ne pouvez pas deployer une fourmi si vous navez pas assez de nourriture! 4 Projet 2015-2016 Classe Nourriture Armure HarvesterAnt 2 1 ThrowerAnt 4 1 Vous utilisez maintenant de la nourriture, mais il ny a aucun moyen den produire plus! Pour remedier `a cela, nissez dimplementer la classe HarvesterAnt. En terme daction (denie dans la methode action()), les fourmis moissonneuses doivent produire 1 de nourriture pour la colonie `a chaque tour. Vous pouvez appeler la methode appropriee sur le param`etre AntColony pour ajouter cette nourriture. Essayez de lancer le jeu `a nouveau. Quand vous aurez place une HarvesterAnt, vous devriez `a present accumuler de la nourriture `a chaque tour. Vaincre les abeilles est `a nouveau possible avec la conguration par defaut du jeu! Fourmis murailles Maintenant vous allez creer votre premi`ere nouvelle fourmi. Vous allez ajouter de la protection `a votre glorieuse colonie en implementant la classe WallAnt qui est une fourmi qui ne fait rien `a chaque tour mais qui poss`ede une valeur darmure forte. Classe Nourriture Armure WallAnt 4 4 Noubliez pas de creer la classe WallAnt dans le package ants. Faites aussi attention de bien nommer vos fourmis correctement (la mecanique du jeu sappuie sur les noms speciques des fourmis pour fonctionner). La classe WallAnt aura besoin dinclure la methode action() (pourquoi?) mais elle na pas besoin de faire quoi que ce soit. Fourmis aamees Implementez une nouvelle unite oensive appelee la fourmi aamee (HungryAnt) qui devorera une abeille au hasard `a la meme place, tuant instantanement labeille! Cependant, apr`es avoir avale une abeille, la fourmi doit passer 3 tours `a la digerer avant de pouvoir en manger de nouveau. Classe Nourriture Armure HungryAnt 4 1 Vous pouvez implementer cette fonctionnalite en determinant la methode action() que la fourmi soit en train de digerer ou non. Vous pouvez utiliser des variables dinstance pour garder une trace du temps que la fourmi a passe `a digerer. Vous pouvez determiner combien de degats doit etre fait `a une abeille pour la tuer en utilisant la methode getArmor(). 5 Projet 2015-2016 Fourmis de feu Implementez `a present la fourmi de feu (FireAnt). Une fourmi de feu ne realise aucune action `a chaque tour. Cependant, elles poss`edent une competence speciale : quand la valeur darmure dune fourmi de feu atteint zero (ou moins), les valeurs darmure de toutes les abeilles au meme endroit dans le tunnel (Place) que la fourmi de feu sont reduites du montant de lattribut de degat (damage) de la fourmi (3 par defaut). Classe Nourriture Armure FireAnt 4 1 Pour implementer cela, vous devez redenir la methode reduceArmor() de la fourmi pour y ajouter cette fonctionnalite. Assurez-vous dappeler la version de la methode de la classe parent pour conserver le fonctionnement de base. Assurez-vous de donner `a votre fourmi de feu une variable de degat (damage) pour pouvoir la modier facilement; ne codez pas en dur la valeur des degats dans la methode reduceArmor()! Regardez la classe Place pour voir les methodes qui vous permettront dacceder `a la liste des abeilles `a blesser. Une fois la classe FireAnt implementee, assurez-vous que celle-ci fonctionne et testez votre programme en jouant une partie ou deux! Une fourmi de feu devrait detruire toutes les abeilles au meme endroit du tunnel que votre fourmi lorsque celle-ci meurt. Vous pouvez demarrer une partie avec 10 nourritures en speciant la valeur appropriee dans la methode principale de la classe AntsVsSomeBees. Eau* Maintenant que vous avez ajoute le feu, nous allons ajouter leau! Pour rendre les choses plus interessantes, vous allez ajouter un nouveau type de Place, representant un tunnel rempli deau dans la colonie. Notez que cela sera une des taches les plus complexes de votre travail, car vous serez ammenes `a modier certaines parties du programme coeur (core). Creer une nouvelle classe Water qui sera une sous-classe de Place (assurez-vous de creer cette classe dans le paquetage core). Vous aurez besoin de modier AntColony an quil inclut Water parmi les endroits/places possibles. Dans le constructeur, modiez les boucles an quau lieu de creer un nouvel objet Place, cela cree periodiquement un nouvel objet Water en fonction du param`etre moatFrequency. Astuce : ajoutez une simple instruction if pour determiner si le tunnel doit etre une Place ou de leau (Water). Vous devrez etre capable dinstancier de nouveaux objets Water en utilisant les memes types de param`etres que le code actuel pour creer une nouvelle Place. Assignez le nouvel objet Water `a la variable curr et tout doit fonctionner. Vous devrez creer un objet Water tout les moatFrequency places. Vous pourrez faire cela en veriant si chaque variable step est divisible par la valeur cible. Par exemple, si vous voulez inclure Water toutes les troisi`emes places, vous pouvez placer Water en 0, 3, 6, etc. (Mais reellement, vous devrez ajouter 1 pour que ce soit les places 1, 4, 7, etc). Cela peut etre delicat rappelez vous de loperateur modulo %! Rappelez vous aussi de ne pas inclure deau si moatFrequency vaut 0! Ensuite, vous aurez besoin de modier la classe AntGame an que leau soit visible. Cela peut etre dicile, car beaucoup de choses sont gerees dans AntGame! Regardez la methode qui dessine une colonie. Dans cette methode, vous devriez voir que la bordure de la place est dessinee comme un simple rectangle. Vous pouvez dessiner leau (Water) en remplissant simplement un rectangle bleu avant de dessiner cette bordure! Vous aurez besoin de determiner si une Place correspond `a de leau (rappelez-vous que le polymorphisme signie que Water est egalement une Place). Cest le bon endroit pour utiliser loperateur instanceof. 6 Projet 2015-2016 Testez si leau apparat eectivement dans le jeu! Une fois leau ajoutee, vous devrez vous assurer que les insectes y reagissent. Seuls certains insectes (watersafe) peuvent etre places sur une place Water. Ajoutez un nouvel attribut watersafe `a la classe Insect pour conserver cette propriete. Cet attribut doit etre `a faux par defaut. Vous aurez probablement besoin dune methode dacc`es (un getter) pour cet attribut. Comme les abeilles peuvent voler, leur attribut watersafe sera vrai, redenissez la valeur par defaut dans ce cas. Une fois que cela fonctionne, vous ne devriez plus pouvoir placer des fourmis sur des points deau! Fourmis sous-marines Creez un nouveau type de fourmis qui peuvent etre deployees sur des points deau! Ajoutez une fourmi ScubaThrowerAnt qui est un type de ThrowerAnt qui ne craint pas leau (watersafe), mais qui est identique `a la classe parent sinon. Class Food Armor ScubaThrowerAnt 5 1 Fourmis ninja Ajoutez une fourmi NinjaAnt, qui endommagent toutes les abeilles (Bees) quelle rencontre, mais qui nest jamais vue par celles-ci (donc permettant les abeilles de la traverser). Class Food Armor NinjaAnt 6 1 Une fourmi NinjaAnt ne peut pas etre attaquee par une abeille car elle est cachee, ni ne peut bloquer le chemin dune abeille car elle la survole. Pour implanter ce comportement, ajoutez un nouvel attribut `a la classe Ant qui indique si une fourmi bloque le chemin dune abeille (ce qui sera faux pour une fourmi NinjaAnt). Modiez la methode isBlocked() de la class Bee an quune abeille ne soit pas bloquee si une fourmi ne la bloque pas. Maintenant, les abeilles devraient pouvoir survoler correctement les fourmis ninja. Enn, faites en sorte que NinjaAnt endommage toutes les abeilles qui la survolent. La methode action() de NinjaAnt doit endommager toutes les abeilles qui sont sur la meme place au travers de la valeur damage (qui doit valoir 1 par defaut). Comme challenge, essayez de gagner un jeu par defaut en utilisant uniquement des fourmis HarversterAnt et NinjaAnt! Fourmis boucliers* Pour linstant, vos fourmis sont fragiles. Nous aimerions leur donner un moyen de tenir plus longtemps sous lassaut des abeilles. Cest l`a quentre en sc`ene la fourmi bouclier (BodyguardAnt). Class Food Armor BodyguardAnt 5 2 7 Projet 2015-2016 La fourmi bouclier di`ere dune fourmi normale car elle peut occuper la meme Place quune autre fourmi. Lorsqune fourmi bouclier est ajoutee sur lemplacement dune autre fourmi, elle la prot`ege des degats. Les attaques doivent impacter la fourmi bouclier en premier, puis lautre fourmi une fois que la fourmi bouclier a peri. Limplantation de cette fourmi se fait en plusieurs etapes : Normalement, seule une fourmi peut occuper une Place `a un moment donne. La premi`ere chose `a faire est de changer cela. Il faut pouvoir denir un nouveau type de fourmi qui est capable de contenir une autre fourmi. Il est envisageable davoir besoin un jour de plusieurs types de fourmis contenantes (par exemple des sous-classes dautres types de fourmis). Ce comportement doit etre specie en utilisant une interface nommee Containing. Linterface Containing doit supporter trois methodes : la capacite dajouter linsecte contenu (qui doit indiquer si linsecte a bien ete ajoute ou non), la capacite de supprimer linsecte contenu (qui doit indiquer si linsecte a bien ete supprime ou non), et la capacite dobtenir linsecte contenu. Maintenant,vous avez besoin de modier la classe Place an quelle puisse recevoir une fourmi Containing qui peut elle-meme contenir une autre fourmi. Vous devez modier la methode dajout dune fourmi de la mani`ere suivante : (a) Si la fourmi occupant dej`a la Place est une Containing, ajouter la nouvelle fourmi `a celle Containing. (b) Si la fourmi que vous essayer dajouter est une Containing, prendre la fourmi dej`a en place, ajouter celle-ci `a la Containing, et ajouter enn la fourmi Containing `a la place de la premi`ere. (c) Si la Containing ne peut pas contenir la fourmi speciee (addContenantInsect() retourne faux), acher la meme erreur que precedemment. (d) Si aucune des fourmis nest une Containing, acher la meme erreur que precedemment. Vous aurez egalement besoin de modier la methode removeInsect(Ant) de telle sorte que, si la fourmi `a supprimer est `a linterieur dune Containing, elle soit supprimee depuis celle-ci. De meme, si la fourmi `a supprimer est une Containing, celle-ci est supprimee et si elle contient une autre fourmi, cette derni`ere prend sa place. Vous aurez egalement besoin de mettre `a jour la methode getAllAnts() de AntColony de telle sorte qu`a la fois la fourmi Containing et la fourmi contenue soient incluses dans la reponse. Vous devrez aussi vous assurer que les deux fourmis apparaissent dans le jeu. Pour ce faire, vous devrez modier la methode drawColony() de AntGame une nouvelle fois. Apr`es avoir verie si une Place a une fourmi, veriez si cette fourmi est une Containing et, si tel est le cas, dessinez la fourmi contenue en plus de la Containing. Vous pouvez utiliser les memes param`etres de positionnement pour la methode g2d.drawImage(). Dessinez simplement la fourmi contenue en premier (pour quelle apparaisse `a larri`ere), et ensuite la Containing. Une fois tout prepare, vous pouvez creer la classe BodyguardAnt! Cette classe doit bien sur implanter linterface Containing! Pour avoir acc`es `a la fourmi contenue dans une BodyguardAnt, utilisez une variable dinstance. Elle sera initialisee `a null pour indiquer quaucune fourmi nest actuellement protegee. Veillez `a faire une encapsulation propre (variable privee!). Vous devrez vous assurer que la fourmie contenue continue deectuer ses propres actions. Surchargez la methode action() du BodyguardAnt en fonction. Soyez rigoureux lors de lelaboration de cette fourmi bouclier. Elle touche en eet de nombreuses parties du code qui peuvent produire de nombreuses erreurs. La Reine* Pour nir, vous rendrez possible le positionnement de la reine elle-meme dans une galerie. 8 Projet 2015-2016 Classe Nourriture Armure QueenAnt 6 1 La reine (QueenAnt) est resistante `a leau (waterproof) et attaque `a distance (comme ScubaAnt, que vous devriez utiliser en tant que classe parente). La reine galvanise les fourmis `a proximite. En eet, elle double les dommages causes par les fourmis voisines (Celles de la place dentree et de sortie). Pour vous assurer que vous ne doubliez pas la meme fourmi deux fois, vous pouvez conserver une liste des fourmis qui ont dej`a ete galvanisees. Vous pouvez avoir besoin dajuster lheritage de lattribut damage an dinteragir avec nimporte quelle fourmi, quelque soit son type. Vous pouvez egalement ecrire une interface Damaging, avec des accesseurs et modicateurs appropries. Un grand pouvoir implique de grandes responsabilites La reine est soumise `a trois r`egles speciales : (a) Si une abeille entre sur la place occupee par la reine, alors les abeilles gagnent immediatement la partie. Le jeu termine, meme si la reine est protegee par une fourmi bouclier (BodyGuardAnt). Les abeilles gagent egalement dans le cas ou` lune dentre elles atteint la n dune galerie (L`a ou` reside, en temps normal, la reine). La methode queenHasBees() de la classe AntColony indique si lune des abeilles a atteint la reine. Ceci est determine en veriant si this.queenPlace.getBees().length 0. Actuellement, la variable queenPlace est une place ordinaire. Implementez QueenPlace, une sous-classe de Place. Cette derni`ere represente concr`etement deux places : Ou` est actuellement la reine, et la place queenPlace qui termine toutes galeries. Indice : Ce devrait etre une place qui en contient une seconde; cette seconde place fait reference `a la position actuelle de la reine. Vous aurez besoin de redenir laccesseur getBees() an quil renvoie les abeilles de la premi`ere et de la seconde place. Dans la methode action() de QueenAnt, mettez `a jour lattribut queenPlace de la colonie, avec une nouvelle instance de QueenPlace comprenant la place courante de la reine. Il est necessaire dajouter un accesseur et un modicateur pour lattribut queenPlace. (b) Il ne peut y avoir quune vraie reine en jeu. Toutes les autres reines sont des imposteurs et devraient mourir instantanement (armure reduite `a 0) avant dengager une action (Elle nattaque pas et ne galvanise pas les fourmis voisines). De plus, elles ne devraient pas aecter lattribut queenPlace de la colonie. Pour ce faire, vous pouvez utiliser une variante du patron de conception Singleton1 (Vous laborderez certainement en genie logiciel). Son implementation se resume `a conserver le nombre de fois que la classe QueenAnt a ete instanciee. Vous devrez utiliser une variable de classe (statique). Chaque fois quune reine est creee, incrementez cette variable de un. Vous ne devriez pas avoir besoin de parcourir la colonie de place en place pour trouver les imposteurs. (c) La vraie reine ne devrait pas pouvoir etre supprimee; toutes tentatives de suppression, ne devrait avoir aucun eet. Idee : Vous pourriezecrire une interface que la classe QueenAnt et dautres pourrait implementer et utiliser un test de type pour determiner si linsecte est supprimable. Vous etes arrivees `a la n! Alors? Parvenez-vous `a battre ces abeilles dans le mode fou (insane-mode)? 1. Voir https://fr.wikipedia.org/wiki/Singleton_(patron_de_conception) 9 Projet 2015-2016 F Bonus Il y a de nombreuses mani`eres denrichir ce jeu! Nous vous avons fourni des images (et leur support dans linterface graphique) pour de nouveaux types de fourmi. Vous pouvez egalement concevoir vos propres types de fourmi! Classe Nourriture Armure Description SlowThrowerAnt 4 1 Applique un eet de ralentissement de trois tours. Une abeille ralentie eectue une action apr`es en avoir passe 2. StunThrowerAnt 6 1 Applique un eet detourdissement pour 1 tour. Une abeille etourdie passe son tour. ShortThrowerAnt 3 1 Une ThrowerAnt qui lance des feuilles aux abeilles situees au plus `a 2 places de la fourmi. LongThrowerAnt 3 1 Une ThrowerAnt qui lance des feuilles aux abeilles situees au moins `a 4 places de la fourmi. Vous pourriez aussi creer de nouveaux types dabeilles (Cette extension peut demander un grand nombre de modications et dajouts). Les extensions peuvent vous rapporter jusqu`a 2 points de bonus. Assurez-vous toutefois que les fonctionnalites rudimentaires sont implementees et fonctionnent correctement. 10
Programming
[Solved] SOLVED:ANTS V BEES SOLUTION
$25
File Name: SOLVED:ANTS_V_BEES_SOLUTION.zip
File Size: 254.34 KB
Only logged in customers who have purchased this product may leave a review.
Reviews
There are no reviews yet.