JeuWeb - Crée ton jeu par navigateur
Répartition des morts après un combat - 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 : Répartition des morts après un combat (/showthread.php?tid=8013)

Pages : 1 2 3


RE: Répartition des morts après combat - Chbig - 20-08-2019

(20-08-2019, 05:12 PM)Xenos a écrit : Le problème de simuler chaque unité, c'est la masse que tu peux finir par avoir (10k unités attaquant 10k unités, ça peut vite faire lourd: on parle de 100M de combinaisons là!). Groupées par type, ça sera déjà mieux. Cela s'appelle une modélisation, et c'est ce qui permet d'éviter de simuler une galaxie pour rien : )

En effet, rajouter une statistiques, ça peut être bien. Perso, je ne la lierai pas direct à la taille: je créerai une stat dédiée "attaque_ratio" (le nom est moisi, faut le retravailler) qui sert de "taille" dans l'exemple de Theta, mais qui n'est pas forcément directement la taille "physique" de l'unité. C'est juste une grandeur que je fixerai arbitrairement, et que je pourrai alors ajuster librement par la suite (sinon, l'ajustement sera impossible: la taille physique sera liée à ce paramètre de "taille attaquable", et l'un ne se change pas sans l'autre; pour peu que la taille physique soit liée à autre chose ailleurs, tu arriveras à ECLERD v0: le moindre petit changement de stat quelque part chamboule tout sans contrôle!)

Dans tous les cas, je pense qu'il faut surtout que tu sois capable "d'isoler" ta composante de dégat, de sorte que si tu veux totalement changer la façon dont les fourmis prennent du dégat, alors tu n'auras pas à toucher autre chose que cette section dédiée aux dégats. Ca peut se "tester" (se vérifier) en prenant un modèle bidon et complètement à côté de ce que tu veux (volontairement, par exemple: les dégats détruisent toutes les fourmis s'ils sont pair, aucune s'ils sont impairs); puis tu changes ce modèle pour celui qui t'intéresse. Si tu as dû toucher autre chose que le code de dégat pour faire ce changement, alors tu as un soucis "d'isolation/séggrégation".

(c'est une approche contestable, mais ça peut t'aider à rester modulaire pour éviter de trop galérer quand tu voudras changer ce modèle dont tu n'es pas sûr à 100%)

Xenos, pour ce qui est de la séparation / factorisation du code ça je gère.
J'ai des classes bien distinctes pour la gestion des combats etc...
D’ailleurs j'implémente mon système de combat de façon 'basique' pour le moment, je ne prends pas encore en compte les 'évolutions' qui boost l'attaque/défense etc... mais je sais ou le mettre au moment voulu Smile

Pour ce qui est de la modélisation dont tu parles pour les 1 unité en attaque 1 autre, si vous avez déjà dû implémenté ça je serai ravi de voir comment vous l'avez fait. (ou si vous avez le bon lien Wink )


Une autre question, qui pourrait faire l'objet d'un autre post, je m'interrogeais sur la meilleur façon de 'stocker' les rapports de combat.
Moi pour le moment, je suis parti pour stocker en BDD les attaques, les combats et les rounds des combats.

1 attaque = 1 ou plusieurs combats (en fonction du type d'attaque)
1 combat = 1 ou plusieurs rounds

Actuellement le tout est stocké en BDD. Mais je me demandais si vous faisiez ce genre de chose ou si vous avez d'autres alternatives ?
J'ai même conçu mon schéma de BDD pour pouvoir facilement ajouter des types d'unités au fil du temps sans avoir à toucher au code.

En faite j'ai plein de questions à vous posez mais j'ose pas vous flooder Big Grin (et ça ferait pas mal de post intéressant je pense)


RE: Répartition des mort après combat - Ter Rowan - 20-08-2019

(20-08-2019, 02:23 PM)Chbig a écrit : Les différents types d'unités on des statistiques différentes.

Exemple. 
Type 1 :
PV = 2
Attaque = 1
Défense = 1

Type 2 :
PV = 5
Attaque = 3
Défense = 2
Attaque = 3 

Pour l'aléatoire je n'ai rien contre, mais idéalement je voyais plutôt le fait de toucher les différents types d'unités présentent dans le combat de façon le plus 'équitable' possible.
J'entends par la que le type d'unité ultime peut aussi bien mourir que la toute première unité du jeu.

Après tout dans le combat, tout le monde participe il n'y a pas de risque 0 Big Grin

Dans ce cas je vois trois solutions :

A) méthode binaire : une unité meurt ou vit (et est en pleine forme pour le prochain combat)
je distribue les dégâts globaux (calculés comme tu l'as précédemment décrit) en fonction des pv totaux de chaque type d'unités:

exemple j'ai 50 unités de type 1 ( 20 pv) et 30 unités de type 2 ( 10pv)
alors si je dois distribuer 400 dégats cela donne

les unités de type 1 reçoivent globalement 400 * (50 *20) / ( 50*20 + 30*10) = 400 * (1000 / 1300) =308
les unités de type 2 reçoivent globalement 400 * (30 *10) / ( 50*20 + 30*10) = 400 * (300 / 1300) = 92

du coup 308/20 = 15 unités de type 1 meurent
92 / 10 = 9 unités de type 2 meurent

ton armée est désormais 35 unités de type 1, 21 unités de type 2

B méthode "en masse" détaillée, les unités peuvent être blessées
je n'ai pas 50 unités de type 1 mais

10 unités de type 1 avec 20pv
7 unités de type 1 avec 19pv,
23 unités de type 1 avec 18pv,
6 unités de type 1 avec 12pv,
4 unités de type 1 avec 6 pv


une matrice (type d'unité, nb pv, nb unités)
a partir de là tu calcules, comme précédemment le nombre de dégât par type (308 pour type 1, 92 pour type 2) a une nuance près : ce n'est pas 50*20 mais (10*20 + 7*19+ 23*18 +...) pour le poids du type 1

et là tu as deux choix :
soit tu distribues les dégâts "égalitairement" j'ai 50 unités de type 1, j'ai 308 dégâts, donc chaque unité se prend 6 dégâts, il reste

10 unités de type 1 avec 14pv
7 unités de type 1 avec 13pv,
23 unités de type 1 avec 6pv,
6 unités de type 1 avec 6 pv
et 4 cadavres


soit tu tu distribues selon une loi normale ou un truc comme ça (veut pas dire grand chose vu le nombre d'unités de l'exemple mais osef) par pv:

sur les 10 unités de type 1 à 20pv, 6 ressortent du combat à 14pv, 2 avec 18 pv, 2 avec 10pv...
sur les 7 unités de type 1 à 19pv, 3 ressortent du combat à 13pv, 2 avec 17 pv, 2 avec 7pv...
etc..

et tu vas te retrouver avec une nouvelle matrice que je ne vais pas calculer mais du genre
18pv 2
17pv 2
16pv ...
etc..
et x cadavres

C la méthode à l'unité
y a plus de matrice, mais que des unités, et chacune se prend les 6 de dégâts

à mon sens aucun intérêt par rapport à B si tu ne cherches pas à aller plus loin
mais si tu veux rajouter des fonctionnalités (y a une fourmi "héros", y a des armures mais pas pour toutes les fourmis de même type, y a du hasard --> chaque fourmi reçoit un nb aléatoire de dégât entre 0 et le rapport att/def et non la différence, les fourmis se battent une contre une, pourquoi pas avec du ciseaux pierre feuille...)

Evidemment, mais je ne me prononce pas sur le résultat, faut penser perf


RE: Répartition des mort après combat - Thêta Tau Tau - 20-08-2019




RE: Répartition des mort après combat - Xenos - 20-08-2019

Oui, au final, ça ne m'étonne pas que ce soit linéaire puisqu'on ne fait qu'une opération à chaque fois (c'est chacune des 10k unités qui tire sur une et une seule des autres 10k unités). J'avais initialement en tête que chacune des 10k unités tirait sur chacune des 10k autres unités, je ne sais pas pourquoi... :/

Je n'ai pas implémenté ce modèle moi-même, mais Ter Rowan a bien résumé les possibilités.

N'aie pas peur de "flooder", ce genre de flood ne pose aucun soucis. Ce n'est pas le flood (des bots) qui est chiant, c'est l'inutilité des posts. là, ce seraient des posts utiles, donc pas de soucis Wink


RE: Répartition des mort après combat - Chbig - 21-08-2019

(20-08-2019, 06:06 PM)Ter Rowan a écrit :
(20-08-2019, 02:23 PM)Chbig a écrit : Les différents types d'unités on des statistiques différentes.

Exemple. 
Type 1 :
PV = 2
Attaque = 1
Défense = 1

Type 2 :
PV = 5
Attaque = 3
Défense = 2
Attaque = 3 

Pour l'aléatoire je n'ai rien contre, mais idéalement je voyais plutôt le fait de toucher les différents types d'unités présentent dans le combat de façon le plus 'équitable' possible.
J'entends par la que le type d'unité ultime peut aussi bien mourir que la toute première unité du jeu.

Après tout dans le combat, tout le monde participe il n'y a pas de risque 0 Big Grin

Dans ce cas je vois trois solutions :

A) méthode binaire : une unité meurt ou vit (et est en pleine forme pour le prochain combat)
je distribue les dégâts globaux (calculés comme tu l'as précédemment décrit) en fonction des pv totaux de chaque type d'unités:

exemple j'ai 50 unités de type 1 ( 20 pv) et 30 unités de type 2 ( 10pv)
alors si je dois distribuer 400 dégats cela donne

les unités de type 1 reçoivent globalement 400 * (50 *20) / ( 50*20 + 30*10) = 400 * (1000 / 1300) =308
les unités de type 2 reçoivent globalement 400 * (30 *10) / ( 50*20 + 30*10) = 400 * (300 / 1300) = 92

du coup 308/20 = 15 unités de type 1 meurent
92 / 10 = 9 unités de type 2 meurent

ton armée est désormais 35 unités de type 1, 21 unités de type 2

B méthode "en masse" détaillée, les unités peuvent être blessées
je n'ai pas 50 unités de type 1 mais

10 unités de type 1 avec 20pv
7 unités de type 1 avec 19pv,
23 unités de type 1 avec 18pv,
6 unités de type 1 avec 12pv,
4 unités de type 1 avec 6 pv


une matrice (type d'unité, nb pv, nb unités)
a partir de là tu calcules, comme précédemment le nombre de dégât par type (308 pour type 1, 92 pour type 2) a une nuance près : ce n'est pas 50*20 mais (10*20 + 7*19+ 23*18 +...) pour le poids du type 1

et là tu as deux choix :
soit tu distribues les dégâts "égalitairement" j'ai 50 unités de type 1, j'ai 308 dégâts, donc chaque unité se prend 6 dégâts, il reste

10 unités de type 1 avec 14pv
7 unités de type 1 avec 13pv,
23 unités de type 1 avec 6pv,
6 unités de type 1 avec 6 pv
et 4 cadavres


soit tu tu distribues selon une loi normale ou un truc comme ça  (veut pas dire grand chose vu le nombre d'unités de l'exemple mais osef) par pv:

sur les 10 unités de type 1 à 20pv, 6 ressortent du combat à 14pv, 2 avec 18 pv, 2 avec 10pv...
sur les 7 unités de type 1 à 19pv, 3 ressortent du combat à 13pv, 2 avec 17 pv, 2 avec 7pv...
etc..

et tu vas te retrouver avec une nouvelle matrice que je ne vais pas calculer mais du genre
18pv 2
17pv 2
16pv ...
etc..
et x cadavres

C la méthode à l'unité
y a plus de matrice, mais que des unités, et chacune se prend les 6 de dégâts

à mon sens aucun intérêt par rapport à B si tu ne cherches pas à aller plus loin
mais si tu veux rajouter des fonctionnalités (y a une fourmi "héros", y a des armures mais pas pour toutes les fourmis de même type, y a du hasard --> chaque fourmi reçoit un nb aléatoire de dégât entre 0 et le rapport att/def et non la différence, les fourmis se battent une contre une, pourquoi pas avec du ciseaux pierre feuille...)

Evidemment, mais je ne me prononce pas sur le résultat, faut penser perf

Je pense rester sur la première méthode pour Antsland. En effet je ne pense pas que les fourmis aient un centre de soin pour blessé. Dans la nature si tu es blessé tu meurs ! Big Grin

Je tiens fortement à tous vous remercier pour vos réponses qui sont toutes très intéressante.

Même si je retiens la 1er méthode je suis content de voir les autres alternatives. Ça peut donner des idées Wink

Je vois que vous avez pas mal d'expérience dans le développement de jeu, ça se sent dans vos réponses et c'est fort utile pour mon premier développement d'avoir des retours d'expériences.


RE: Répartition des mort après combat - Xenos - 21-08-2019

Nota, je ne sais pas ce que ça donnera sur ton jeu, mais la "méthode A" signifie que si tu n'envoies que des gros sacs à PV sur des fourmis faibles, alors tu auras 0 perte (et l'adversaire en aura un paquet). Cela peut jouer sur le gameplay, en bien (c'est une bonne stratégie pour l'attaquant) ou en mal (si le défenseur n'a aucun moyen de contrer ça et que cela ne coûte rien à l'attaquant, alors les petites unités à peu de PV n'auront pas d'intérêt dans le jeu)


RE: Répartition des mort après combat - Ter Rowan - 21-08-2019

(21-08-2019, 09:52 AM)Xenos a écrit : Nota, je ne sais pas ce que ça donnera sur ton jeu, mais le "type 1" signifie que si tu n'envoies que des gros sacs à PV sur des fourmis faibles, alors tu auras 0 perte (et l'adversaire en aura un paquet).
qu'est ce que tu appelles "type 1" ? dans quelle méthode ?


RE: Répartition des mort après combat - niahoo - 21-08-2019

En gros tu veux dire qu'à cause de la division entière, plus tes unités ont de PV, plus le reste de la division sera grand et ce sont donc des PV que tu tank gratuitement ?


RE: Répartition des morts après combat - Xenos - 21-08-2019

C'est ça, je me suis gourré, c'était "méthode A" que je voulais dire, et comme reformule niahoo, tu "tank gratuitement": si les unités de type1 (cette fois, c'est vraiment type 1 que je veux dire Smile ) ont non pas 20 mais 400 PV, alors le nombre de morts devient floor(308/400) = 0. Ca peut être une stratégie intéressante, mais IMO, elle doit être compensée par autre chose (unités lentes, sans capa spécial, ou autre)


RE: Répartition des morts après combat - Ter Rowan - 21-08-2019

ok mais t as deux approches que le concepteur peut gérer :

- pv max (400 est ce réaliste si moyenne des dégâts = 100 ?)

- si deg > 0 unités perdues = max (1, floor(308/400))