JeuWeb - Crée ton jeu par navigateur
Algorithme pour créer un personnage avec des caractéristiques équitables. - 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 : Algorithme pour créer un personnage avec des caractéristiques équitables. (/showthread.php?tid=5110)

Pages : 1 2 3


Algorithme pour créer un personnage avec des caractéristiques équitables. - Stromae - 23-08-2010

Bonjour à tous,

comme je le précise dans ma présentation, je suis actuellement en cours de programmation de mon jeu par navigateur en php. Mon jeu n'est pas de type travian ou ogame.

Dans mon jeu vous gérez un et un seul personnage. Ce personnage a des caractéristiques qui le différencie des autres (vie, force, vitesse, argent, etc...). Ce joueur ce déplace dans une ville et combat d'autres joueurs. Cependant il arrive que lors d'une bataille un des deux adversaire succombe.

Dans mon jeu par exemple, la vitesse est la caractéristique la plus value mais aussi celle qui s'obtient le plus fréquemment. Il ne sera donc pas rare qu'en milieu de partie plusieurs personnages aient + de 200 de vitesse mais d'autres joueurs, la majorité qui comporte les plus faibles, les inactifs (qui ont créés un compte et ne jouent plus), ceux qui visent des autres caractéristiques et ceux qui meurent tout le temps qui eux auront entre 30 et 60 points.

J'aimerais trouver un algorithme qui me permette lors de la création d'un personnage (premier personnage de la partie ou après une mort) d'avoir des caractéristiques qui tiennent la route, pas trop faibles, pas trop élevées, et qui évoluent au cours de chaque partie. (Une partie durerais entre 1 et 3 mois).

Bon j'ai déjà pensé à faire une sorte de moyenne pour chaque caractéristique mais je pense que cela apporterais les mêmes caractéristiques à plusieurs joueurs et une grosse baisse des caractéristiques lorsque un ou plusieurs "gros personnages" meurent, genre tout le monde aura 35 de vitesse, et lorsque ils y aura 100 points de vitesse de fait, tous les nouveaux persos auront 36 de vitesse ainsi de suite... pas très intéressant.

Je préfèrerait avoir un peu du hasard. Par exemple un joueur meurt il revit avec 35 de vitesse, 20 de force, 20 d'intelligence. Il meurt 2 minutes après, il revit avec 42 de vitesse, 18 de force, 13 d'intelligence, encore après il revit avec 32 de vitesse, 23 de force, 18 d'intelligence.

Enfin cela m'a l'air compliqué déjà pour moi même, c'est pour cela que je m'en remet à vous ! Smile

Merci à ceux qui prendront la peine de réfléchir et de répondre !

Bonne soirée


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - srm - 23-08-2010

Tu as N caractéristiques (Nombre de caractéristiques).
Tu veux que la somme des caractéristiques à la création vaut S (230 par exemple) pour que ça soit équitable.

Tu tires pour chaque caractéristique un nombre entre 30 et 60.
Tu fais la somme de toutes les caractéristiques.

Tu soustrais 230 de cette semaine et tu divises par N ce qui te donne D (Delta)
Tu rajoutes ou enlève ce D sur chaque caractéristique.

Voilà ça te donne un truc à peu près équitable et aléatoire Smile


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - zeppelin - 23-08-2010

+1 pour oxman.

A part contre comme tu le dis toi-même, les caractéristiques n'ont pas toutes la même valeur (importance).

Tu peux donc créer un tableau avec l'importance de chaque caractéristique, du genre:

Code PHP :
<?php 
$importance
['vitesse'] = 1.5;
$importance['vie'] = 0.8;

etc.

Si on reprends l'exemple d'oxman, pas tout le monde aura 230 points réel, mais pour 230 points d'importance (10 points de vitesse valent 15 points, 20 points de vie valent 16 points etc).

Je te conseil vivement d'utiliser ce systèm, même si au début tu utilisera 1 pour chaque caractéristique, car de cette manière tu pourras très facilement re-adapter ton jeu si tu remarque qu'une caractéristique est trop importante comparé aux autres!


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - Ter Rowan - 23-08-2010

un peu dans le même genre mais en plus "dirigiste"

un tableau avec chacune des caractéristiques contenant une valeur

base['vitesse'] = 100
base[force'] = 20
base['intelligence'] = 80

un "reste" (pour arriver à la somme des caractéristiques que tu veux)
dans le chiffrage "oxman"

reste = 30 (pour arriver au "230 oxman")

ensuite tu boucles et tu distribues ces points (en supposant que le tableau des caractéristiques soit $caracs

c = count(base) // combien de carac
p = 1 // combien de carac déjà attribuées
foreach (base as carac => valeur)
{
d = eclate(reste, c,p++)
caracs[carac] = valeur + d
reste - = d
if reste ==0 break; // inutile de continuer à boucler
}

c'est du proto code mais bon on est pas loin

reste plus qu'a définir la fonction "eclate"

je vois au moins deux solutions

la première simple
eclate n'est rien d'autre qu un rand entre 0 et reste
cette méthode favorise les premières caractéristiques au dépend des dernières

la deuxième guère plus poussée
eclate fait un rand entre 0 et reste * p/c
cette méthode favorise plutôt les dernières caractéristiques au dépend des premières
après tu n'as plus qu'à jongler avec les valeurs de base


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - srm - 23-08-2010

Concernant le fait que le reste/N ne sera pas rond et donc la dernière caractéristique serait toujours favorisé. Il suffit d'avoir un tableau d'index que l'on shuffle avant ainsi la caractéristique favorisé n'est pas toujours la même Smile


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - Ter Rowan - 23-08-2010

(23-08-2010, 09:56 AM)oxman a écrit : Concernant le fait que le reste/N ne sera pas rond et donc la dernière caractéristique serait toujours favorisé. Il suffit d'avoir un tableau d'index que l'on shuffle avant ainsi la caractéristique favorisé n'est pas toujours la même Smile

ah oui pas mal le coup du shuffle !

sinon en y repensant pour la partie "base"

on peut aussi créer plusieurs bases, du genre "perso rapide", "perso fort", etc...

du coup une phase avant celles décrites : sélectionner au hasard une base


maintenant, pourquoi ne pas laisser le joueur créer lui même son personnage ?


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - Sephi-Chan - 23-08-2010

C'est peut-être plus sympa de lui proposer un archétype : comme ça il n'a plus qu'à balancer les points d'une caractéristique à l'autre.

Si on me donne 230 points à attribuer dans 5 compétences, ça va me gonfler. Alors que si c'est pré-rempli (aléatoirement) et que je peux virer quelques points d'un côté, les mettres de l'autre, etc. Avec bien entendu un compteur de points restant à attribuer. Je trouverai ça plus sympa.

Le mieux est à mon avis un outil présenté comme cela, mais ça nécessite quelques compétences un peu particulières.

[Image: Naruto-Itachi-Diag-all.png]


Sephi-Chan


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - srm - 23-08-2010

Il est nul ton perso il a pas d'endurance Tongue


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - Sephi-Chan - 23-08-2010

C'est Itachi Huchiha, du manga Naruto ! Il n'a pas besoin d'endurance tellement il est (était) classe ! Big Grin
Et puis, il est rapide !
N'empêche que ça serait intéressant de créer ce genre de widget cross browser.


Sephi-Chan


RE: Algorithme pour créer un personnage avec des caractéristiques équitables. - Ter Rowan - 23-08-2010

c'est marrant autant j'aime bien les radars pour des indicateurs du boulot, autant j'ai du mal à apprécier cela pour des caractéristiques

encore ça dépend lesquelles...

pour les caractéristiques type "magie" je trouve cela comme une bonne idée (genre plutôt magie noire, magie blanche, etc...) mais un fond moins excell'ien
serait peut être un plus

autant pour des caractéristiques plus "réalistes" (force, intelligence, ...) je trouve pas ça terrible

je sais pas pourquoi, problème de sensibilité ?