Logo Makeyourgame
Accueil Les formations Créer un jeu Les ateliers Les tutoriels Blog
Logo Makeyourgame
Les formations Les financements Les exercices La certification Unity
Logo Makeyourgame
Mes objectifs Les jeux Les ressources Le glossaire
Logo Makeyourgame
Les tutos Les tutos Youtube

Gérer la notion d'aléatoire : Langage C#

pictureProfil_KeyKhaarIlyr
Ecrit par KeyKhaarIlyr
Catégorie Langage C#
Mis à jour le 19/02/2021
Gérer la notion d'aléatoire

La notion d'aléatoire est présente partout, surtout dans les jeux. Voyons comment utiliser ce principe en programmation procédurale !

14 min Débutant

Gérer l'aléatoire, c'est tout un art !

Bienvenue à tou-te-s, ici Key !

Aujourd'hui, je vais vous montrer comment gérer de façon simple la notion d'aléatoire en C#.

L'environnement de travail

Pour ma part, je travaille avec Windows et je me sers de VS 2019 (abbrégé de Visual Studio 2019, cela dit, attention ce n’est pas Visual Studio Code !), mais vous pouvez vous servir de Visual Studio Code ou d’un compilateur en ligne.

Je vous encourage à lire le tutoriel C# pas pour vous faire une idée d’un environnement de travail adapté pour débuter en C#.

Le petit exercice que je vais vous présenter aura simplement besoin d’un terminal pour afficher les résultats de nos opérations.

Qu’est-ce que l’aléatoire ?

Adjectif

Définition : soumis au hasard, dont le résultat est incertain.

En programmation l’aléatoire au sens stricte du terme n’existe pas vraiment. Il s’agit plus d’algorithmes complexes qui permettent de distribuer une valeur relativement incertaine. Dépendamment du degré d’aléatoire dont votre projet aura besoin, vous n’utiliserez pas les mêmes outils.

Mais dans le cadre de notre exercice, cette méthode fera largement l’affaire !

Étape 1 : Scénario de base !

L’idée serait de coder dans un premier temps un personnage qui aurait des points de vie et qui prendrait des dégâts. Pour le moment, la source des dégâts est décidée par nous, mais petit à petit, nous laisserons ça au hasard !

Voici mon projet, je n’ai rien écrit dedans pour le moment, mais c’est ici que tout commence !

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape11-600cb88348da3.png

Pour commencer, je vais installer les premières variables dont nous aurons besoin. J’ai pris la liberté d’appeler notre personnage “chevalier”, mais vous êtes libre de l’appeler comme vous le voulez.

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape12-600cb8eb76a7c.png

Nous avons ici la déclaration de deux variable, “pvMax_chevalier” et “pv_chevalier” qui vont nous servir à compter les dégâts pris par notre personnage. On s’assure ensuite que tout est bon en affichant en console les informations de notre personnage.

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape13-600cb9d6b1090.png

*Remarque : Dans la chaîne de caractère que j’affiche avec ma méthode “Console.WriteLine”, j’utilise un “\n” dans mon message pour revenir à ligne. J’utilise également un “+” pour concaténer mes variables avec ma chaîne de caractère. Vous pouvez en faire de même, mais pensez bien à refermer les guillemets de chaque chaîne de caractères.

Maintenant, il faudrait créer une méthode pour lui retirer un peu de vie !

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape14-600cba6c2c72b.png

La méthode créée “attaquerPersonnage()”, va nous permettre de déduire des points de vie à notre personnage, et surtout d’automatiser la vision sur les dégâts reçus et les points de vie actuels de notre protagoniste.

*Remarque : ma méthode est soulignée en vert sur l’exemple, mon IDE me dit que j’ai créé une méthode non utilisée pour le moment, mais cela va bientôt changer !

Pour nous assurer du bon fonctionnement de notre méthode, il faut l’appeler et lui donner quelques dégâts à appliquer !

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape15-600cbab20a976.png

Je passe à méthode directement une valeur de type “integer”, et je lui donne également les variables associées à notre chevalier. Compilons ça pour voir le résultat !

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape16-600cbb6029c5d.png

Tout fonctionne, maintenant, passons à l’étape 2 !

Étape 2 : Scénario avec un dé de 6 !

Jusque là, on ne parlait pas d’aléatoire pour le moment, mais maintenant que nos pièces sont placées, nous pouvons commencer à générer un élément aléatoire.

Nous allons faire varier les dégâts infligés de façon aléatoire avec un dé de 6. Concrètement, cela veut dire que notre personnage va recevoir un nombre de dégâts compris entre 1 (inclus) et 6 (inclus).

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape21-600cbba3f288a.png

Nous allons commenter la ligne 24 et lancer l’étape 2.

Rencontrons notre nouvel outil, la classe “Random()”.

Cette dernière nous offre une méthode “Next()” permettant de retourner un nombre aléatoire entier positif (donc une valeur de type “int” supérieure à zéro dans les limites de ce qu’un type “int” peut stocker).

Les classes et les objets étant des notions plus complexe, je vous conseille pour le moment de simplement recopier la ligne 27, mais pour faire court, notre variable “hasard” est de type “Random”, un type qui nous permettra d’avoir accès à la fameuse méthode “Next()”.

Et c’est en ligne 29 que nous allons exploiter la force de la méthode “Next()” ! Nous déclarons ici une variable appelée “de6” qui va nous retourner un chiffre compris entre 1 (inclus) et 7 (exclu). Donc la méthode retournera une valeur supérieure ou égale à 1 et strictement inférieure à 7.

Pour finir, on affiche le résultat en compilant le tout. Amusez-vous à le compiler plusieurs fois pour voir les variations des dégâts reçus !

