JeuWeb - Crée ton jeu par navigateur
Implémenter un système de ressources en flux tendu - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Implémenter un système de ressources en flux tendu (/showthread.php?tid=4592)

Pages : 1 2


Implémenter un système de ressources en flux tendu - Sephi-Chan - 17-02-2010

Salut à tous,

Depuis pas mal de temps je songe à un système de ressources en flux tendu pour un jeu de stratégie (qui ne serait pas joué en temps réel) mais j'ai quelques difficultés.

Déjà, je vais présenter un exemple de ce que j'appelle flux tendu, afin qu'on parle de la même chose. Smile

L'idée générale, c'est de ne pas stocker de ressources : on a toujours une consommation positive et négative.

Soient 5 territoires (A, B, C, D et E). Chacun de ces territoires dispose (ou non) de certaines parcelles de ressources :
  • A produit du jambon et du bois ;
  • B produit des endives ;
  • C produit du jambon ;
  • D produit du fer ;
  • E produit des endives et du bois ;

Ensuite, le joueur affecte des travailleurs sur les ressource qu'il souhaite exploiter. Selon la capacité de récolte des travailleurs et le nombre affecté, on aura donc une quantité de ressources récoltées par minute (le choix de l'unité de temps était arbitraire). Admettons que A génère +9 jambons par minute.

Certaines ressources passent directement à la trappe pour nourrir les travailleurs (d'où l'intérêt de bien gérer ses travailleurs pour ne pas en avoir trop en attente : de même, il faudra équilibrer entre travailleurs et militaires). Disons que les travailleurs mangent du jambon à raison de 3 par minute. Notre production de jambon passe donc à 6 jambons par minute.

Ensuite, on peut faire plusieurs choses de ces ressources : construire ou convoyer. Et c'est là que ça commence à poser problème.

Si l'on construit un bâtiment sur un territoire : il va coûter une quantité de ressources données (60 de bois ; 30 de métal). Selon le temps de construction du bâtiment (par exemple 10 minutes), cela va donc coûter 6 bois par minute et 3 métal par minute. Si le ratio de production du territoire de bois passe sous la barre des -3, c'est toute la construction qui s'interrompt. Comment gérer cela ?

Si l'on convoie des ressources (afin d'éviter un gâchis, si le territoire a une production positive, par exemple), on doit tout de même stocker un peu afin de faire des envois réguliers : typiquement, dès qu'on atteint une quantité Q de ressources, on procède à un envoi (les convois des ressources pouvant nécessiter une escorte, on cherchera à faire des envois assez espacés pour ne pas mobiliser trop de militaires sans être trop espacés pour ne pas qu'une interception du convoi coûte trop cher. Ajoutons à cela que la non-livraison de ressources convoyées à une autre guilde peut briser les termes d'un contrat (pacte de non agression, par exemple).

J'espère que vous pourrez m'aider ! J'aimerai avoir vos avis/remarques/suggestions pour concevoir un système robuste. Smile


Sephi-Chan


RE: Implémenter un système de ressources en flux tendu - QuentinC - 17-02-2010

Tiens, c'est exactement le système que je vais mettre en place pour mon jeu. Je ne savais pas que ça s'appelait flux tendu...

Je pense qu'il faut fixer des priorités
1 - On nourrit les unités
2 - On construit
3 - On recherche
4 - ...

On utilise d'abord toutes les ressources nécessaires pour nourrir les unités pendant la période de temps T. Si ensuite on n'a plus assez pour construire durant cette même période de temps t, alors on construit seulement à hauteur de ce qui est disponible. La date de fin de construction est retardée d'autant.


RE: Implémenter un système de ressources en flux tendu - Anthor - 17-02-2010

J'ai instauré un hook, au niveau du calcul de ressources, si une ressource passe à un ratio de production négatif, un plugin, ajuste automatiquement la puissance des bâtiments, jusqu'à avoir une production positif, ou nulle.


RE: Implémenter un système de ressources en flux tendu - QuentinC - 17-02-2010

Tu entends quoi par puissance des bâtiments ?
Si tu parles de puissance militaire, ça n'a rien à voir... logiquement ça ne doit pas influer sur les bâtiments déjà construits.

Je suis en train de coder le processus suivant pour mon jeu :
On produit 10 par minute, on consomme 4 pour nourrir et 10 pour construire. J'ai 20 de réserve.

Je reviens dans 5 minutes
- Je produis 5*10 = 50, donc j'ai une réserve de 70
- Je nourris pour 4*5 = 20 donc il me reste 50
- Je construis pour 5*10, je n'ai plus de réserves mais tout va bien.

Je reviens 5 minutes plus tard.
- Je produis 5*10 = 50 de réserve
- Je nourris pour 4*5, donc il me reste 30
- Je construis pour 5*10... ah non ça va pas je passe en-dessous de 0. Je ne peux construire que pendant 3 minutes. Je retarde la fin de la construction de 2 minutes. + éventuellement un autre malus.

