Problème d'ArrayLists imbriquées

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

1 réponse

Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111
4 mai 2015 à 10:55
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....

0
LastSolution Messages postés 9 Date d'inscription lundi 20 avril 2015 Statut Membre Dernière intervention 7 mai 2015
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é ^^.
0
Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023 111 > LastSolution Messages postés 9 Date d'inscription lundi 20 avril 2015 Statut Membre Dernière intervention 7 mai 2015
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;
}
0
LastSolution Messages postés 9 Date d'inscription lundi 20 avril 2015 Statut Membre Dernière intervention 7 mai 2015 > Twinuts Messages postés 5375 Date d'inscription dimanche 4 mai 2003 Statut Modérateur Dernière intervention 14 juin 2023
4 mai 2015 à 16:12
Merci pour ta réponse je vais essayer de la décortiquer pour l'utiliser :)
0
Rejoignez-nous