2011-10-26 2 views
2

Je sais que c'est lié à la conception de jeu, mais j'ai lu la FAQ de StackOverflow et il énonce des questions d'algorithme de logiciel peuvent être posées ici. Si cela est mieux dans la conception du jeu alors j'espère que quelqu'un peut m'aider à le déplacer, merci!Quels sont les problèmes potentiels avec cet algorithme de génération procédurale multithread?

Je suis en train de concevoir un générateur de donjon procédural multi-thread. Cependant, je me demande quels types de problèmes je vais probablement rencontrer ... Je n'ai pas été en mesure de trouver de nombreux algorithmes qui montraient clairement des multi-threads.

J'ai trois objets distincts qui doivent être créés. Un «Monde» qui abrite plusieurs «Chambres» et chaque pièce abritera des «Objets» potentiels.

L'algorithme actuel fonctionne comme ceci:

Step 1: Generate World 
Step 2: Generate Rooms and Objects concurrently 

Les maisons du monde une liste de chambre, et une « liste des objets disponibles. » La méthode de création de pièce génère des pièces et les ajoute à la liste des pièces du monde .-- La procédure de création d'objet ne communique en aucune façon avec la procédure de pièce. Au lieu de cela, la procédure de création d'objets sélectionne des pièces aléatoires dans la liste des pièces du monde et génère des objets aléatoires dans la pièce.

Le seul problème que je vois avec ceci est si la procédure de création d'objet finit prématurément. En d'autres termes, seules certaines des pièces de la liste de pièces contiennent des objets créés car la procédure de création de pièce s'est terminée plus tard que la procédure de création d'objet.

Y a-t-il plus de problèmes, et quelqu'un a-t-il des conseils ou de l'expérience avec le développement de tels algorithmes?

Répondre

3

Tout d'abord, le problème mentionné par vous est pas un vrai, parce que vous devez simplement travailler avec 3 étapes:

  1. Générez monde
  2. chambres Générez simultanément
  3. générer des objets simultanément

Dans cet ordre, il est garanti que toutes les pièces sont présentes. Et vous ne gagnez pas beaucoup à garder 2 + 3 ensemble en termes de performance de toute façon. Cependant, le problème principal, typique de la simultanéité, est lorsque vous joignez vos résultats ensemble. Si vos salles sont conservées dans une liste, l'ajout à cette liste doit être synchronisé, ce qui ralentit votre traitement. Un problème beaucoup plus complexe survient, une fois que vous commencez à créer des pièces dans un espace-monde et que vous devez vous assurer que les pièces générées en parallèle n'occupent pas le même espace (pareil pour les objets dans une pièce).

+0

C'est aussi une approche intéressante (bien que plus compliquée que mon approche initiale). J'espérais éviter une grande partie de cette complexité en générant des pièces une à la fois et en faisant les objets simultanément le long des pièces. Cependant, comme vous l'avez dit, mon approche peut ne pas fournir beaucoup en gardant les pièces et les objets ensemble. Je suppose que la création de l'objet est légère par rapport aux pièces elles-mêmes. –

+0

Vous pouvez également faire en sorte que la procédure de génération de pièce appelle la procédure de génération d'objet pour cette pièce uniquement. –

+0

J'aime l'idée de faire les pièces simultanément et d'appeler la procédure de création d'objet une fois par pièce. Je pense que le gain sera élevé et la complexité est plus facile à gérer que de faire des chambres et des objets simultanément. –

Questions connexes