Je pense que ce système de priorité (d'abord nourrir les unités, ensuite seulement regarder les constructions, puis les recherches si on a encore assez...) est nécessaire. Sinon ça devient trop compliqué. Au fait, on s'en fiche si le bâtiment a été construit pendant les 3 premières minutes, les 3 dernières, oui si on a ralenti de 60& pendant les 5 minutes. Seul le résultat final compte, à savoir qu'on a pris 2 minutes de retard.

S'il y a eu attaque où je ne sais quoi pendant ces 5 minutes, alors il faut faire le calcul en deux étapes (avant l'attaque, après l'attaque)


RE: Implémenter un système de ressources en flux tendu - Anthor - 17-02-2010

Quand je parle de puissance, je parle de puissance de production et de consommation. C'était indiqué dans la phrase quand même ^^

Si je fais fonctionner un bâtiment à 50% de sa puissance, j'utilise 50% de ressources en moins pour le faire fonctionner, et je produit 50% de ressource en moins.


RE: Implémenter un système de ressources en flux tendu - NicoMSEvent - 18-02-2010

travailler en flux tendu, ça signifie que tu ne stocke rien? la construction d'un batiment te prends 3 bois/minute, et si ta production est excédentaire, elle est perdue? (comme l'électricité qui est impossible a stocker?)
ou alors tu peux faire du stock, et ton batiment puise dans ce stock une consommation par minute?
ou alors tu peux faire du stock, et ton batiment puise dans ce stock en une fois totu ce dont il a besoin pour être construit en une fois?

Eclaire nous un peu sur les finesses du système que tu souhaite mettre en place Smile


RE: Implémenter un système de ressources en flux tendu - Sephi-Chan - 18-02-2010

C'est ça, oui : pas ou peu de stock. Les excédents sont rapidement perdus.

Ta solution d'utiliser un stock tampon est effectivement un moyen simple ne résoudre une partie du problème, mais le système perd alors son essence.

Le seul point sur lequel j'admet un stock, c'est pour les convois : on pourrait indiquer à un convoi (selon la capacité de transport de ce dernier) de ne partir que quand on l'a suffisamment chargé : ça reste cohérent et dans l'optique puisque ce sont les unités de transports (des camions, par exemple) qui créent une capacité de stockage mobile.

Un bon exemple de flux tendu : c'est le jeu Total Annihilation (qui permet tout de même de stocker une infime quantité de ressources, mais le contexte diffère un poil).


Sephi-Chan


RE: Implémenter un système de ressources en flux tendu - NicoMSEvent - 18-02-2010

je sais, c'est pas du php, ça s'approche plus du pseudo-code...
mais je pense que tu dois avoir quelque chose comme ça :
Code :
variable_sum_negatif=0
requete=select ressource_negatives from table order by priorité
while( prendre_ligne(requete) ){
    variable_sum_negatif+=ressource_negatives
    if(sum(ressource produites)< variable_sum_negatif){
        traitement si ta production est supérieure a ta consommation
    }
    else{
        traitement si inférieur
    }
}



RE: Implémenter un système de ressources en flux tendu - Ono - 18-02-2010

J'ai un peu de mal à saisir le problème.
Manque de ressources ----> La construction s'interrompt.
Ou est le problème ? Elle reprendra lorsque de nouvelles ressources seront disponibles, non ? Ca me fait penser à command&conquer, lorsqu'on a trop lancé de constructions par rapport à nos ressources, la construction s'arrète jusqu'à ce que des ressources arrivent, qui sont tout de suite absorbées par les constructions en cours.
Le problème ne viendrait-il pas du fait que tu souhaites définir le temps de construction de ton bâtiment à 10 minutes ? Le temps, au lieu d'être absolu (10 minutes), devrait peut-être plutôt être décrit en terme d' "absorbsion" de ressources par unité de temps. Je sais que ma tour de garde nécéssite 100 jambons (oui, une tour en jambon, miam !) pour être construite. On définit pour cette construction une "absorbsion" de 10 jambons par unité de temps (en admettant qu'une unité soit une minute, à régler selon ton jeu). Si on a une production suffisante, (un excédent de 10 jambons une fois que les unités ont pris leur part, etc, selon des règles de priorité comme l'a dit QuentinC), on tombe bien sur une durée de construction de 10 minutes. Si à un cycle de récolte on tombe à seulement 3 jambons disponibles pour la tour, ben elle n'absorbera que 3 jambons à ce cycle là, ce qui repousera d'un cycle (une minute dans notre cas) la fin de la construction.
Suis-je dans le sujet ou complètement à côté ?


RE: Implémenter un système de ressources en flux tendu - Sephi-Chan - 18-02-2010

Tu as bien saisi Ono. Smile

En fait, il n'y a pas de problème (au sens technique du terme). J'ouvre la discussion pour discuter de ce type de gestion et d'anticiper les problèmes qui surviendront lors de l'implémentation.

Comme c'est quelque chose que je ne compte pas développer dans l'immédiat, je pense tout de même écrire une implémentation (qui restera théorique, non testée) : ce que pourrait être le code.


Sephi-Chan