JeuWeb - Crée ton jeu par navigateur
Intégration de l'aléatoire - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Gameplay, gamedesign (https://jeuweb.org/forumdisplay.php?fid=48)
+--- Sujet : Intégration de l'aléatoire (/showthread.php?tid=7822)

Pages : 1 2 3 4 5


Intégration de l'aléatoire - Ter Rowan - 26-06-2017

A la demande de Ter Rowan, j'isole cette partie sur l'aléatoire, pour pouvoir débattre de l'intérêt d'injecter des paramètres hasardeux dans un jeu. Xenos

Xenos a écrit :Tu peux aussi virer l'aléatoire, ce qui simplifie la compréhension du jeu, son code, et son équilibragge:

Code :
Patients(T) = Patients(T0) + K(niveau_hopital)*(T-T0)

où Patients(T0) et T0 sont stockés dans la BDD (nb de patients à la date T0 passée), niveau_hopital est également stocké dans la BDD, K(niveau_hopital) est une fonction à déterminer qui définit le nb de patients rajoutés par seconde en fonction du niveau de l'hôpital (ie: c'est la fonction qui est le coeur de l'équilibrage de ton gameplay) et Patients(T) est le nombre de patients à l'instant T de visite de la page. Cette valeur Patients(T) n'a même pas besoin d'être sauvée en BDD (elle n'a besoin de l'être que si un patient a été traité ou tout autre évènment de ce style entre T0 et T comme un changement de niveau de l'hôpital).

Note qu'en jouant bien sur la fonction K(), tu peux ne pas faire du linéaire. Il te suffit d'une fonction strictement croissante (si tu ne veux pas "perdre" de patients par moments). Par exemple (n = niveau de l'hopital):

Code :
K(n,T0,T) = n+sin²(T/3600)

Je ne sais pas trop ce que cela donnera, mais c'est possible. L'idée là est d'avoir des heures "creuses" (quand sin(T/3600) ~= 0) et des heures "pleines" (quand |sin(T/3600)| ~= 1)


évidemment d accord avec l'algo MAIS je pense qu'il faut intégrer du hasard

quand je vais a l hosto, je n'attends pas toujours 35,33 minutes
un peu de hasard c est excitant aussi

et puis rajouter des crises (crash d avion, tour en feu, blablabla cf urgences /grey anatomy /pinponpinpon ... pour les idées y compris les plus extravagantes)


Sorti de la discussion sur l'hôpital


RE: Spawn d'ennemis/villageois - Xenos - 27-06-2017

Mieux vaut commencer par simple à mon avis, car l'excitation et la complexité peuvent juste venir du nombre d'hôpitaux à gérer.

J'ai voulu faire comme tu dis, Ter Rowan, sur ECLERD v0: ajouter de l'aléatoire un peu partout et des crises, parce que c'est existants... Bon, ben c'est juste indébogable au final et totalement injouable...
En pratique, niveau expérience de jeu, ce n'est pas l'aléatoire qu'on recherche, c'est juste le fait d'avoir qqc à faire et à penser. Si le jeu est trop simple (pas "il manque d'aléatoire", juste "il manque de trucs, de challenges") alors oui, on s'emmerde. Mais l'aléatoire, c'est la béquille de gameplay du pauvre. Unreal tournament 2004 n'a quasiment pas d'aléatoire (juste sur quelques armes), et il est pourtant génial.

Quand ton gameplay devient suffisamment étoffé, avec suffisamment de paramètres, tu n'as plus besoin d'aléatoire: il semblera en émerger, mais en pratique, c'est juste que le nombre de paramètres pris en compte est suffisamment important pour qu'une approximation humaine sur l'un d'eux (ou l'oubli de l'un d'eux dans ton plan) suffise à créer un effet que tu n'attendais pas. Ca, pour moi, c'est un bon gameplay. L'aléatoire balancé partout pour tenter de rendre le jeu excitant, c'est juste du casino, et autant jouer alors au dés.

Dans le cas présent, cet "aléatoire" (et ces évènements) viennent simplement d'une fonction K bien choisit. L'exemple du K(n, T) = n*(1+0.3*sin²(T/3600)) amène ce genre de fluctuations (quand sin²(T/3600) est proche de 0, il y aura moins de monde que si sin²(T/3600) approche de 1). Ici, elle est encore assez régulière (et perso, je trouve cela top: cela pousse les joueurs à essayer de comprendre ce qui se passe dans le jeu pour se connecter aux heures d'affluence dans l'hôpital, heures qui peuvent changer d'ailleurs pour peu que la périodicité de la fonction ne se pas un multiple/diviseur de 24h). Et c'est infiniment plus simple à équilibrer, car tu manipules des fonctions prédictibles, au lieu de trucs aléatoires (dans lequel interviennent alors des effets type "ouais, l'autre joueur a de la chance et pas moi! c'est de la merde ce jeu".


RE: Intégration de l'aléatoire - Nonovitch - 27-06-2017

Je considère l'aléatoire comme une fonctionnalité sympa dans un jeu à condition que ce soit tout de même limité: que tous les mécanismes ne dépendent pas de ça, sinon les joueurs pourraient ressentir une forme "d'injustice".

Le montant d'argent qu'on peut recevoir après avoir réalisé une quête (borné entre 100 et 150 pièces par exemple), la probabilité qu'un personne soit infecté après une blessure...


RE: Intégration de l'aléatoire - Xenos - 27-06-2017

Perso, je préfère largement une quête type "100 pièces si vous réussissez, +10 pour un perfect, +20 si moins de X minutes, +10 pour avoir protégé un équipier, etc". Sans forcément lister tous les bonus au début de la quête (donc, façon "en fin de match, j'affiche le score et je donne des bonus"). Ca a un côté "exploit/succès" très sympa, cela récompense et encourage à la bonne réussit, cela empêche de s'énerver quand "le jeu n'est pas généreux" (ou quand il l'a été avec les autres), et dans un MMO web, cela évite qu'un mec ne refasse un compte (ou autre) pour tenter d'avoir plus de bol.

Avec assez de "bonus" possibles, cela peut donner un "effet aléatoire": on ne sait pas trop combien on va gagner en fin de quête (parce que tracker TOUT ce qu'on a fait pour savoir combien on touchera, c'est chaud!) sans pour autant faire intervenir la moindre touche de random que je trouve très compliquée à gérer (tant niveau code que niveau gameplay/game design). Smile


RE: Intégration de l'aléatoire - Ter Rowan - 27-06-2017

je n aurais pas mis l'aléatoire sur une somme récompense de quête mais pour moi l'aléatoire peut être utile à :

je me balade sur une route : qu'est-ce que je rencontre et dans quel état d'esprit 
je cherche des herbes dans une forêt :  qu'est ce que je trouve et en quelle quantité
je gère un hôtel / restaurant / hôpital : combien de "clients" je vais bien pouvoir trouver
je trouve un cadavre (voire j'ai transformé quelqu'un / chose en cadavre) qu'est ce que je trouve sur lui
un nouveau jour se lève, quelle est la météo ?
je joue en bourse (évidemment dépend du jeu, si la bourse ne contient que de vrais joueurs humains c est pas bon) , comment les cours évoluent-ils ?
je joue en bourse sur le marché des matières premières (avec que des vrais joueurs) quelle va être la production de cacao l'année prochaine ? 

pour moi l'aléatoire répond à trois enjeux :

1) tout n'est pas prédictible, même irl

2) cela réduit fortement la complexité des algorithmes de simulation  :
       vaut il mieux prévoir la météo sachant que même la vraie météo n'est pas encore fiable à 100% ou faire en sorte que si il pleut à 12h00 y a 95% de chance qu'il pleuve à 12h05 ?
       le prix du cacao va dépendre de la météo, des politiques étrangères des différents pays, de l'éruption du volcan toto dans la cordillère des Andes, de la politique répressive du président tutu et de la réaction des syndicats...

3) cela peut donner du piment au joueur : j'ai une chance sur 100 de trouver le monstre qui va m’exploser si je prends ce raccourci, qu'est ce que je fais ?

évidemment tout dépend du dosage et de l'intelligence qu'il y a derrière :
tuer un sanglier ne peut pas apporter dans 10% des cas 1 pièce d'or.... et de trop nombreux jeux le permette


PS :J'ai appris un truc aujourd'hui : on dit Cordillère des Andes et pas Cordilières des Andes, c'est fou !


RE: Intégration de l'aléatoire - Xenos - 27-06-2017

Note: j'en avais fait tout un article au sujet de l'aléatoire Smile

Pour moi:
1) Cela peut se faire avec un gameplay aux fonctions riches.

2) Faux à mon sens, car d'expérience (je radote, mais bon), c'est *ingérable* l'aléatoire, car il s'empile au fil des petits ajouts à droite à gauche. Eclerd (je me sens comme le papy de Cédric ^^) a explosé en vol à cause de cela (outre l'ergonomie pourrie): les formules ont 5-10% d'aléatoire un peu partout, et au final, cela devient purement et simplement du pif absolu. Sans compter que côté algo, je vous le dis: gérer de l'aléatoire, c'est chiant et complexe. Calculez la météo en ayant 4 pauvres formules à base de sinus/cosinus (genre ensoleillement, vent, température et pression), c'est simple. Gérer l'aléatoire, c'est bien plus chiant: quel risque d'avoir de la flotte pendant 3 semaines? Et si cela arrive, le jeu explose? Dans le cas d'ECLERD, le risque d'avoir un mauvais tirage était faible, mais si ta natalité est faible pendant trop longtemps, ta démographie est alors foutue. Voire, cela fait boule de neige: si ta natalité baisse par malchance, alors il y aura moins d'adultes à la génération suivante, donc moins de natalité à cette génération là! D'où dégénérescence possible.

3) Il suffit que le monstre apparaisse suivant un pannel de condition suffisante. L'une d'elles peut d'ailleurs ne pas être directement connue du joueur. Cela vire l'aléatoire et ses problèmes, sans risquer de planter le jeu. Les formules du jeu ne sont pas nécessairement linéaires et simples: l'aléatoire peut venir d'un simple rajout de "bruit" statique Smile L'autre avantage étant alors de pouvoir éventuellement "rejouer" un scénario si nécessaire (c'est prédictible du serveur, mais pas des joueurs)


