Equilibrer un jeu

Discutez d'informatique ici !
numérobis2
Messages: 4
Enregistré le: 29 Nov 2021, 23:02

Equilibrer un jeu

par numérobis2 » 29 Nov 2021, 23:23

Hello à tous. Petit nouveau ici, je cherche de l'aide car ça fait des jours que je m'arrache les cheveux sur un problème pour un jeu.
Je m'en remet au savoir universel d'internet ;) et au votre essentiellement lol

J'essaye de créer un algorithme de "combat" pour un jeu. Les règles sont simples mais je n'arrive pas à équilibrer les choses.

Les combats sont 1v1
chaque joueur à
des points de vie, d'attaque et de défense.

Prenons le cas suivant
joueur 1 = VIE 200, ATTAQUE 40, DEFENSE 20
joueur 2 = VIE 200, ATTAQUE 20, DEFENSE 40

avec ces paramètres je considère que mes joueurs doivent avoir une chance équivalente de gagner le match car ils ont un même nombre total de points.

Déroulement d'un combat. A chaque tour, les joueurs vont faire un mouvement de façon aléatoire. 4 mouvement possible :
Attaque poing, attaque pied
Defense contre poing, défense conte pied

je considère donc plusieurs cas de figure

double attaque :
chaque joueur perd des points de vie dans la limite de la force de l'adversaire.
ici le joueur 1 perd un random entre 0 et 20 (car joueur 2 à max 20 de force)
joueur 2 perd un random entre 0 et 40

double défense:
aucun joueur ne perd de points
premier hic ici : le J2 "gache" 20 points de défense sur ces tours là car en moyenne il va prendre de plus gros coups lors des attaques du J1 > perdre plus de vie. ici ses 20 points de défense en plus ne servent à rien

joueur 1 attaque, joueur 2 défend:
C'est là que ça se corse...
le joueur 2 à plus de points de défense que le joueur 1. donc il devrait avoir un % de chances d'esquiver le coup qui permettrait d'équilibrer le fait qu'il attaque moins fort.
Je ne trouve pas la formule. j'ai testé des choses du type
p1def*50/p2atk mais rien n'y fait :(
Pire j'ai même essayé de forcer 100% d'esquive pour J2 et 0% pour J1 et le J1 est toujours vainqueur largement
Je pense que je n'ai pas la bonne approche :(

joueur 2 attaque, joueur 1 défend:
ici pareil dans l'autre sens
le J2 attaque moins fort, du coup la faible défense du J1 ne le désavantage pas tant que ça ...

Ajouter à cela que si il y a une attaque poing et en face défense pied, cela devrait faire plus de dégâts que si la défense est activée pour parer une attaque poing.

Dernière règle pour donner du peps. A chaque tour chaque joueur à un % de chances d'avoir un bonus multiplicateur qui va, pour ce tour uniquement booster son coup. s'il attaque il aura un X2 sur son attaque, et idem en défense....Bon ceci dit, ce paramètre ne change pas vraiment la donne statistiquement parlant.

Notez que j'essaye d'équilibrer le jeu pour un grand nombre de combats (100K et +), sachant que tous les coups sont joués aléatoirement et qu'ils ont statistiquement le même % de chances de sortir.

Bref voila ...beau petit casse tête finalement non ?
ou je suis juste nul lol ;)

merci pour vos éclairages



numérobis2
Messages: 4
Enregistré le: 29 Nov 2021, 23:02

Re: Equilibrer un jeu

par numérobis2 » 02 Déc 2021, 00:12

je continue mes tests ...

j'ai testé cette formule
$prcesquive = 100-(($p1->def * 100) / ($p1->def + $p2->atk) );

