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

LastSolution 9 Messages postés lundi 20 avril 2015Date d'inscription 7 mai 2015 Dernière intervention - 4 mai 2015 à 10:20 - Dernière réponse : LastSolution 9 Messages postés lundi 20 avril 2015Date d'inscription 7 mai 2015 Dernière intervention
- 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 

Votre réponse

4 réponses

Twinuts 5279 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 19 septembre 2018 Dernière intervention - 4 mai 2015 à 10:55
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 9 Messages postés lundi 20 avril 2015Date d'inscription 7 mai 2015 Dernière intervention - 4 mai 2015 à 11:02
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 5279 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 19 septembre 2018 Dernière intervention > LastSolution 9 Messages postés lundi 20 avril 2015Date d'inscription 7 mai 2015 Dernière intervention - 4 mai 2015 à 11:40
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 9 Messages postés lundi 20 avril 2015Date d'inscription 7 mai 2015 Dernière intervention > Twinuts 5279 Messages postés dimanche 4 mai 2003Date d'inscriptionModérateurStatut 19 septembre 2018 Dernière intervention - 4 mai 2015 à 16:12
Merci pour ta réponse je vais essayer de la décortiquer pour l'utiliser :)
Commenter la réponse de Twinuts

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.