1er essai

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape22-600cbbf93f74d.png

2e essai

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape23-600cbc2d1fc62.png

3e essai

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape24-600cbc724b546.png

Nous pourrions même aller plus loin en ajoutant une notion de coups critiques !

Étape 3 : Scénario avec coup critique !

Tout comme l’étape précédente, commentons la deuxième méthode “attaquerPersonnage()”.

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape31-600cbc9ed4423.png

La ligne 30 étant commentée, nous pouvons procéder à la suite. Créons une nouvelle méthode qui nous permettra de gérer les chances de coups critiques.

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape32-600cbcd7f271c.png

Nous allons donc créer une méthode “generateurDeCoupCritique()” qui va traiter les opérations nécessaires pour obtenir nos dégâts critiques basée sur la chance.

*Remarque : En paramètre de notre méthode, nous avons une variable de type Random, ne vous inquiétez pas à ce sujet, c’est pour récupérer notre variable “hasard” créée en étape 2.

A l’intérieur de cette méthode, nous allons créer une variable “chanceMax” déterminant le plafond maximum de chances possibles. De fait, nous allons procéder avec une valeur de 100, mais vous pourriez compter avec 200, 1000 ou encore 10.

Pour obtenir le pourcentage de réussite d’un coup critique, nous allons multiplier la variable “chanceCrit” avec la variable “chanceMax”. Nous allons employer la méthode “Convert.ToInt32()” pour s’assurer que le résultat soit bien du même type que la variable “pourcentageCrit” qui conservera le résultat.

Ensuite, il nous suffit de générer un nombre entier positif aléatoire compris entre 0 et le plafond maximum stocké dans “chanceMax” + 1 (parce que la valeur la plus haute étant exclue au calcul du nombre aléatoire, il nous faut lui ajouter +1 pour avoir toutes les valeurs comprises. Nous appelons donc notre méthode “Next()” à l’aide de la variable “hasard” afin de nous retourner un nombre supérieur ou égal à 0 et strictement inférieur à “ChanceMax” + 1.

*Remarque : Contrairement à l’étape 2, nous donnons à la méthode “Next()” qu’un seul paramètre, le résultat de l’opération “chanceMax + 1”. Le comportement de cette méthode dépend du/des paramètre-s proposé-s. Dans le cas où il n’y a qu’un seul paramètre, le nombre généré est compris entre 0 (inclus) et le paramètre donné (exclu). Pour notre dé, nous ne voulions pas avoir la possibilité d’avoir un résultat égal à 0, mais pour le cas des chances critiques, nous voulons une valeur qui peut être égale à 0.

Maintenant que nous avons notre pourcentage (variable “pourcentageCrit”) et le tirage aléatoire (variable “tirage”), il ne reste plus qu’à les comparer, appliquer une modification aux dégâts (variable “degats”) et retourner la valeur finale de “degats”.

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape33-600cbd452aaf5.png

Avant d’entamer une condition, nous allons déclarer (ligne 40), une variable de type “string” pour y stocker un message qui sera différent si le coup critique est réussi ou non. Pour le moment la variable est vide, mais c’est lors de la condition que nous lui associerons une valeur.

Si “tirage” est inférieur ou égal à “pourcentage”, alors on applique des dégâts supplémentaires ! D’abord on annonce qu’une réussite critique arrive, on contrôle les dégâts de base avant les dégâts supplémentaires, puis on applique le multiplicateur (dans notre cas, par 2), et on annonce les dégâts après multiplication pour s’assurer que tout c’est bien passé.

Sinon, le message annoncera que rien de particulier ne s’est passé.

Il nous faudra vérifier si ça fonctionne ou non, et pour ce faire, créer une variable qui accueillera le résultat de cette méthode, résultat que nous injecterons dans la méthode “attaquerPersonnage()” que nous allons rappeler.

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape34-600cbdbd39588.png

Et le tour est joué, compilons et admirons le résultat !

1er essai

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape35-600cbe104311d.png

2e essai

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape36-600cbe4444799.png

3e essai

https://makeyourgame.fun/upload/users/KeyKhaarIlyr/etape37-600cbe7b18ce9.png

Conclusion

La notion d’aléatoire est puissante. Ici nous l’avons traitée de façon basique, mais ce qu’il faut retenir, c’est la notion de ratio et de pourcentage. Un ratio (comme dans beaucoup de jeux vidéos), permet de calculer un pourcentage de quelque chose. Par exemple, 0.5 multiplié par n’importe quelle valeur donnera toujours 50% de cette valeur.

Nous aurions pu aussi mélanger un paquet de 52 cartes pour jouer au Poker, mais nous garderons peut-être cet exercice plus pour un tutoriel en programmation orientée objet.

J’espère que ce tutoriel vous a plu, et je vous dit à très bientôt !

Vues: 2324

Licence:



Validation du Tutoriel

Veuillez vous connecter ou créer un compte pour pouvoir valider ce tutoriel et ainsi gagner de l'expérience (XP) !

Vous aimerez aussi...

Blog et Tutoriels

C# - Paramètres par défaut d'une méthode

C# - Paramètres par défaut d'une méthode

par alto

Depuis la version 4 du langage C#, il est possible de préciser des paramètres par défaut d'une méthode. Cela ouvre des possibilités de développement intéressantes pour toutes les méthodes de nos classes C#.

applause logo0
C# conception objet : le couplage

C# conception objet : le couplage

par Twinkel

Un des principes de qualité de code est le Couplage. Ici nous allons essayé de comprendre ce que c'est, pourquoi il faut l'éviter et un aperçu de bonne pratique de conception de code.

applause logo0