Je développe un système d'approvisionnement similaire dans mon propre jeu, j'ai donc également réfléchi à la façon de résoudre le problème de blocage de l'offre et le favoritisme. Pour illustrer le problème, je vais créer un exemple simple:
Si vous avez une liste: [producteur1, consommateur1, consommateur2, consommateur3] et que vous mettez à jour dans l'ordre, à partir de l'offre = 0, vous obtiendrez ceci:
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer1 wants 3 mass. Success, you now have 4 mass
consumer2 wants 3 mass. Success, you now have 1 mass
consumer3 wants 3 mass. Fail
etc...
consumer1 obtient tout le plaisir, tandis que les consommateurs 2 et 3 meurent de faim jusqu'à ce que le consommateur 1 soit satisfait. Selon votre jeu, cela peut ne pas être souhaitable. Je sais que dans mon jeu, ce n'est pas le cas. Quand j'y arriverai, je vais créer une file d'attente où les consommateurs qui ont été nourris dans une tique se déplaceront à l'arrière de la file d'attente pour la prochaine tique, ce qui, je crois, est ce à quoi Roy T. s'attaque. L'exemple ci-dessus ressemblerait à ceci:
producer1 produces 5 mass. You now have 5 mass
consumer1 wants 3 mass. Success, you now have 2 mass. <-- Move to end of queue
consumer2 wants 3 mass. Fail
consumer3 wants 3 mass. Fail
[next tick]
producer1 produces 5 mass. You now have 7 mass
consumer2 wants 3 mass. Success, you now have 4 mass <-- Note the order change
consumer3 wants 3 mass. Success, you now have 1 mass
consumer1 wants 3 mass. Fail
etc...
De cette façon, chacun obtiendra sa juste part des ressources.
Je prévois également d'implémenter une file d'attente supplémentaire à utiliser comme file d'attente prioritaire afin que l'utilisateur puisse sélectionner certaines structures pour avoir la priorité des ressources. La file d'attente prioritaire sera toujours servie avant la file d'attente standard. Assurez-vous que tous les producteurs sont mis à jour en premier, puis consommez toutes les ressources ensuite, sinon la file d'attente se brisera lorsque vous produirez des ressources à mi-chemin et que certains consommateurs sont déjà affamés.
Donc, pour récapituler: mettre à jour les producteurs, puis la file d'attente prioritaire, déplacer les consommateurs alimentés à la fin de la file d'attente prioritaire, puis mettre à jour la file d'attente standard, déplacer les consommateurs alimentés à la fin de la file d'attente standard.