2012 Rapport final La Guerre d’ESIL Projet - Programmation Orientée Objet Jeu de Stratégie réalisé en JAVA par deux étudiants de l’ESIL Encadré par M. Sébastien Mavromatis Julien Bergé – Jimmy Chauveau 2/13/2012 SOMMAIRE I. Préambule ................................................................................................................................................................. 3 II. Règle du Jeu .............................................................................................................................................................. 3 III. Déroulement d’une partie ........................................................................................................................................ 5 IV. Les différents fichiers ................................................................................................................................................ 9 1. Carte.java ................................................................................................................................................................ 10 2. Joueur.java .............................................................................................................................................................. 11 3. Animal.java ............................................................................................................................................................. 12 4. Combat.java ............................................................................................................................................................ 12 5. L’interface graphique .............................................................................................................................................. 12 6. Jeu.java ................................................................................................................................................................... 13 V. Difficultés rencontrées ............................................................................................................................................ 13 VI. Conclusion .............................................................................................................................................................. 13 2 Préambule | Julien Bergé – Jimmy Chauveau Projet P.O.O I. [RAPPORT FINAL] PREAMBULE Dans le cadre de nos études, les enseignants nous ont demandé de réaliser un projet de Programmation Orientée Objet afin de mettre en pratique nos compétences. Le fil conducteur de notre sujet était le jeu de la vie, mais il nous a été permis d’interpréter et d’extrapoler comme on le souhaitait du moment qu’il existait une vraie interaction entre les objets dans notre programmation. Nous avons arbitrairement choisi de programmer en JAVA. En effet, nous avons eu l’occasion de tester plusieurs langages de programmation objet, le JAVA nous parait plus intuitif et adapté à notre but. De plus, nous comptons utiliser le logiciel Eclipse pour programmer, ce logiciel étant celui sur lequel nous avons appris le JAVA. Pendant la réalisation du jeu, Julien étant plus à l’aise dans la programmation s’est occupé de la structure du projet, de l’implémentation des fonctions de déplacements et de la romance du jeu. Jimmy s’est occupé de la réalisation des fonctions concernant la matrice, de l’affichage de la carte et des schémas UML. Cependant, bien qu’il semble difficile de réaliser un projet de la sorte à plusieurs, nous avons facilement mis nos avancements en commun. Tout d’abord, grâce à l’utilisation de « Dropbox » qui nous a permis de mettre à jour des fonctions dès que l’un de nous deux avait travaillé sur le projet. De plus, nous nous sommes plutôt bien réparti les tâches et avons facilement utilisé des fonctions que l’autre avait faites, le code reste à ce jour aussi clair. II. REGLE DU JEU Sur une carte en deux dimensions, deux iles seront représentées. L’indien sur l’Amérique et l’Européen sur l’Europe, le but du joueur sera de récolter les ressources nécessaires (bois, nourriture, or, pierre) afin de créer un bateau et d’atteindre l’ile adverse. Le joueur devra aussi se nourrir en mangeant des animaux et éviter de se faire attaquer par d’autres. 3 Préambule | Julien Bergé – Jimmy Chauveau Les touches violettes permettent de se déplacer sur la carte. Ensuite il faut se trouver sur le bloc ressource pour pouvoir la récolter : La touche o, en jaune, permet de récolter de l’or La touche p, en gris, permet de récolter de la pierre La touche b, en vert, permet de récolter du bois Il faut obtenir 100 unités de chaque ressource pour pouvoir créer son bateau. Cependant, le joueur perd un point de vie à chaque tour, il lui est donc nécessaire de manger en appuyant sur la touche m, en rouge. Pour pouvoir avoir de la nourriture, il faut tuer des animaux : Une dinde, qui bouge tous les 5 tours, meurt en une seule fois et rapporte 20 de nourriture Un sanglier qui bouge tous les 2 tours, meurt en 2 fois et rapporte 50 de nourriture. Le lion est le seul animal qui ne rapporte pas de nourriture, qui bouge à chaque tour et qui n’est donc là que pour nuire à l’homme. Une fois les ressources nécessaires à la création du bateau le joueur devra se diriger vers l’océan, là il se transformera systématiquement en mode bateau. Son but sera de rejoindre l’autre ile sans mourir, pour cela il devra être certain d’avoir mangé assez de nourriture avant de partir, car il est impossible de manger une fois en mer et comme en mode normal le joueur perdra un point de vie à chaque tour plus un nombre aléatoire compris entre 1 et 10 de points de vie lorsqu’il passera sur un bloc d’eau dangereuse. Le joueur ayant atteint l’ile adverse en premier aura gagné ! 4 Déroulement d’une partie | Julien Bergé – Jimmy Chauveau Projet P.O.O III. [RAPPORT FINAL] DEROULEMENT D’UNE PARTIE En commençant une partie, nous avons une carte comme celle-ci : Carte principale Nous avons ainsi la terre représentant l’Amérique à gauche et celle de l’Europe à droite. L’indien est le personnage situé au milieu de la terre de gauche et l’Européen le personnage au milieu de celle droite. Nous pouvons aussi voir les animaux, comme prévu dans le cahier des charges, il y en a plus en Amérique qu’en Europe. Les ressources sont éparpillées dans tout le territoire équitablement, le joueur pourra donc récupérer la ressource en se positionnant dessus et en choisissant de l’exploiter. Aussi, il est possible de voir au milieu de l’eau des zones qui possèdent des « vagues », ce sont les eaux dangereuses, elles peuvent faire perdre entre 1 et 10 de vie au joueur. 5 Déroulement d’une partie | Julien Bergé – Jimmy Chauveau Nous voyons ici le menu se situant à droite de la carte : Menu de jeu Ce menu indique à qui est le tour, les ressources du joueur, les options de la case (manger) et ses déplacements possibles. Il suffit ainsi de saisir le caractère voulu afin de jouer. Aussi, les choix proposés sont en accord avec le terrain. Exemple de déplacement restreint Pour récupérer des ressources, le joueur doit se placer dessus et saisir la touche correspondante : Saisie d’une ressource de bois On a le menu suivant : 6 Déroulement d’une partie | Julien Bergé – Jimmy Chauveau Après avoir pris la ressource : Projet P.O.O [RAPPORT FINAL] Ainsi, le joueur verra donc sa ressource en bois augmenter. Il en est de même pour l’or et la pierre. Voici maintenant comment fonctionnent les animaux : Attaque d’un animal L’indien a été attaqué par un Lion, nous avons après son attaque : Pour ce qui est de la récolte de nourriture : Récolte de nourriture Ici, nous voyons que l’indien a tué l’animal “Dinde” et a ainsi récupéré 20 de ressources de nourriture. Il pourra ainsi récupérer de la vie en saisissant la touche correspondante au prochain tour s’il le veut. Le jeu étant assez long, il faut que le joueur mange et chasse afin de rester en vie. Dans le cas contraire, le jeu termine lorsque l’un des joueurs meurt de faim : Mort d’un des joueurs Un joueur peut aussi bien évidemment mourir à cause d’un animal (Sanglier ou Lion). 7 Déroulement d’une partie | Julien Bergé – Jimmy Chauveau Lorsque le joueur a récolté les ressources nécessaires, il obtient le message suivant : Assez de ressources pour créer un bateau Ensuite, il pourra se diriger vers la cote la plus proche et crée le bateau : Création d’un bateau En traversant l’océan, il pourra passer dans les eaux dangereuses et ainsi perdre de la vie. Traverse des eaux dangereuses La partie s’arrête lorsque l’un des joueurs a traversé l’océan et a atteint le continent adverse. Voici un exemple : Partie terminée par conquête 8 Les différents fichiers | Julien Bergé – Jimmy Chauveau Projet P.O.O IV. [RAPPORT FINAL] LES DIFFERENTS FICHIERS Voici le schéma UML simplifié de notre projet. Dans cette partie nous allons voir comment les différents fichiers sont liés les uns avec les autres. 9 Les différents fichiers | Julien Bergé – Jimmy Chauveau 1. CARTE.JAVA Ce fichier est le plus important de notre programme : il permet dans un premier temps la création de la carte via la lecture du fichier précédent (grâce aux fichiers Lirecarte.java et carte1.txt). Carte1.txt permet la création de la carte ; nous y trouvons une suite de 1200 caractères sur 30 lignes, chaque caractère représentant un bloc de la carte : ¨ : un bloc d’herbe . : un bloc de sable - : un bloc d’eau calme ~ : un bloc d’eau dangereuse T : un bloc de forêt : un bloc d’or ^ : un bloc de pierre Voici celui de notre projet : Dans le projet actuel, nous avons une seule carte. Pour rendre le jeu bien plus intéressant, un set d’une dizaine de cartes aurait été nécessaire, mais étant une activité relativement fastidieuse, nous avons concentré notre temps sur le test d’une seule carte complète. 10 Les différents fichiers | Julien Bergé – Jimmy Chauveau Projet P.O.O [RAPPORT FINAL] À la lecture de ce String, chaque caractère sera transformé en un objet de type bloc (le diagramme suivant nous montre les différentes classes « bloc » qui existent et leurs héritages respectifs) Ensuite Carte.java possède deux méthodes qui ont pour but de convertir la position (x, y) de notre joueur sur la matrice représentée par notre carte en un rang (nombre compris en 1 et 1200 qui indique la position dans la String de notre carte1.txt) et inversement. Enfin ce fichier permet le déplacement des joueurs grâce à plusieurs fonctions qui servent à : Vérifier quelles sont les possibilités de jeu que le joueur a (ses déplacements ou ses actions) Demander au joueur ce qu’il souhaite faire Prendre en compte le choix du joueur Exécuter l’action choisie 2. JOUEUR.JAVA 11 Les différents fichiers | Julien Bergé – Jimmy Chauveau Comme le montre le diagramme UML précédent, deux classes héritent de ce fichier : Indien (Indien.java) et Européen (Européen.java). Ces dernières étant similaires, nous ne les distinguerons pas dans les explications à suivre. Dans ces classes, nous retrouvons tout ce qui est nécessaire aux personnages pour pouvoir évoluer librement dans le jeu : Afficher les différentes informations du personnage (son nom, sa vie, ses ressources…) Savoir s’il se trouve sur un bloc de ressources Exploiter cette dernière si tel est le cas Pouvoir manger Vérifier si son nombre de ressources est suffisant pour créer un bateau Passer en mode bateau (si le point précédent est respecté et que le personnage se trouve au bon endroit) Vérifier si le joueur est mort ou s’il a gagné la partie 3. ANIMAL.JAVA Voici le schéma UML de la classe Animal Cette classe permet tout simplement le déplacement aléatoire des animaux sur la carte, les trois classes filles servent seulement pour surcharger les attributs de différemment. 4. COMBAT.JAVA Cette classe gère les combats lorsqu’un joueur et un animal se retrouvent sur la même case. Selon l’animal elle enlève un nombre de points de vie plus ou moins important à ce dernier et au joueur et en cas de mort de l’animal, donne une quantité de nourriture définie pour chaque type d’animal. 5. L’INTERFACE GRAPHIQUE Elle se compose de deux panneaux : Le premier est celui de la carte (CartePanneau.java): Chaque bloc, joueur et animal a une image .png qui lui est associé. La lecture de carte1.txt permet d’afficher l’image correspondant au caractère lu. Le deuxième panneau est celui des informations (MenuPanneau.java) : Nous y trouvons toutes les informations sur le joueur, ses possibilités de déplacement, les actions qu’il peut faire, mais c’est aussi ci qu’il est averti qu’il peut passer en mode bateau. Nous avons utilisé du HTML dans notre code pour une mise en page plus simple. 12 Les différents fichiers | Julien Bergé – Jimmy Chauveau Projet P.O.O [RAPPORT FINAL] 6. JEU.JAVA Ce fichier correspond au main de notre programme. À son lancement : Il crée les différentes instances du jeu : la carte, les joueurs, le combat, l’interface… Il permet l’écoute d’une musique de fond (grâce au fichier Son.java) Il fait passer les joueurs du mode humain au mode bateau Il gère la résurrection des animaux V. DIFFICULTES RENCONTREES Nous avons eu certains problèmes pendant le développement du projet. Malgré le fait que nous ayons réfléchi à la structure du programme avant de commencer l’implémentation, nous avons rencontré certaines incohérences. Cela nous a permis de revoir notre structure et de l’améliorer, mais aussi de nous simplifier la tâche. Le projet étant assez complexe et long à implémenter, il était important de créer des classes et des fonctions simples à utiliser, à réutiliser voire à améliorer. C’est pour cela que nous nous sommes forcés à mettre des commentaires dans chaque fonction de chaque classe. De plus, nous étions partis dans l’optique de générer la carte sous forme d’une matrice, ce qui semblait pour nous la meilleure solution. La majorité de nos problèmes concernait la matrice, la position des personnages, des animaux, des blocs et des ressources. Nous sommes tout de même satisfaits de notre carte formée de blocs étant donné que nous avons gardé la même structure de celle de notre conception. Aussi, bien que non obligatoires, nous avons passé beaucoup de temps sur le passage du choix de l’utilisateur au terminal à celui du choix au clavier. La fonction principale du déplacement était basée sur une saisie de l’utilisateur, il a fallu changer beaucoup de choses pour l’adapter au clavier. Nous avions donc deux versions du jeu, une au clavier et une au terminal, mais étant donné que nous avons réussi à rendre celle du clavier vraiment jouable, nous avons continué sur cette version et avons corrigé les derniers bugs sur celle-ci. VI. CONCLUSION Nous sommes satisfaits d’avoir pu mener à bien ce projet malgré les difficultés rencontrées. Il nous a permis d’améliorer nos compétences du point de vue de la programmation objet. Nous nous sommes grandement améliorés tout au long du projet en découvrant petit à petit des astuces. Nous avons respecté notre cahier des charges et réussi à mettre en place une interface graphique qui nous permet une meilleure prise en main de notre jeu. Le fait de réviser le cahier des charges et le cahier de conceptions nous a apporté une bonne expérience. Le fait de pouvoir choisir librement un sujet qui nous faisait plaisir sans trop de contraintes nous a permis de vraiment nous investir. Nous sommes satisfaits d’être arrivés à un résultat dont nous sommes relativement fiers. Bien entendu, nous avons passé la majorité de notre temps à réaliser les exigences fonctionnelles, nous aurions pu ajouter de petits plus à notre jeu afin de le rendre encore plus intéressant. Toutes les fonctions principales et nécessaires étant implémentées, il est maintenant très simple de rajouter ces petits plus. 13 Difficultés rencontrées | Julien Bergé – Jimmy Chauveau