Note: Ceci représente mon retour d’expérience et mon opinion sur l’aléatoire et les jeux, vous pouvez très bien ne pas être d’accord, de plus, je ne me concentre pas spécialement sur C2 ou CC, néanmoins, certains faits exposés ici sont des conseils valables en tout point, je trouve donc que ça a sa place sur le site.

Utiliser de l’aléatoire… Pourquoi?

L’aléatoire permet de varier l’expérience de jeu, il est présent dans la majorité des jeux existant (que ce soit pour gérer les objets que les ennemis laisseront après leur mort). Si il n’est pas présent, le jeu est complètement linéaire, si il est utilisé mal, ou à outrance, alors le jeu perd certains intérêts (beaucoup de joueurs aiment se mesurer les uns aux autres dans des speedruns par exemple, or, si on prend un jeu comme « The Binding of Isaac », le facteur chance, dût à l’aléatoire, devient bien supérieur à l’importance du savoir faire du joueur (le « skill »), ainsi, une partie ou l’objet nommé « Epic Fetus » est trouvé en premier sera une partie rapide, sachant que cet objet garantit à lui seul la victoire).

Il faut donc savoir utiliser l’aléatoire selon ses besoins, sans pour autant en perdre le contrôle, c’est ainsi que naît la notion de « patterns » (les règles auquel l’aléatoire devra se plier, afin de garantir une expérience de jeu optimale). Un pattern simple, pour un objet laissé après que un bloc soit brisé sera par exemple dans construct 2:

Une fonction génére une valeur aléatoire, comprise entre 0 et 100, lorsque elle est appelée, on compare la valeur, et on applique différents résultats en conséquence.

Ceci peut être appliqué pour des résultats bien plus grands, par exemple, générer un terrain choisi aléatoirement, ou bien changer de niveau au hasard. Nous allons voir en surface le cas de la génération de niveau, qui est un cas très particulier.

Générer un niveau aléatoirement, les bases

La première chose qu’il faut savoir, avant de se lancer dans un projet d’une telle envergure, est de bien comprendre « Comment peut-on contrôler une génération aléatoire », la réponse est: en s’appliquant, et en essayant plusieurs fois, mais tout d’abord, pour générer un niveau aléatoirement, il faut pouvoir le voir d’une manière simplifiée, je m’explique.

Un niveau, dans un environnement 2D (cela peut aussi être appliqué dans un environnement 3D) est généralement délimité par des unités de distances, qui sont de l’ordre du multiple du pixels (16×16 et 32×32 sont des exemples courants), on va considérer le niveau comme étant une grille, un tableau, chaque valeur représentera ce qu’il y aura dans une case de la grille, au final, notre niveau peut être représenté par des nombres/lettres/mots placé dans un tableau, le tout étant de pouvoir ensuite convertir ce tableau en un niveau réel derrière (étant donnés les besoins variés qu’il peut y avoir, je ne donnerais d’astuce unique).

Maintenant, imaginons que notre niveau n’est pas un tableau, mais plusieurs, il est maintenant possible de traiter chaque partie séparément, Et si nous pouvons charger chaque partie du niveau séparément, au moyens de différents tableaux, reste la partie aléatoire, je pense que cela est maintenant clair pour certains, mais j’explique ou je veux en venir:

Nous savons générer chaque partie du niveau séparément, à partir d’un tableau, il y a une action qui va créer chaque partie, rien ne nous empêche de faire choisir au système, aléatoirement, quel tableau de valeurs charger parmi plusieurs disponibles. vous faites un tirage au sort d’un tableau de valeur, et vous le chargez. c’est aussi simple que ça. Néanmoins, il est possible d’aller plus loin, en faisant apparaître/disparaître des objets ou ennemis, voir morceau de décors, ou en modifiant les objets/ennemis déjà présents, les possibilités sont nombreuses, mais dépendent du style de jeu que vous faites.

Maintenant, aussi facile des tableaux puissent être à manipuler, vous pouvez tenter (réussir même) de créer des outils vous permettant de vous simplifier la tâche, et d’éviter d’éventuelles erreurs. Voici un exemple d’outil qui permettait de visualiser un pattern, de l’éditer, et d’obtenir un code pour l’utiliser sous Construct 2, pour un projet particulier (il est là à titre d’exemple, et risque fort de ne pas correspondre à vos besoins):

https://dl.dropboxusercontent.com/u/10035971/Nouveau%20dossier/exporty/index.html (au cas où le lien refuse de s’afficher)

Sur ce, je vous souhaite une bonne journée, et bonnes vacances o/