ça marche pour J1 ATT = 40 DEF = 20 / J2 ATT = 20 DEF = 40
mais pas avec
J1 ATT = 50 DEF = 10 / J2 ATT = 10 DEF = 50
dans ce cas de manière empirique j'ai trouvé que J2 doit avoir entre 78% et 79% de chances d'esquiver un coup de J1 pour que ce soit équilibré ...
ce qui donnerait plutôt ça comme formule ...
$prcesquive = ( ($p2->def * 100) / ($p1->def + $p1->atk + ($p2->atk/3) ));
mais là ça marche plus dans l'autre cas :(

numérobis2
Messages: 4
Enregistré le: 29 Nov 2021, 23:02

Re: Equilibrer un jeu

par numérobis2 » 02 Déc 2021, 23:08

Hellow. Je pensais avoir trouvé mais après avoir codé ça ne fonctionne pas
imaginons
P1 : Attaque = 70, Defense = 30, vie = 2000
P2 : Attaque=30, Defense = 70, vie = 2000

le P1 doit donc en moyenne faire 28.57 tours d'attaque pour prendre les 2000 PV du P2
le P2 lui doit faire 66.66 tours d'attaque pour les 2000PV du P1

le P2 doit donc faire 2.333 fois plus de tours que le P1

Partant de cela, je considère que pour chaque tour d'attaque le P2 a une chance sur 2.333 d'esquiver l'attaque du P1

du coup les tours de défense / défense ne servent "à rien" même s'ils peuvent sortir des fois (1/4 des fois en moyenne)

et cela devrait s'équilibrer
Or, en codant ça j'ai plutôt du 60/40 que du 50/50
je comprends pas pourquoi ... :(

numérobis2
Messages: 4
Enregistré le: 29 Nov 2021, 23:02

Re: Equilibrer un jeu

par numérobis2 » 13 Déc 2021, 18:51

Bon ben laissez tomber...je suis parti sur un tout autre modèle de combat ;)
m'enfin par curiosité si un jour quelqu'un a une idée ;)

lyceen95
Membre Complexe
Messages: 2255
Enregistré le: 15 Juin 2019, 00:42

Re: Equilibrer un jeu

par lyceen95 » 13 Déc 2021, 22:21

Quand Joueur 1 attaque et Joueur 2 défend, en toute logique, ton traitement doit prendre en compte les points d'attaque de Joueur 1 et les points de défense de Joueur 2. Et rien d'autre.
Le traitement tire un nombre aléatoire entre 0 et 40 (les points d'attaque de J1) , un autre nombre aléatoire entre 0 et 40 (les points de défense de J2), et si le premier nombre est supérieur au 2ème, le joueur 2 perd des points de vie.

Regardons les différents cas... et pour les calculs, on peut simplifier en disant que tirer un nombre aléatoire entre 0 et X, c'est systématiquement choisir X/2.


Quand 1A et 2D (Joueur 1 attaque et joueur 2 défend), J2 perd donc (A1-D2)/2

Quand 1D et 2A (Joueur 1 défend et joueur 2 attaque), J1 perd donc (A2-D1)/2

Quand 1A et 2A (les 2 joueurs attaquent), J1 perd A2/2 et J2 perd A1/2

Quand les 2 joueurs défendent, il ne se passe rien.

Au bout de 4 tours de jeux,J1 a donc perdu (A2-D1)/2 et A2/2 , soit A2-D1/2
Et J2 a perdu A1-D2/2

Du coup, on constate que les points d'attaque sont 2 fois plus importants que les points de défense.

Mais c'est normal.
Imagine un guerrier avec 0 point d'attaque et 60 points de défense. Et en face, un autre avec 30 points d'attaque et 30 points de défense.
Ok, le 1er va bien se défendre, la majorité des attaques du joueur 2 vont échouer. Mais comme le 1er guerrier ne donne aucun coup, il n'a aucune chance de gagner.

Pour tester un système, c'est toujours bien de regarder ce qui se passe aux cas extrêmes. Si il faut modifier les règles générales pour que le système donne des résultats cohérents, c'est que le système n'est pas bon.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 8 invités

cron

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite