Aie aie aie, la gestion des priorités va être un vrai casse-tête !
Je pense qu'il manque un exemple qui permettrait de mieux décortiquer l'algo à produire : Tu nous as montré un cas avec un besoin, je voudrais savoir ce qu'il se passe avec 2 besoins sur 2 PNJs avec déjà un distributeur puis 2 fournissant 2 besoins.
Exemple :
Toto a un niveau de besoin [faim] à 70 et un besoin [hygiène] à 60
Tutu à un niveau de besoin [faim] à 55 et un besoin [hygiène] à 70
(je fais exprès d'inverser les 2 valeurs)
Un seul distributeur donnant 10 points de faim et 10 points d'hygiène.
Tutu est prioritaire sur le besoin [faim] donc normalement ça devrait être lui qui devrait l'emporter.
Pourtant Tutu est prioritaire sur le besoin [hygiène] donc lui aussi est prioritaire pour ce lieu.
L'ordre de priorité est défini par un critère externe du coup non ? (le moral par exemple)
De même je reprend le même cas particulier mais avec deux distributeurs dont le premier est similaire au premier exemple mais le second donne uniquement 10 points de faim.
L'un des deux va choisir un distributeur qui sera plus intéressant qu'un autre puisque l'un des deux PNJ bénéficiera d'un bonus dans les deux besoin alors que l'autre n'en aura qu'un seul mais quelle est le critère pour déterminer qui aura le meilleur distributeur.
Du coup il faut là aussi un autre critère externe je pense.
Sinon autre question qui pourrait complexifier encore plus le problème actuel : Est ce que le joueur peut définir des préférences entre un PNJ et des fournisseurs ( ex : je veux que toto par défaut choisisse le fournisseur avec les deux besoin plutôt que le premier par défaut ), cela pourrait être notre critère externe (remplaçant le moral).
Voilà sinon pour une idée simple est pas trop chère, je sais pas si ça vaut le coup de séparer chacun des besoins dans une table "BonusBesoin" qui contiendrait les bonus en rapport avec un fournisseur et un besoin spécifique , ou alors rajouter un attribut dans la table des Fournisseurs pour expliciter le fait que ce fournisseur peut fournir des besoins multiples.
Cela permettrait de simplifier la recherche pour les PNJs ayant des besoins multiples.
Sinon une autre idée, c'est que tu partes du fait que tout les jours tu construis le parcours des pnj à l'avance au lieu de le faire à la fin de chaque tour. A une heure précise tu calcules le chemin de chaque pnj. Le soucis de ce truc c'est que tu ne vis pas dans un univers déterministe vu que un pnj perd un nombre de points dans chacun de ses besoin de manière aléatoire. Du coup l'algo est pas vraiment réaliste et devra se baser sur des bornes d'intervalles.
Une dernière idée (je sais j'en ai beaucoup même si elles sont pas forcément bonnes), c'est de classer tes fournisseurs dans des "foyers" de besoins avec des critères précis (ce foyer accepte que les pnjs ayant entre 60 et 80 de faim), l'avantage étant de faire rentrer un pnj dans un foyer et de le faire sortir que quand il n'est plus dans les critères de ce foyer. Ces derniers peuvent être également construit en début de journée puis par la suite reconstruit et remanier tout les jours à chaque fois.
Du coup ton algo est plus simple car dans un premier temps tu fais entrer/sortir les PNJ des foyers dans lesquelles ils n'ont plus besoin d'être, puis dans un second temps tu fais tourner les pnj dans chacun des foyers.
L'inconvénient de cette idée, c'est cette fameuse construction de foyer qui peut être gênant pour certains fournisseurs car on ne sait pas trop où les placer.
Je pense qu'il manque un exemple qui permettrait de mieux décortiquer l'algo à produire : Tu nous as montré un cas avec un besoin, je voudrais savoir ce qu'il se passe avec 2 besoins sur 2 PNJs avec déjà un distributeur puis 2 fournissant 2 besoins.
Exemple :
Toto a un niveau de besoin [faim] à 70 et un besoin [hygiène] à 60
Tutu à un niveau de besoin [faim] à 55 et un besoin [hygiène] à 70
(je fais exprès d'inverser les 2 valeurs)
Un seul distributeur donnant 10 points de faim et 10 points d'hygiène.
Tutu est prioritaire sur le besoin [faim] donc normalement ça devrait être lui qui devrait l'emporter.
Pourtant Tutu est prioritaire sur le besoin [hygiène] donc lui aussi est prioritaire pour ce lieu.
L'ordre de priorité est défini par un critère externe du coup non ? (le moral par exemple)
De même je reprend le même cas particulier mais avec deux distributeurs dont le premier est similaire au premier exemple mais le second donne uniquement 10 points de faim.
L'un des deux va choisir un distributeur qui sera plus intéressant qu'un autre puisque l'un des deux PNJ bénéficiera d'un bonus dans les deux besoin alors que l'autre n'en aura qu'un seul mais quelle est le critère pour déterminer qui aura le meilleur distributeur.
Du coup il faut là aussi un autre critère externe je pense.
Sinon autre question qui pourrait complexifier encore plus le problème actuel : Est ce que le joueur peut définir des préférences entre un PNJ et des fournisseurs ( ex : je veux que toto par défaut choisisse le fournisseur avec les deux besoin plutôt que le premier par défaut ), cela pourrait être notre critère externe (remplaçant le moral).
Voilà sinon pour une idée simple est pas trop chère, je sais pas si ça vaut le coup de séparer chacun des besoins dans une table "BonusBesoin" qui contiendrait les bonus en rapport avec un fournisseur et un besoin spécifique , ou alors rajouter un attribut dans la table des Fournisseurs pour expliciter le fait que ce fournisseur peut fournir des besoins multiples.
Cela permettrait de simplifier la recherche pour les PNJs ayant des besoins multiples.
Sinon une autre idée, c'est que tu partes du fait que tout les jours tu construis le parcours des pnj à l'avance au lieu de le faire à la fin de chaque tour. A une heure précise tu calcules le chemin de chaque pnj. Le soucis de ce truc c'est que tu ne vis pas dans un univers déterministe vu que un pnj perd un nombre de points dans chacun de ses besoin de manière aléatoire. Du coup l'algo est pas vraiment réaliste et devra se baser sur des bornes d'intervalles.
Une dernière idée (je sais j'en ai beaucoup même si elles sont pas forcément bonnes), c'est de classer tes fournisseurs dans des "foyers" de besoins avec des critères précis (ce foyer accepte que les pnjs ayant entre 60 et 80 de faim), l'avantage étant de faire rentrer un pnj dans un foyer et de le faire sortir que quand il n'est plus dans les critères de ce foyer. Ces derniers peuvent être également construit en début de journée puis par la suite reconstruit et remanier tout les jours à chaque fois.
Du coup ton algo est plus simple car dans un premier temps tu fais entrer/sortir les PNJ des foyers dans lesquelles ils n'ont plus besoin d'être, puis dans un second temps tu fais tourner les pnj dans chacun des foyers.
L'inconvénient de cette idée, c'est cette fameuse construction de foyer qui peut être gênant pour certains fournisseurs car on ne sait pas trop où les placer.