Noter que les formules non-aléatoires peuvent être changées, si tu veux faire bouger un peu les choses ou rendre imprédictible (ie: l'imprédictible ne vient pas d'un aléatoire dans tes formules, qui te pète au nez dans le futur, mais de la "date" à laquelle tu vas ajouter la prochaine feature).


RE: Intégration de l'aléatoire - Thêta Tau Tau - 28-06-2017

Il y a des cas où l'aléatoire est au cœur du gameplay, notamment dans des jeux où une situation est générée aléatoirement, et où le joueur doit réfléchir à comment tirer au mieux parti de cette situation. Par exemple dans un jeu de carte, la "situation", c'est les cartes piochées, et le joueur doit réfléchir à comment les jour au mieux. Autre exemple les cartes du monde générées procéduralement (dans un jeu de stratégie, un roguelike etc.) permettent de renouveler l'expérience de jeu.

A noter aussi que l'aléatoire est beaucoup moins frustrant quand il est positif pour le joueur (bonus, loots etc.) et/ou quand le joueur peut y répondre (au lieu d'être mis devant le fait accomplis).

Par ex dans stellaris en exlorant on peut découvrir des "anomalies" aléatoirement en explorant. On peut alors les analyser, ce qui permet de gagner une récompense (ressource, amélioration etc.) mais peut aléatoirement échouer. Mais on vois le taux d'échec, si on le juge trop élevé on peut toujours attendre d'avoir un héro de plus haut niveau afin de réduire les chances d'échec (souvent jusqu'à 0%). De plus un échec, en général, veut dire qu'il ne se passe rien (on a juste perdu une occasion d'avoir un bonus).


RE: Intégration de l'aléatoire - Xenos - 28-06-2017

C'est vrai que je n'ai considéré ici que les cas d'aléatoire à destination d'un joueur, et même uniquement en cours de partie: les cas d'aléatoire à destination de tous au départ du jeu (cartes dans un paquet au départ, génération du monde initiale), cela peut être utile parfois, mais là encore, il faut savoir le gérer (que dire d'une partie, même peu probable, où toutes les cartes jouables sont à la fin du paquet? ou d'une carte dans laquelle un des joueurs démarre, "manque de bol", sur une île perdue sans ressource?).

Et je te rejoins totalement sur les bonus aléatoires plutôt que les malus (même si, dans ce cas, la question du bonus aléatoire pour les autres se pose: ces bonus peuvent être équivalent à un malus pour les autres, genre dans un duel, si l'un des deux a un bonus par coup de chance, l'autre aura sûrement l'impression d'un "malus").


RE: Intégration de l'aléatoire - Ter Rowan - 28-06-2017

(27-06-2017, 10:17 PM)Xenos a écrit : Note: j'en avais fait tout un article au sujet de l'aléatoire Smile
intéressant effectivement, j y ai appris les limites du rand d'ailleurs

(27-06-2017, 10:17 PM)Xenos a écrit : 1) Cela peut se faire avec un gameplay aux fonctions riches.
qui se transforme à un moment en un gameplay trop complexe ou en algo trop complexe ?

================================
encore une fois comment tu définis ce que tu trouves en foret ? chaque fois la même chose ?
le nombre de glands qu'on trouve par terre dépend en effet de :
- la condition du chercheur
- les compétences du chercheur
- la saison
- le temps
- la densité d'arbres sur zone
- l'état des ronces, lierres, etc...
- le nombre d'écureuil
- le nombre de glands non ramassés l'année précédente

le nombre d'écureuil lui est lié :
- au nombre de glands en réserve
- au nombre de femelles en état d'allaiter / de se reproduire
- à la pénétration de la maladie
- au nombre de promeneurs
- au nombre de promeneurs avec chien
- au nombre de chats / renards / etc... / en maraude

alors on peut faire un cosinus sinus qui dépend de deux trois facteurs mais après, si on veut donner autre chose que 3 glands tant que les facteurs ne bougent pas (soit irl 10.. 100 ... 1000 actions de jeu) on arrive vite à un jeu ultra complexe



Concernant la complexité de l'aléatoire, tout dépend de comment tu gères l'aléatoire, tout dépend de l'algo que tu mets derrière :
donc si toto fait des algo complexes avec l'aléatoire, ce n'est pas a cause de l aléatoire, c'est parce que toto fait des algo complexes


note, je reconnais que l aléatoire ne résout pas tout, qu'il est tout a fait possible d'arriver à des situations injouables
dans ce cas je considère qu'il faut rajouter un système de "sauvegarde"

on sait qu'il faut un des valeurs minimum pour un socle minimum (socle minimum = par exemple nombre d'adultes , pas nombre d'adultes + taux de x + taux de y + taux de z) pour arriver à jouer

dans ce cas, si une des variables du socle arrive au delà de la limite, soit on ramène la valeur à la limite (pas assez d'adultes, paf un groupe de migrants débarque dans ton village et propose d'intégrer ta population)  soit le jeu s'arrête (game over, tu as perdu)

l'idée n'est pas de corriger tous les facteurs mais de corriger uniquement le socle


RE: Intégration de l'aléatoire - Xenos - 28-06-2017

Citation :encore une fois comment tu définis ce que tu trouves en foret ? chaque fois la même chose ?
C'est ce qui s'appelle la modélisation. Perso, je trouve qu'on maîtrise bien mieux les choses (tant niveau créateur que joueur) quand on modélise simplement via une fonction déterministe plutôt que via du random, où le pif/la chance rentrent largement en jeu. Car au lieu de réfléchir en terme simples et ponctuels type: "combien de glands j'ai au total? combien en moyenne? quel max, quel min, quel écart type?" on doit réfléchir en terme d'intervalle: "quel nombre min de glands? max?"; et les risques arrivent quand deux aléatoires se télescopent. Par exemple en rajoutant les écureuils qui mangent les glands (ie: si on a un écureuil sur une case, alors il mangera un gland). Si on veut savoir comment le jeu va se comporter, on doit réfléchir en terme de min-max pour les glands, mais aussi pour les écureuils. Ce qui donne rapidement des plages de valeurs possibles très très larges, et c'est là où un jeu bascule dans le pif et l'aléatoire absolu, ce que je trouve franchement dommage (à moins que ce ne soit vraiment une composante volontaire du gameplay, genre un jeu de dé).

Je ne vois pas le lien avec les valeurs minimales? Dans les deux cas, aléatoire ou pas, tu peux rajouter ces seuils (dans le cas du non-aléatoire, cela fait un garde-fou si le joueur a mal géré en gros). L'absence d'aléatoire ne signifie pas forcément une partie monotone et linéaire. Si tu prends les échecs ou le jeu de Go, les mêmes coups donneront exactement les mêmes parties. Sauf que le joueur ne maîtrise pas les choix de son adversaire, et qu'un léger changement de décision sur un coup peut totalement changer la partie par la suite. C'est là où, pour moi, on trouve la richesse d'un gameplay.
Pour continuer sur l'exemple des échecs, tu peux filer une reine à un joueur s'il n'a plus de pièces (ou plus beaucoup), c'est pas un soucis. En revanche, dire qu'aléatoirement, on saute le tour d'un des joueurs, ou qu'une pièce (celle jouée ou une autre) change aléatoirement de case, je trouve que cela va casser l'intérêt du jeu. OK, ce sera amusant au début, pour la nouveauté de l'idée, mais par la suite, on s'en lasse. En tous cas, je trouve que je me lasse beaucoup plus facilement d'un jeu avec de l'aléatoire que d'un jeu sans, à gameplay équivalent (justement parce que le gameplay sans aléatoire *doit* être plus riche que le gameplay aléatoire pour sembler aussi "intéressant"). L'intérêt d'un gameplay aléatoire a finalement tendance à chuter rapidement avec le temps, au contraire d'un gameplay sans aléatoire (au sens "pendant la partie", l'aléatoire en début de jeu, pour initialiser le paquet de cartes ou la carte ou autre, c'est différent, et c'est d'ailleurs bien plus facilement maîtrisable que trouve [tant pour le créateur de jeu que pour les joueurs, puisque cette initialisation leur est commune], ce qui enlève l'un des gros problèmes de l'aléa).


Bref, je trouve que l'aléatoire, c'est une façon simpliste et un peu bidon de modéliser quelque chose, comme si le créateur avait eu la flemme de réfléchir un peu plus pour trouver/poser une logique sur un élément du gameplay (et cela ne pousse éventuellement pas les joueurs à essayer de deviner les formules du jeu, puisqu'elles sont de toute façon aléatoire).

PS: oui, comme d'hab, ce sera dur de me faire changer d'avis, mais voir émerger le concept de garde-fou ainsi proposé est sympa Smile Je tâcherai même d'y penser pour un prochain jeu, même si cela peut aussi créer d'autres soucis type multi-compte ou l'inconséquence de certains choix

PPS: l'autre élément de l'absence d'aléatoire que j'aime bien réside dans la possibilité de "rejouer" le passage de certains jeux. Prenons Dead Space (ou, finalement, n'importe quel jeu où on peut mourir contre un ennemi). On joue pour la première fois, et une bestiole surgit devant nous, nous barre la route, et nous descend. Si son apparition est aléatoire (et si son point d'apparition l'est aussi), alors perdre n'aura rien amené au joueur: il reprend du dernier checkpoint, et ne sais pas si une bestiole surgira ni où elle sera. En revanche, s'il n'y a pas d'aléatoire, la bestiole surgira toujours au même endroit et au même moment (notez que c'est également bien plus simple pour les créateurs, niveau animation et tout). Perdre aura alors amené une information: je sais qu'une bestiole va arriver là, et je sais laquelle ce sera (ainsi que ses points de vie).
Vous trouvez que c'est "chiant" parce que, du coup, on connaît l'avenir? Alors il "suffit" d'adapter la difficulté du jeu au joueur: il est mort, je ne fais pas apparaitre la bestiole (perso, je le ferais quand même, pour ne pas le dérouter, mais une prochaine bestiole n'apparaitra pas). Le faire avec de l'aléatoire (que la difficulté soit adaptative ou non), ce serait prendre alors le risque qu'un bon joueur ne croise presque aucune bestiole, alors qu'un joueur faible en croisera des tas.