Calcul de degat de combat tour par tour - 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 : Calcul de degat de combat tour par tour (/showthread.php?tid=7252) Pages :
1
2
|
Calcul de degat de combat tour par tour - Assas175 - 15-11-2014 Salut a tous , Voila je crée un jeux de gangs en php et dans la ville j'aimerais un systeme de combat tour par tour . du genre : 19:22 Tu fait 10 degats à LEFLIC , qui riposte pour 3 dégats. 19:19 Tu fait 5 degats à LEFLIC , qui manque sa riposte . hier a 20:30 LEFLIC te fait 10 degats , tu rispote pour 5 degat. Bon j'ai deja un system d'ex qui est determiné par plusieur facteur : Force , Habilité , esquive , resistance et l'arme des joueurs . sachant que l'habitilité determine la prise en main de l'arme , donc + on aura d'habilité et + on aura de chance de toucher la cible . les armes donne aussi leurs petit + et inconveniant ( exemple : une arme peut enlever de la force ou autre , ou elle peut en ajouté , ou les deux a la fois , retiré de la force mais ajouté de l'esquive . ) Petite note a savoir aussi : les degats dois etre assez logique en fonction des niveau ( 15 niveau ) donc entre le niveau 2 et le niveau 8 : entre 0 & 5 degat et du 9 au 12 : entre 0 et 10 et 13 au 15 : 0 - 15 ( ps : les xp commence tout par 10 ) donc voici le system que j'ai $x calcul les chances de reussir son attaque du joueur $x1 calcule les chance de reussir sa riposte //calcule des degats $x = (($player->habilite + $arme_player['hab']) - ($defender['esquive'] + $arme_enemy['esq'])); $degat = rand(1,(($player->force + $arme_player['for'])*1.3) - ($defender['resistance'] + $arme_enemy['res'])); $x1 = (($defender['habilite'] + $arme_enemy['hab']) - ($player->esquive + $arme_player['esq'])); $degat1 = rand(0,(($defender['force'] + $arme_enemy['for'])*1.3) -($player->resistance + $arme_player['res'])); le probleme c'est que mes teste avec les xp tel moi : 12 en habilité 10 10 10 pour le reste + une arme avec +1 de force et l'enemy en 12 force 10 10 10 pour le reste et avec une arme + 1 de force j'arrive a cela : 19:22 Tu fait 10 degats à LEFLIC , qui riposte pour 3 dégats. 19:19 Tu fait 5 degats à LEFLIC , qui manque sa riposte . 19:18 Tu fait 11 degats à LEFLIC , qui manque sa riposte . Donc si quelqu'un aurais une solution se serais sympa , merci RE: Calcul de degat de combat tour par tour - Xenos - 17-11-2014 • Tout objet ou tout tableau, ce sera plus clair qu'un mix $player->habilete et $arme['hab'] • rand(1, ... - ...) risque de poser soucis si le second membre de l'opération de soustraction est supérieur ou égal au premier (on se retrouvera avec rand(1, 0) ou rand(1, -2)) • La formule n'est pas symétrique: le premier est un rand(1,...) et le second est un rand(0,...). Puisque ces deux formules représentent la même chose, crée une fonction (ou une méthode d'une classe CalculateurDegatAttaque) • Où sont utilisés $x eyt $x1? Inutile de calculer les dégâts de l'attaque/ de la riposte en cas d'échec • Attaque/Riposte sont les deux facettes d'un même algorithme (simplement, les rôles frappeur/frappé sont inversés): crée une fonction/méthode de classe pour calculer la proba de réussite du coup et ses dégâts, et appelle-la 2 fois (une pour l'attaque, une pour la riposte) • J'ai pas vraiment compris le problème de fond: tu t'attendais à un résultat à peu près équilibré entre les deux joueurs? Si oui, c'est normal qu'il ne soit aps équilibré: les formules rand() diffèrent. Après, il te faut beaucoup plus que 3 essais pour voir si c'est bien équilibré... RE: Calcul de degat de combat tour par tour - Assas175 - 19-11-2014 Non pas forcément , enfaite je voulais juste que voila au niveau 2 il y ai des degat de max 9 , les riposte pouvais etre en dessous de 10 ( pour chaque niveau ^^ ) au niveau 3 taper genre entre 10 & 14 etc.... tu vois pour que ce sois coherant , car plus ou moins a chaque niveau tu peu avoir une arme ( offensive ou defensive ) avec des caracteristique differente , du genre au niveau deux tu aurais une arme offensive qui te rajoute 1 de force au niveau 15 une arme qui te rajoute 10 de force mais t'enleve de habilité ou autre etc... RE: Calcul de degat de combat tour par tour - Xenos - 20-11-2014 J'ai encore rien compris... Fais les choses clairement. Dresse un tableau précis des limites que tu souhaites imposer, type: Niveau | Hab- | Hab+ | Force- | Force+ | Degats min | Degats max | Riposte min | Riposte Max 1 | 0 | 3 | 0 | 3 | 0 | 6 | 0 | 5 2 | 2 | 5 | 1 | 5 | 0 | 9 | 0 | 10 (Hab- = Habileté min, Hab+ = Habileté max). Là, tu auras déjà une base claire qui te permettra de construire tes formules. Ensuite, définis quels sont les paramètres d'entrée et de sortie. Apparemment, ici, on a (Niveau, Habileté[avec bonus/malus], Force[avec bonus/malus]) en entrée et (degats) en sortie pour l'attaque et de même pour la riposte. Tu pourras alors trouver, par interpolation, une fonction qui correspond à tes attentes. C'est une approche un peu "procédurale", qui donne un grand contrôle mais aboutit à des formules parfois complexes. L'autre alternative consiste à faire plus "orienté objet" (en fait, plus atomique), et à décider ce que chaque composant d'entrée apporte au résultat final. L'assemblage des composants d'entrée peut alors déboucher sur des résultats plutôt inattendus. L'approche est plus simple, plus ouverte (on peut greffer de nouvelles entrées facilement) mais également plus émergente (on peut trouver des combinaisons d'entrées dont le résultat est très puissant). Pour cette approche, il suffit que tu fixes des règles élémentaires, et que tu les laisses s'assembler pour voir ce qu'elles donnent. Par exemple, tu peux dire que max(0, différence d'habileté)*max(0, différence de force) = dégats reçus. Puis tu greffes que (niveau de l'attaquant / niveau du défenseur) multiplie les dégats précédemment calculés. Puis tu peux retrancher -4 de dégats si le défenseur possède un bouclier / objet spécial. Puis ajouter +2 si il possède une potion de puissance... Etc. Là, ne compte pas sur "je veux que, au niveau 2, on fasse 9 de dégâts max". Compte plutôt sur l'émergence de comportements de jeu (les joueurs vont, d'eux-memes, choisir les combinaisons qui marchent le mieux). RE: Calcul de degat de combat tour par tour - Assas175 - 20-11-2014 Bon je vais essayer d'etre + clair et + précis :p ( desolé ) Donc tu commence niveau 1 avec 10 d'exp partout 10 hab 10 force 10 resistance 10 esquive a chaque niveau tu as 23 xp A REPARTIR : Donc on pourrais imaginer qu'au niveau 13 on arrive a ce schema ( c'est un exemple Tu as 5 à distribuer. ( il faut minimum 11 pts xp pour savoir repartir ) Force :14 Habilité :13 Resistance :15 Esquive :15 avec une arme offensive qui donne Force:+ 1 Maintenant , tout dois dependre de l'adversaire , a savoir ce qu'il a comme XP et comme arme ( defensive au offensive ) Si il est en offensive cela pourrais donner ca hier à 19:45:18 Tu fais 9 dégâts à dengmamm, qui riposte pour 2 dégâts. hier à 19:45:15 Tu fais 10 dégâts à dengmamm, qui riposte pour 2 dégâts. hier à 19:45:10 Tu fais 9 dégâts à dengmamm, qui manque sa riposte. Si il est en full esquive ou resistance hier à 19:45:18 Tu rate ton attaque sur dengmamm, qui riposte pour 2 dégâts. hier à 19:45:15 Tu fais 3 dégâts à dengmamm, qui manque sa riposte. hier à 19:45:10 Tu rate dégâts à dengmamm, qui manque sa riposte. Si il a + d'esquive , tu ratera + tes coup , si il est en resistance , tu le touchera mais moins fort Si il a les deux ( esquive et resistance ) il se pourrais que 1 fois sur 3 tu le touche ////////////////////////////////////////////////////////////////////////////////////// Infos supplementaire : Par exemple au N15 tu aurais une arme defensive de ce genre : Effets Habileté: -2 Force: -2 Esquive: 5 Résistance: 5 Une arme offensive : Habileté: 9 Force: 4 Résistance: -1 Sachant que tu ne peu que taper 3 fois la cible toutes les 24h00 que tu sera surement dans un gang de max 12 joueurs reel. Que tu peu mourir si tu verifie pas ta vie ( genre il te reste 5 de vie , tu fait 2 attaque ou tu te prend 3 de riposte bah boom tes mort ^^ alors que tu etait l'attaquant ) Si il faut des infos supp... hesite pas . car deja que je suis une plaie en math , mais alors si j'explique mal , je suis pas pret de reussir mdr et merci de m'aider ici le script pour la repartition des xp VIA le formulaire de repartition <script> function forup(){ var XP = $( "#xp" ).val();var FORCE = $( "#forc" ).val();FORCE = up_xp(FORCE); if(XP <= 0 || (XP - FORCE) <= 0){ } else { $( "#xp" ).val((XP---(FORCE+++1))); $( "#forc" ).val(FORCE); } return false; } function fordown(){ var xp = document.getElementById("xp"); var forc = document.getElementById("forc"); if(forc.value <= minf){}else {xp.value = Math.round(xp.value +++ up_xp(forc.value));forc.value--;} } function up_xp(a){ if(a == 10){b = 10;}else if(a == 11){b = 11;}else if(a == 12){b = 12;} else if(a == 13){b = 13;} else if(a == 14){b = 14;} else if(a == 15){b = 15;} else if(a == 16){b = 16;} else if(a == 17){b = 17;} else if(a == 18){b = 18;} else if(a == 19){b = 19;} else if(a == 20){b = 20;} else if(a == 21){b = 21;} else if(a == 22){b = 22;} else if(a == 23){b = 23;} else if(a == 24){b = 24;} else if(a == 25){b = 25;} else {b = 0;} return b; } function hup(){ var XP = $( "#xp" ).val();var FORCE = $( "#h" ).val();FORCE = up_xp(FORCE); if(XP <= 0 || (XP - FORCE) <= 0){ } else { $( "#xp" ).val((XP---(FORCE+++1))); $( "#h" ).val(FORCE); }return false; } function hdown(){ var xp = document.getElementById("xp"); var forc = document.getElementById("h"); if(forc.value <= minh){}else {xp.value = Math.round(xp.value +++ up_xp(forc.value));forc.value--;} } function rup(){ var XP = $( "#xp" ).val();var FORCE = $( "#r" ).val();FORCE = up_xp(FORCE); if(XP <= 0 || (XP - FORCE) <= 0){ } else { $( "#xp" ).val((XP---(FORCE+++1))); $( "#r" ).val(FORCE); } return false; } function rdown(){ var xp = document.getElementById("xp"); var forc = document.getElementById("r"); if(forc.value <= minr){}else {xp.value = Math.round(xp.value +++ up_xp(forc.value));forc.value--;} } function eup(){ var XP = $( "#xp" ).val();var FORCE = $( "#e" ).val();FORCE = up_xp(FORCE); if(XP <= 0 || (XP - FORCE) <= 0){ } else { $( "#xp" ).val((XP---(FORCE+++1))); $( "#e" ).val(FORCE); }return false; } function edown(){ var xp = document.getElementById("xp"); var forc = document.getElementById("e"); if(forc.value <= mine){}else {xp.value = Math.round(xp.value +++ up_xp(forc.value));forc.value--;} } </script> RE: Calcul de degat de combat tour par tour - @lucard - 20-11-2014 (19-11-2014, 10:59 PM)Assas175 a écrit : je voulais juste que voila[...] (20-11-2014, 12:49 AM)Assas175 a écrit : Donc tu commence niveau 1 avec 10 d'exp partoutJusque là OK (20-11-2014, 12:49 AM)Assas175 a écrit : a chaque niveau tu as 23 xp A REPARTIR :Damn ! 23points ? y'avait pas plus simple : genre 13,24751 pts ? pourquoi pas 24pts ? ([6x4] 6 hab 6 force 6 resistance 6 esquive) (20-11-2014, 12:49 AM)Assas175 a écrit : Tu as 5 à distribuer. ( il faut minimum 11 pts xp pour savoir repartir )je croyais que c'était 23 ? et "il faut 11pts xp" c'est 11 pts ? ou 11 xp ? (20-11-2014, 12:49 AM)Assas175 a écrit : hier à 19:45:18 Tu fais 9 dégâts à dengmamm, qui riposte pour 2 dégâts.Je sais pas vous mais... Cette phrase je ne la comprends pas comme cela. pour moi ça veut dire : Tu rates ton attaque sur Toto, qui lui (Toto), manque sa riposte. le principe d'une riposte c'est que : celui qui reçoit l'attaque, contre-attaque. (20-11-2014, 12:49 AM)Assas175 a écrit : Infos supplementaire : (20-11-2014, 12:49 AM)Assas175 a écrit : Que tu peu mourir si tu verifie pas ta vie ( genre il te reste 5 de vie , tu fait 2 attaque ou tu te prend 3 de riposte bah boom tes mort ^^ alors que tu etait l'attaquant )ça fait mal aux yeux toutes ses fautes... mais bref,
5 PV + 2 ptsAT = Mort 5 Pv + (- 3PV) = mort ! O_o je suis quasiment sur que nous avons affaire à un Calcul Killeur Quand tu attaques, tu perds des points de vie ? quand tu te prends 3 pts AT, tu perds 5 Points de Vie ! (20-11-2014, 12:49 AM)Assas175 a écrit : ici le script pour la repartition des xp VIA le formulaire de repartition Utilises la balise [code=js]ICI TU METS TON SCRIPT (sans les balise HTML <script>) [/code] et si ça fait des km de long, utilises les balises [spoiler][/spoiler] RE: Calcul de degat de combat tour par tour - niahoo - 20-11-2014 (20-11-2014, 09:20 AM)@lucard a écrit :(20-11-2014, 12:49 AM)Assas175 a écrit : hier à 19:45:18 Tu fais 9 dégâts à dengmamm, qui riposte pour 2 dégâts.Je sais pas vous mais... En ben ouais, qu'est-ce qui n'est pas clair ? Pour chacune de tes attaques, l'adversaire riposte. dans ta phrase, chacun des protagonistes a raté son action, pour l'un l'attaque, pour l'autre la riposte. Sinon mdr les calculs effectivement il va falloir éclaircir ça. Si ce n'est pas clair dans ta tête tu ne pourra jamais les coder. RE: Calcul de degat de combat tour par tour - Ter Rowan - 20-11-2014 je dirais de faire ainsi : 1) tu considères la riposte comme une attaque du coup tu t'embêtes plus avec la riposte, ca se calcule comme une attaque, reste à savoir comment calculer une attaque 2) wikipedia et consort ton modèle est très simple (3 ou 4 paramètres genre force, habilité, ..) Prends un modèle existant ou inspire t'en fortement (ex : système D6, D20, D100, .... pour les jeux de rôle ou les méthodes de MMO wow, etc... ou pourquoi pas pokemon et autres, je ne par le pas de l'univers mais des systèmes de calcul) sur wikipedia, tu cherches jeux de rôle et après tu tombes sur les liens associés sur toute la matière qui va bien si t'es nul en math comme tu le dis, autant ne pas t emmerder, sinon tu vas tourner en rond avec les deux trois cervaux capables d'inventer des trucs probablement trop compliqués pour ton besoin (et la c'est kamoulox versus kaameloot les règles qu'on élabore) si un système te parait bien, teste le, si tu veux affiner après ou comprendre une partie, reviens vers nous, sinon tu t'en sortiras pas a partir de 0 RE: Calcul de degat de combat tour par tour - @lucard - 20-11-2014 (20-11-2014, 11:52 AM)niahoo a écrit : En ben ouais, qu'est-ce qui n'est pas clair ? Pour chacune de tes attaques, l'adversaire riposte. dans ta phrase, chacun des protagonistes a raté son action, pour l'un l'attaque, pour l'autre la riposte. En fait, dans ma tête ça n'avait pas encore le m^me sens ce matin...:heu: cause : la fièvre ? Je pensais que comme toto esquivait, il devait pouvoir riposter... hors là il loupe/manque autant de fois (proportionnellement) qu'il esquive. effectivement, après re-re-re-relecture, ça me choque moins. RE: Calcul de degat de combat tour par tour - Assas175 - 20-11-2014 (20-11-2014, 09:20 AM)@lucard a écrit :(19-11-2014, 10:59 PM)Assas175 a écrit : je voulais juste que voila[...] Personnelement sa me donne meme pas envie de te repondre , mais bon vu que tu te crois si malin .... puis je ne savais pas qu'on etait a l'ecole et que les fautes d'orthographe t'empechais de comprendre un probleme , au pire si tu veux je veux bien te le rééxpliquer en kikoolol peut etre que tu comprendra mieux.. fin bref Damn ! 23points ? y'avait pas plus simple : genre 13,24751 pts ? <--- si j'ai envie de foutre 23 c'est mon droit non ?! bref : quand je jouer monte : update Point_experience=+23 quand il répartit ces xp , si tu a bien suivis le script juste en dessous si il a 23 a repartir et qu'il met deux point en esquive (exemple ) bah , il ne lui reste deja plus que 2 point experience ^^ apres si tes pas foutu de regarder l'entiereté des postes.... Alors 5 PV + 2 ptsAT = Mort [Image: smilies_mort019.gif] 5 Pv + (- 3PV) = mort ! [Image: smilies_mort019.gif] O_o je suis quasiment sur que nous avons affaire à un Calcul Killeur Faux ! apprend a lire une fois de + j'ai dit que tu avait 5 de vie ok ?! ( indice : 5 c juste entre 4 et 6 ) tu fait deux attaque , ou le gars te riposte dans la gueule 3 points tu fais 5 degat a toto , qui riposte pour 3 degat tu fais 7 degat a toto , qui riposte pour 3 degat 3+3 ? 6 ( c'est le numero que je t'ai expliqué un peu plus haut ^^ ) 5-6 ? sa c'est un peu plus dure pour toi ca fait -1 , donc en gros 0 de vie , donc oui tu es mort Merci de t'abstenir de repondre la prochaine fois , je cherche des vrais reponse , pas des gens comme toi qui font que flooder pour se croire interessant |