Étant donné 5 fils (éventuellement plus), je veux appuyer sur un bouton de réinitialisation, et avoir exactement un de ces fils, choisis au hasard, deviennent actifs - et le restent (jusqu'à la prochaine pression sur le bouton). Quel est le moyen le plus simple de faire cela ?
Réponses
Trop de publicités?Cette question/réponse est en fait liée à une autre question Ma réponse était suffisamment complexe (et comportait tellement de diagrammes) que j'ai décidé qu'elle méritait un article séparé.
Il existe de nombreux générateurs de nombres aléatoires, dont certains sont très ingénieux (l'un d'entre eux utilise un registre à décalage à rétroaction linéaire de 13 bits - ouah). Mais je voulais quelque chose de simple, extensible et facile à comprendre. Il en existe probablement de meilleurs :) Mais je pense que celui-ci fonctionne suffisamment bien pour être utilisé comme partie du circuit dans l'autre Question.
Il s'agit essentiellement d'une horloge à 5 temps (utilisant les nouveaux répéteurs - je les adore), connectée à des flip-flops de mémoire, avec un bouton de réinitialisation.
Schéma de circuit de niveau supérieur
Schéma du circuit à 5 horloges
Les flèches sont des répétiteurs, réglés sur un retard de 0,3 ou 0,2 seconde (ou aucun si vide). Le 0,2 est destiné à compenser la longueur du fil qui le précède, ce qui ajoute un certain délai. La durée totale du cycle de l'horloge est d'environ 1,5 seconde.
Schéma du circuit 333
Comment l'utiliser
-
Effacer l'horloge 5 (les répétiteurs sont gelés), au redémarrage du serveur/réchargement du jeu. Cela peut généralement être fait en laissant tomber/enlevant une torche près du circuit, et/ou en enlevant et replaçant une section de fil. Lorsque tous les répétiteurs sont non alimenté le circuit est clair.
-
Injection d'une impulsion dans l'horloge 5. Appuyez sur le bouton de l'injecteur d'impulsion automatique, et il démarrera l'horloge.
-
Appuyez sur le bouton Reset - exactement un des cinq fils, va maintenant devenir actif. Si certains fils étaient précédemment actifs, ils s'éteignent.
L'horloge fait défiler 5 torches en 1,5 seconde environ, et lorsque vous appuyez sur le bouton Reset, le fil qui se trouve à côté d'une torche active est verrouillé dans un état actif.
A ce stade, quelqu'un est sans doute en train de se plaindre, "vous appelez ça au hasard " ??? :) Mais si, je le sais - à moins que vous ne marchiez vers le bouton à des intervalles de temps déterminés, c'est très aléatoire. Certaines personnes ont conçu des RNG qui utilisent des mobs qui se promènent - je me sers du joueur :)
Cependant, si vous voulez ajouter plus pour lui donner un caractère aléatoire, utilisez le circuit T.B.D. - en gros, cela signifie que vous allez vers le bouton, regardez le chiffre des secondes sur votre montre-bracelet, et quand il atteint zéro, appuyez sur le bouton. Vous obtiendrez ainsi une fourchette de 1 à 10 secondes, avec une moyenne de 5, pendant laquelle l'horloge effectuera un cycle, ce qui donnera lieu à un cycle de 1 à 10 secondes. imprévisible fil activé.
Je réalise qu'il y a d'autres façons d'obtenir un événement aléatoire. En fait, j'avais initialement créé un pulsar rapide qui s'éteignait, puis se rallumait en 5 à 15 secondes. Je travaillais à ce que l'événement de rallumage déclenche une bascule JK, envoyant une impulsion à l'horloge. Mais c'était a) plus délicat que je ne le pensais, et je voulais avoir une réponse postée :) et b) quelque peu redondant. Tout ce que j'essayais de faire était d'attendre un intervalle aléatoire avant de choisir une torche d'horloge - et c'est assez facile pour le joueur de juste regarder sa montre pour un intervalle aléatoire. :)
Parfois, la meilleure solution, n'a pas nécessitent beaucoup de machinerie complexe. :)
De plus, cette conception est destinée à une application spécifique - dans la question originale, la personne souhaitait une bouton de réinitialisation qui a changé le fil, ce qui signifie qu'ils choisissaient activement quand obtenir un numéro aléatoire. Si votre application implique des lumières de disco clignotant au hasard, alors non, cela ne fonctionnerait pas pour cela. Mais il existe déjà de nombreuses solutions pour faire clignoter des lumières de façon aléatoire.
Le circuit 333 est assez banal, je ne revendique aucune originalité - la seule raison pour laquelle je lui ai donné un nom, c'est que je devais lui donner un nom. un peu de dans le diagramme pour plus de clarté :)
Mise à jour : Bien qu'à l'origine je n'utilisais qu'un Injecteur d'Impulsion activé manuellement, cela nécessitait que le joueur actionne l'interrupteur rapidement. Juste pour le plaisir, j'ai décidé d'ajouter un Injecteur d'impulsion automatique pour simplifier l'activation de l'horloge. (Le design de cet injecteur provient du Wiki ).
Avec la mise à jour 1.5 avec les trémies et les comparateurs, vous pouvez faire en sorte qu'un distributeur soit orienté vers le haut dans une trémie orientée vers le bas et qu'un comparateur soit placé sur la trémie (sur le côté de celle-ci), puis placer un objet qui peut s'empiler et un objet qui ne peut pas s'empiler dans le distributeur, puis alimenter le distributeur, un objet aléatoire ira dans la trémie. S'il s'agit d'un objet non empilable, il émettra un signal de force 2 ; s'il s'agit d'un objet empilable, il émettra un signal de force 1.