DY

DelahayeYourself

modules / S2101B /

TP02: Classes, héritages, interfaces, ...

Pour la suite de ce TP, nous nous inspirerons de l’univers d’un jeu vidéo bien connu à savoir Warcraft.

enter image description here

Notre première classe: Peon

Comportements & attributs de base

Nous allons créer une première classe "Peon". Celle-ci doit contenir les attributs permettant d’identifier le péon (son nom), ses points de vie et ses points de mana.

Elle doit également fournir un constructeur par défaut, un constructeur paramétré, une surcharge de la méthode toString ainsi qu’une méthode talk permettant de faire parler l’unité dont la signature est la suivante "public void talk()".

Complexifions notre objet

L’une des caractéristiques des unités dans Warcraft est leurs phrases devenues cultes prononcés lors de leurs sélections par le joueur. Nous allons donc ajouter un attribut à notre classe qui sera une collection de différentes phrases. Lors de l’appel à la méthode talk, l’une de ces phrases devra être sélectionnée "aléatoirement" pour varier un peu les paroles de l’unité.

Un exemple de génération d’entier aléatoire

public static int randInt(int min, int max){
    Random rand = new Random();
    return rand.nextInt((max - min) + 1) + min;
}

N’oublier pas les getters, setters et le nommage des packages.

Une histoire d'héritage

Avec un seul type d’unité notre jeu risque d’être passablement ennuyeux. Il convient donc d’ajouter de nouveaux types d’unité.

Grunt, une seconde classe

Ajoutons une nouvelle classe que nous appellerons "Grunt". Avant de vous jeter sur votre IDE, il convient de prendre le temps de réfléchir quelque peu à la conception de notre projet. La classe "Peon" et "Grunt" partagent de nombreux points communs.

Nous allons pouvoir rassembler tous ces attributs et méthodes communes au sein d’une classe mère que nous nommerons "Unit".

Unit, des points communs

Créer une classe mère dont les classes "Peon" et "Grunt" hériteront. Vous êtes libres des attributs et méthodes que vous jugerez utiles de créer, toutefois celle-ci doit au moins posséder les attributs suivants:

Ainsi que les méthodes suivantes:

Nous avons créé des unités pour la race des orcs, pourquoi ne pas en créer quelques-unes pour les humains à savoir "Peasant" et "Footman".

Unit UML class diagram
Diagramme UML de classe pour Unit
Une aventure sous contrats

Pour faire interargir nos unités il faut leur fournir des contrats à remplir.

Une première interface, estOrganique

Dans cet exercice crée une simple interface "isOrganic" qui contient un attribut i_isPoissoned et une méthode bool isPoissoned();. Cette interface devra être implémentée au sein des classes que nous avons créées précédemment.

Une seconde interface, estGuerrier

L’interface précédente était un simple entrainement pour vous familiariser avec la syntaxe des interfaces. Les choses sérieuses commencent ici avec l’implémentation d’une interface "isWarrior".

Cette interface permet de faire combattre nos unités, pour celle-ci doit fournir une méthode public void attack(Unit p_Unit);.

Quelques indications:

v_Damage = minimumDamage * (1 - unit.getArmor() / 10).
v_Damage = randInt(minimumDamage, randomDamage) * (1 - unit.getArmor() / 10).