Problème d'ArrayLists imbriquées [Résolu]

Messages postés
9
Date d'inscription
lundi 20 avril 2015
Statut
Membre
Dernière intervention
7 mai 2015
- - Dernière réponse : LastSolution
Messages postés
9
Date d'inscription
lundi 20 avril 2015
Statut
Membre
Dernière intervention
7 mai 2015
- 4 mai 2015 à 16:12
Bonjour,

Je fais actuellement un petit jeu en console pour me former à JAVA.

Je fais choisir un personnage (Mage ou Guerrier) à un joueur et je le fais entrer dans un donjon. Ce Donjon est constitué de Salles (géré par une ArrayList dans la classe Donjon) et cette Salle est constituée de Monstres (géré par une ArrayList dans la classe Salle).

Le problème quand j'appelle une méthode, je mets la liste des donjons en paramètres et je gère le reste en faisant :

// Pour parcourir les monstres de la salle en cours du donjon en cours		
for(int f = 0; f < listeDesDonjons.get(indiceDonjon).getListeDesSalles().get(indiceSalleDonjon).getListeDesMonstres().size(); f++)			
{
//[...]
}


par exemple.

Ça me semble être une machine à gaz donc je vous demande si il y a une façon plus claire de le faire ?

Merci par avance :)
Afficher la suite 

1 réponse

Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89
0
Merci
Salut,

Normalement lorsque tu es dans ta salle tu te moques royalement de savoir dans quel donjon tu es, comme ça tu peux assez simplement rendre les combats génériques (niveau code)

Perso, je verrais plus un truc dans cet esprit:
- Utilisateur entre dans le Donjon X
List<Dungeon> dungeons = area.getDungeons(); // area étant ta zone sur la carte / le monde
Dungeon dungeon = dungeons.get(currentDungeon);

- Récupération des sales du donjon
List<Room> rooms = dungeon.getRooms();

- Ensuite l'utilisateur rentre dans une sale du donjon:
Room room = rooms.get(currentRoom);

- Pour enfin avoir la liste des monstres:
List<Monster> monsters = room.getMonsters();
etc....

LastSolution
Messages postés
9
Date d'inscription
lundi 20 avril 2015
Statut
Membre
Dernière intervention
7 mai 2015
-
Les "getDungeons()" et "getRooms()" que tu utilises ce sont des méthodes que tu crées c'est bien ça ? Même question pour les "currentDungeons", que sont t'ils ?

Je me débat encore dans ma formation désolé ^^.
Twinuts
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
89 > LastSolution
Messages postés
9
Date d'inscription
lundi 20 avril 2015
Statut
Membre
Dernière intervention
7 mai 2015
-
Pardon oui effectivement,

Dans l'idée tu as un monde (world) qui contient des informations notamment des donjons (dungeons) chaque donjons contiennent des salles (rooms) et chaque salles contiennent des monstres (monsters).

Pour les currentDungeons il s'agit d'indices que tu incrémentes en fonctions du mouvement, exemple:

Position du joueur == dungeonX, currentDungeons = le donjon associé. des que le joueur entre dans un donjon il arrive dans la currentRooms = 0 ensuite tu incrémentes en fonction du déplacement.

Ici j'utilise des indices de tableau mais tu pourrais très bien utiliser des hashtable des enum en guise de clés.

Du coup au moment du combat tu n'as pas besoin de te soucier de l'emplacement du joueur et tu peux gérer avec seulement 2 paramètres:
public enum FightResult {
  WIN,
  LOOSE,
  NO_SCORE,
}
.....

FightResult fight(Player player, Monster monster) {
  FightResult result;
  // test level
  // test si le monstre est un boss
  // etc....
  return result;
}
LastSolution
Messages postés
9
Date d'inscription
lundi 20 avril 2015
Statut
Membre
Dernière intervention
7 mai 2015
> Twinuts
Messages postés
5341
Date d'inscription
dimanche 4 mai 2003
Statut
Modérateur
Dernière intervention
10 décembre 2019
-
Merci pour ta réponse je vais essayer de la décortiquer pour l'utiliser :)
Commenter la réponse de Twinuts