1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166
| public class Plateau {
private static final int AGE_MONSTRE = 15; // les monstres vivent 15 tours avant de disparaitre
private static final char HERO = 'H'; // caractère d'affichage pour le héro
private static final char PRINCESSE = 'P'; // caractère d'affichage pour la princesse
private static final char MONSTRE = 'M'; // caractère d'affichage pour le monstre
private static final char HERO_MORT = '+'; // caractère d'affichage pour le héro qui a rencontré un monstre
private static final char HERO_PRINCESSE = 'V'; // caractère d'affichage pour le héro qui a rencontré la princesse
private int largeur;
private int hauteur;
private Personnage[][] carte;
private Personnage hero;
private Personnage princesse;
private List<Personnage> monstres;
private int etatPartie; // par exemple : 0 jeu non terminé, 1 héro à gagner, -1 hero a perdu
private Random random = new Random();
public Plateau(int largeur, int hauteur) {
this.largeur=largeur;
this.hauteur=hauteur;
initialiser();
}
public int getEtatPartie() {
return etatPartie;
}
public boolean heroGagne() {
return etatPartie==1;
}
public boolean heroPerdu() {
return etatPartie==-1;
}
public void initialiser() {
etatPartie=0;
carte = new Personnage[hauteur][largeur];
hero = new Personnage(HERO);
princesse = new Personnage(PRINCESSE);
placer(0,0, hero); // hero en 0,0 (en haut à gauche)
placer(largeur-1,hauteur-1, princesse); // princesse en bas à droite
monstres = new ArrayList<>();
ajouterMonstres((hauteur*largeur*30)/100); // 30% de monstres au départ
}
public void afficherCarte() {
for(Personnage[] ligne : carte) {
for(Personnage personnage : ligne) {
if ( personnage==null ) { // case vide
System.out.print(" ");
}
else {
System.out.print(personnage.c);
}
}
System.out.println();// fin de ligne
}
}
public void nouveauTour(int numeroTour) {
// à faire
// déplacer hero
// veillir monstre
// créer nouveaux monstres
}
/**
* retourne le personnage sur la case
* @param x abscisee de la case
* @param y ordonnée de la case
* @return le personnage sur la case ou null si la case est vide
*/
private Personnage getPersonnage(int x, int y) {
return carte[y][x];
}
/**
* Placer le personnage dans la case et synchroniser ses coordonnées
*/
private void placer(int x, int y, Personnage personnage) {
carte[y][x] = personnage;
personnage.x = x;
personnage.y = y;
}
private void deplacerHero() {
// on détermine un déplacement aléatoire
int nouveaux;
int nouveauy;
do {
int dx = random.nextInt(3)-1; // tire un nombre entre -1 et 1
nouveaux=hero.x+dx;
int dy = random.nextInt(3)-1; // tire un nombre entre -1 et 1
nouveauy=hero.y+dy;
}
while( !estDansCarte(nouveaux,nouveauy));
Personnage rencontre = getPersonnage(nouveaux, nouveauy);
if ( monstres.contains(rencontre) ) {
// le héro rencontre un monstre... à faire ce qu'on doit
}
else if ( rencontre==princesse ) {
// le héro rejoint la princesse... à faire ce qu'on doit
}
else {
// le héro se déplace
supprimer(hero);
placer(nouveaux, nouveauy, hero);
}
}
private boolean estDansCarte(int x, int y) {
return x>=0 && x<largeur && y>=0 && y<hauteur;
}
private void supprimer(Personnage personnage) {
carte[personnage.y][personnage.x] = null; // on vide la case
}
/**
* AJoute des monstrs aléatoirement dans la carte
* @param nombre nombre de monstres à ajouter
*/
private void ajouterMonstres(int nombre) {
for(int i=0; i<nombre; i++) {
if ( monstres.size()>= hauteur*largeur+2 ) {
// il n'y a plus aucune place libre
break;
}
int x;
int y;
// on détermine aléatoirement une case vide pour le monstre
do {
x = random.nextInt(largeur);
y = random.nextInt(hauteur);
}
while( getPersonnage(x,y)!=null); // tant que la case n'est pas vide
Personnage monstre = new Personnage(MONSTRE);
monstre.age=AGE_MONSTRE;
monstres.add(monstre); // on ajoute le monstre à la liste
placer(x,y, monstre);
}
}
/**
* Fait vieillir les monstres et les fait mourir si leur age atteint 0
*/
private void veillirMonstre() {
for(Iterator<Personnage> monstreIterator = monstres.iterator(); monstreIterator.hasNext(); ) {
Personnage monstre = monstreIterator.next();
monstre.age--; // on décrémente l'age du monstre
if ( monstre.age<=0 ) { // si le monstre meurt
supprimer(monstre); // on le supprime de la carte
monstreIterator.remove(); // on le supprime de la liste de monstres
}
}
}
} |
Partager