1. #1
    Membre régulier Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    septembre 2017
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : septembre 2017
    Messages : 55
    Points : 96
    Points
    96

    Par défaut Calculer un taux de critique ou de loot?

    Salut tout le monde ici Tonton Nico (encore et encore ),

    Je me demandais en avançant un projet sous Unity avec des script C# , comment vous calculez qu'un taux de critique ou de chance de loot à lieu? J'ai checké sur google mais je n'ai pas réussi à trouver de topic exact sur ce sujet, du coup je m'explique:

    Si j'ai un TAUX de X% de chance de faire un critique quand je tape un monstre, quel est la fonction? je pensais à ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public bool TestCoupCritique(int TAUX)
        {
     
            int NB = Random.Range(1, 100);
            if (NB <= TAUX)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    C'est aussi bête que ça? Si oui du coup il vaut mieux utiliser un random.value? cela se calcule plus vite entre 0 et 1?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public bool TestCoupCritique(int TAUX)
        {
     
            float NB = Random.value * 100;
            if (NB <= TAUX)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
    Ou alors il y a largement plus simple ou mieux?

    Merci d'avance pour vos retours

    Tonton Nico

    Edit: modif du nom de la fonction pour être plus cohérent et quelques vilaines fautes
    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

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


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

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

    Informations forums :
    Inscription : mai 2008
    Messages : 22 581
    Points : 156 417
    Points
    156 417
    Billets dans le blog
    11

    Par défaut

    Bonjour,

    Oui, c'est aussi simple que ça. Du moins, c'est comme ça que je le fais .
    Comme souvent les API de génération de nombres aléatoires fournissent des nombres entre 0 et 1, vous allez directement utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (rand < taux / 100.0)
    (si tauxest en pourcentage, car plus propre pour l'utilisateur.) Toutefois, vous pouvez utiliser taux un nombre entre 0 et 1 .

    Note : si vous implémentez une fonctionnalité de replay, ou que vous voulez jouer exactement la même partie, pensez à sauvegarder la graine utilisée pour la génération du nombre (et aussi, il faut toujours appeler le générateur de nombre un même nombre de fois (sinon ça décale les résultats).
    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
    Expert éminent sénior
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    4 782
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : décembre 2007
    Messages : 4 782
    Points : 20 249
    Points
    20 249

    Par défaut

    Citation Envoyé par LittleWhite Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (rand < taux / 100.0)
    (si tauxest en pourcentage, car plus propre pour l'utilisateur.) Toutefois, vous pouvez utiliser taux un nombre entre 0 et 1 .
    Juste pour pinailler : si c'est un taux, c'est entre 0 et 1. Si c'est un pourcentage, c'est entre 0 et 100(mais c'est vraiment pour pinailler sur le vocabulaire - dans le fond, je suis d'accord à un taux de 1)
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  4. #4
    Rédacteur/Modérateur

    Homme Profil pro
    Network game programmer
    Inscrit en
    juin 2010
    Messages
    4 712
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : juin 2010
    Messages : 4 712
    Points : 19 440
    Points
    19 440

    Par défaut

    Je plussoie petit blanc, je l'ai toujours fait et vu faire ainsi.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert éminent sénior

    Profil pro
    Développeur informatique
    Inscrit en
    novembre 2006
    Messages
    6 385
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : novembre 2006
    Messages : 6 385
    Points : 12 710
    Points
    12 710

    Par défaut

    salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float NB = Random.value * 100;
    if (NB <= TAUX)
    Il y a une erreur il me semble : la comparaison s'effectue entre un entier et un nombre réel à virgule flottante.
    Donc par exemple si TAUX=25 et que NB = 25.00 ( problème d'arrondi )alors la comparaison sera soit à chaque fois fausse soit vraie selon la valeur de TAUX
    La solution c'est de comparer deux entiers entre eux
    Ne dites pas : "chercher la petite bête" mais plutôt "effectuer un travail d'entomologiste."
    Pour corriger des bugs c'est pareil

  6. #6
    Membre régulier Avatar de Tonton Nico
    Homme Profil pro
    Ingénieur
    Inscrit en
    septembre 2017
    Messages
    55
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : septembre 2017
    Messages : 55
    Points : 96
    Points
    96

    Par défaut

    Merci à tous pour vos réponses


    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Oui, c'est aussi simple que ça. Du moins, c'est comme ça que je le fais .
    Comme souvent les API de génération de nombres aléatoires fournissent des nombres entre 0 et 1, vous allez directement utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (rand < taux / 100.0)
    (si tauxest en pourcentage, car plus propre pour l'utilisateur.) Toutefois, vous pouvez utiliser taux un nombre entre 0 et 1 .

    Note : si vous implémentez une fonctionnalité de replay, ou que vous voulez jouer exactement la même partie, pensez à sauvegarder la graine utilisée pour la génération du nombre (et aussi, il faut toujours appeler le générateur de nombre un même nombre de fois (sinon ça décale les résultats).
    Bon ça me rassure alors si pour une fois c'est pas une fonction de folie et avoir fait spécialité math pour calculer un truc
    Ah oui pas bête pour la Seed pour retrouver les mêmes valeurs en effet, je tacherais de m'en souvenir pour ce genre de fonction merci



    Citation Envoyé par Mat.M Voir le message
    salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    float NB = Random.value * 100;
    if (NB <= TAUX)
    Il y a une erreur il me semble : la comparaison s'effectue entre un entier et un nombre réel à virgule flottante.
    Donc par exemple si TAUX=25 et que NB = 25.00 ( problème d'arrondi )alors la comparaison sera soit à chaque fois fausse soit vraie selon la valeur de TAUX
    La solution c'est de comparer deux entiers entre eux
    Bien vu, je ferais des tests pour regarder un peu comme cela réagi float vs int

    Déjà je suis parti sur le principe que mon TAUX est un entier X% ... mais ça peut être aussi un float en fait X,X% (ça dépend de comment on configure son jeu quoi).


    Mon fréro me parlait d'utiliser la fonction NextDouble ... qui existe en C# apparemment mais dans Unity ce n'est pas disponible grrrr
    Bon surtout en lisant la doc je vois
    La limite supérieure réelle du nombre aléatoire retourné par cette méthode est 0.99999999999999978.


    Je vais étudier tout ça de plus près mais avec vos conseils je devrais m'en sortir et choisir les bonnes fonctions ! tyvm all,
    Tonton Nico


    PS: J'adore les smileys comme vous avez pu le constater

    Edit: Je passe en résolu
    On me dit souvent que je ressemble à Einstein... mais plutôt à Frank que Albert

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 28/09/2007, 12h44
  2. Réponses: 2
    Dernier message: 05/02/2007, 11h19
  3. Réponses: 4
    Dernier message: 25/09/2006, 15h36
  4. [SWING] Mise a jour de l'interface dans les événements
    Par woods dans le forum EDT/SwingWorker
    Réponses: 3
    Dernier message: 23/11/2005, 16h46

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