IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

Équilibrer un jeu video


Sujet :

Intelligence artificielle

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    786
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 786
    Points : 602
    Points
    602
    Par défaut Équilibrer un jeu video
    Bonjour, je fais un petit jeu video.
    Dans ce jeu il y a un personnage qui peut avoir des niveau d' expériences, des attaques et des sorts et de la vie. Il y a aussi des ennemis.

    Je cherche a équilibrer mon jeu pour par exemple lors qu'un joueur de niveau 20 joue la première carte (soit la carte fait pour les joueurs de niveaux 1 logiquement) il y arrive très facilement.

    Je ne sais pas si il existe des méthodes/papiers.. sur le sujet.
    Sinon je peux simplement multiplier les dégâts du héros par son niveaux etc... mais ce n'est pas très robuste.

    Merci de votre aide.
    Demandez moi si je n'ai pas été assez précis.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 815
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 815
    Points : 218 179
    Points
    218 179
    Billets dans le blog
    117
    Par défaut
    Bonjour,

    Peut-être il existe des formules magiques (par les chaman game designer ), mais je doute un peu.
    Sinon, le mieux serait de mettre des outils d'analyse, qui trace des courbes pour avoir une vue facile à étudier des paramètres et conséquences.

    Ou encore, il faut faire béta tester (et analyser).

    Sinon, non, je ne vois pas. Mais bon, si vous avez une force de 10 au premier niveau et que cela est moyen et que, lorsque vous revenez avec 20 niveau de plus et que vous avez une force de 200, j'imagine que c'est plus facile, sans aucun doute
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2008
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 19
    Points : 23
    Points
    23
    Par défaut
    Je up le sujet car j'ai le même "problème" que saturn1.

    Est ce que depuis le temps, tu as trouvé une réponse à cette problématique saturn1 ?

    Quand on voit des jeux comme Diablo, je me demande bien comment ils font pour équilibrer toutes les propriétés des personnages. Personnellement je ne pense pas qu'ils y vont "à l'arrache"; ils doivent avoir un algorithme de base dont ils peuvent ajuster les paramètres pour équilibrer l'ensemble des attributs.

    EDIT : Je viens de trouver une première piste : http://www.rpgmakervxace.net/topic/4...balanced-game/

  4. #4
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    Par défaut
    @Poison_xtreamlua : Merci pour le lien ;-)

    Cela pourra sans doute me servir dans le cadre d'un actuel projet de jeu (petit) qui pourrait s'apparenter à un RPG au tour par tour.

    Si cela peut t'aider, voici plus ou moins la démarche, encore non validée ^^, que j'ai adopté pour mon levelling.

    1. Choix du système de levelling
    La première chose fut de savoir si je voulais faire un système de levelling global, chaque nouveau level faisant progresser globalement toutes les compétences de mes persos, ou bien un "levelling by doing", ce que j'ai choisi, où chaque compétence ne s'améliorant que si elle est utilisée. Chaque compétence a un compteur d'XP qui lui est propre, ainsi que des franchissements de levels qui lui sont propres. Une compétence C1 peut être par exemple au level 5 tandis qu'une autre compétence C2 peut être restée au level 1. Pour les attributs non levellables par l'action, typiquement les HP, le levelling se fera en additionnant l'XP de chaque compétence levellable (eg. dans le cas précédent, C1 et C2). C'est ce que j'appellerai par la suite l'expérience globale.

    A noter que je ne suis pas un expert, donc il doit il y avoir sans doute d'autres variantes, mais je pense que c'est grosso modo les deux principales approches.

    2. Courbe d'expérience globale
    Il a fallu ensuite que je définisse la courbe d'expérience globale. Ca n'a pas l'air aussi compliqué que cela n'y paraît.
    En faisant des recherches, je suis tombé sur l'approche indiquée ici : http://gamedev.stackexchange.com/que...p-requirements
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    #include <cmath>
    #include <iostream>
     
    int main(void)
    {
        int levels = 20;
        int xp_for_first_level = 60;
        int xp_for_last_level = 10000;
     
        double B = log((double)xp_for_last_level / xp_for_first_level) / (levels - 1);
        double A = (double)xp_for_first_level / (exp(B) - 1.0);
     
        for (int i = 1; i <= levels; i++)
        {
            int old_xp = round(A * exp(B * (i - 1)));
            int new_xp = round(A * exp(B * i));
            std::cout << i << " " << (new_xp - old_xp) << std::endl;
        }
    }
    C'est ce qui m'a semblé à la fois simple et pertinent sans rentrer dans des considérations trop "fine tuning". Comme j'avais la flemme d'installer un compilo C++, ça fait un bail que je n'y ai plus touché, j'ai utilisé un compilateur en ligne : http://www.compileonline.com/compile_cpp_online.php
    Ce qu'il faut pour faire tourner l'algo, c'est surtout définir le nombre de levels, l'XP à accumuler pour le premier level et l'XP à accumuler pour le dernier level.
    A mon avis, je pense que les valeurs de ces trois paramètres sont assez arbitraires et sans véritable importance. Cela sert surtout à fixer un cadre.
    Il va sans dire que plus l'échelle est large (autrement dit plus la différence entre l'XP du 1er level et l'XP du dernier level est grande) et plus l'échelle est fine (autrement dit plus le nombre de levels est important), et plus on peut jouer sur des détails, mais bon, c'est avant tout une question de goût à mon avis.
    Dans le cadre de mon projet de jeu, j'ai fixé le nombre de levels à 20, l'XP pour le level 1 à 60, et l'XP pour le level 20 à 10.000.
    J'ai donc les relations suivantes :
    (2.1) Levels = 20
    (2.2) Level 1 = 60 XP
    (2.3) Level 20 = 10000 XP

    3. Rôles des combats
    Dans mon jeu, à priori seuls les combats permettront de gagner de l'XP. A partir de ce postulat, j'ai défini qu'il serait nécessaire de réaliser environ 5 combats pour que mon personnage atteigne le premier level.
    J'ai donc posé la relation : (3.1) Level 1 = 5 Combats
    D'après la relation (2.2), j'ai : (3.2) Combat = 12 XP = 60 XP / 5 Combats

    Comme de plus, j'ai adopté un système de levelling by doing, j'ai du estimé une proportion possible d'utilisation de chaque compétence. Pour simplifier mon discours, je dirai que mon perso a deux compétences, C1 et C2.
    J'ai estimé que la compétence C1 pourrait être utilisée 75% du temps pendant un combat.
    Tandis que la compétence C2 pourrait être utilisée 50% du temps pendant un combat.
    Là, certains remarqueront que 75% + 50% > 100%, mais je me place pour chacune de ces compétences, dans la situation où un joueur voudrait maximiser l'une des compétences. Pour la compétence C1, les contraintes du jeu font qu'il ne pourrait pas l'utiliser au delà de 75% sous peine d'adopter une stratégie perdante et donc de mourir pendant un combat. Idem pour la compétence C2, un joueur qui voudrait maximiser celle-ci ne pourrait pas l'utiliser plus de 50% du temps sous peine de devoir recommencer une nouvelle partie.
    Je pose donc les relations de "probabilité" p(C1) et p(C2) :
    (3.3) p(C1) = 75%
    (3.4) p(C2) = 50%
    D'après la relation (3.2), j'obtiens une XP possible par combat pour C1 et C2 :
    (3.5) C1 = 9 XP / Combat = 75% * 12 XP
    (3.6) C2 = 6 XP / Combat = 50% * 12 XP

    Tout ceci me permet de déduire l'XP à accumuler pour C1 (resp. C2) afin d'atteindre le level 1 :
    (3.7) Level 1 (C1) = 45 XP = 9 XP * 5 Combats
    (3.8) Level 1 (C2) = 30 XP = 6 XP * 5 Combats

    4. Courbes d'expérience spécifiques
    D'après le paragraphe précédent, j'ai obtenu l'XP nécessaire pour atteindre le level 1 concernant les compétences C1 et C2. Il me faut maintenant l'XP pour atteindre le dernier niveau, à savoir le level 20.
    J'utilise pour cela la basique règle de trois ce qui me donne :
    (4.1) Level 20 (C1) = 7500 XP = 10000 XP * 75%
    (4.2) Level 20 (C2) = 5000 XP = 10000 XP * 50%

    Ensuite, en reprenant l'algo décrit dans le paragraphe (2), en conservant le nombre total de levels, mais en modifiant les XP du level 1 et du level 20 comme décrit précédemment, j'obtiens ainsi les courbes d'expérience de C1 et C2 qui régiront le franchissement des levels pour ces deux compétences.

    5. Calibrer la puissance des attaques
    On entre dans la partie qui me semble la plus difficile à formaliser : comment calibrer la puissance des attaques ?
    Je me suis pour ma part contenté de garder à l'esprit le nombre de tours par combat que je souhaitais, 5 tours au début, puis crescendo de façon à ce que les gains en XP espérés collent avec les courbes d'expérience.
    Toujours en fonction de la durée moyenne des combats, j'essaierai d'ajuster en parallèle la puissance des attaques les plus puissantes de mon perso en regard de la puissance des ennemis qu'il sera amené à rencontrer.

    Si j'ai d'autres idées au fil de mon projet, j'essaierai de les poster

    Sur ce, bon courage !
    Tutoriels et FAQ TypeScript

  5. #5
    Rédacteur/Modérateur

    Avatar de yahiko
    Homme Profil pro
    Développeur
    Inscrit en
    Juillet 2013
    Messages
    1 423
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Juillet 2013
    Messages : 1 423
    Points : 8 699
    Points
    8 699
    Billets dans le blog
    43
    Par défaut
    J'ai trouvé un article intéressant sur Gamasutra à propos de stratégies optimales pour jouer à des MMO : http://www.gamasutra.com/view/news/1..._a_science.php

    Bien que cela ne soit pas exactement le sujet et surtout que le degré de sophistication soit clairement "overkill" pour la majeur partie des jeux indépendants, ça peut éventuellement donner des idées à certains, qui lisent l'anglais
    Tutoriels et FAQ TypeScript

Discussions similaires

  1. Jeu video 2D, Qt ou OpenGl ou SDL ?
    Par Despak dans le forum API graphiques
    Réponses: 12
    Dernier message: 06/11/2010, 01h59
  2. Test dans une boîte de jeu video
    Par Riki dans le forum Développement 2D, 3D et Jeux
    Réponses: 38
    Dernier message: 03/05/2007, 01h09
  3. Recherche jeu video amateur
    Par kidcam dans le forum Développement 2D, 3D et Jeux
    Réponses: 12
    Dernier message: 19/03/2007, 00h53
  4. conception jeu video quel outils, quel language?
    Par darontankian dans le forum Développement 2D, 3D et Jeux
    Réponses: 6
    Dernier message: 13/02/2007, 21h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo