Salut tout le monde, c’est serialk ! Ça faisait un moment que je n’avais pas posté d’articles ici, mais à cause de mes études je ne pourrais plus poster de news sur Minecraft, donc je vais dans mes prochains articles me concentrer sur l’aspect technique du jeu, et sur les possibilités qu’offrent la redstone.
Connaissez vous Prologin ? C’est un concours d’informatique francophone destiné aux européens de moins de 20 ans. Si vous êtes un peu intéressés par l’informatique et la programmation, vous pouvez participer au concours en répondant au questionnaire de sélection dans le langage de programmation votre choix.
En tant que secrétaire de cette association mais aussi Minecraftien averti, je n’ai pas pu m’empêcher de réaliser la première question de programmation ce QCM en… redstone dans Minecraft (oui, je suis fou). Tâche ardue s’il en est ! Le but de l’exercice est en effet de dire si un candidat a l’âge requis pour participer au concours, c’est à dire est né après le premier mai 1991.
Le travail que j’ai réalisé consiste à comparer deux nombres, pour dire si l’un est plus grand que l’autre. Pour stocker un nombre en redstone, j’ai choisi de le mettre sous forme de bits (1 = allumé, 0 = éteint), et l’entrée est constituée de leviers. Au final, pour comparer les mois nous avons besoin d’un comparateur 4 bits et pour les années d’un comparateur 8 bits (on enlève l’année minimum à l’année à tester pour simplifier la taille du nombre).
Le problème qui se pose est donc le suivant : à partir de deux nombres binaires, comment faire pour déterminer lequel est le plus grand ?
Après quelques recherches sur l’Internet, je suis tombé sur cet article qui explique comment faire un comparateur de magnitudes de 1bit, puis comment les chaîner. Si vous ne connaissez pas la signification de ces symboles, je vous conseille d’aller faire un tour sur cette page Wikipedia qui donne les noms des portes logiques en fonction de leurs symboles.
Je vous rappelle la page de référence des portes logiques correspondantes en Redstone : http://www.minecraftwiki.net/wiki/Redstone_Circuits
Et en particulier cette image :
Mais ceci n’était pas suffisant. En effet, bien que le principe de chaînage soit détaillé dans cet article, le composant chaînable, c’est à dire le comparateur 4 bits, n’avait pas de schéma explicite. Je suis donc tombé sur ce PDF qui explique le véritable schéma fonctionnel de notre unité de comparaison, le comparateur 4 bits :
Il marche de manière assez simple : ses deux entrées sont les deux nombres de 4bits A et B à comparer. Les entrées du milieu (A=B, A<B et A>B) servent à le chaîner, si vous ne voulez vous en servir que pour comparer 4 bits avec 4 bits, vous devez le régler en envoyant seulement 1 à l’entrée « A=B » et 0 aux deux autres (tout ce que je raconte est détaillé dans le PDF, si vous savez un peu lire en anglais).
Le construire va donc nous permettre de faire la comparaison 4 bits par 4 bits.
Mais comment faire dans Minecraft ? Le jeu pose beaucoup de problèmes techniques (taille, croisement des fils, etc). Pour commencer j’ai décidé de faire tout d’abord les 12 portes AND côtes à côtes : c’est en effet la partie la plus dense du circuit, ceci fait, tout devrait être plus simple. Puis, un long travail de liaisons s’ensuit. Vous devez relier exactement tous les fils dans le bon sens à toutes les portes, et tester à chaque fois que vous placiez bien le bon nombre de répéteurs.
Au bout d’environ une journée et une nuit de travail (d’analyse, de réflexion et de construction), j’en arrive à ce résultat, mon comparateur 4 bits est fini :
Il fait donc exactement ce que je veux, c’est à dire qu’en entrant avec des torches les nombres A et B et en initialisant A=B à 1 comme je vous l’avais dit, j’obtiens un résultat correct (enfin, juste après la correction d’un petit bug
) :
J’ai maintenant un comparateur 4 bits fonctionnel. Mais la fonction de chaînage qui se trouve dans le schéma va me permettre d’aller encore plus loin : je peux en effet relier deux comparateurs 4 bits pour en faire un de 8 bits, en reliant la sortie du premier à ces fameuses entrées qui ne nous servaient pas, à savoir A>B, A<B et A=B, comme expliqué sur cette image :
Je vais donc honteusement abuser de World Edit pour copier mon comparateur 4 bits à deux endroits qui se suivent, et ensuite relier les circuits appropriés, pour arriver à ce résultat assez impressionnant, il faut l’avouer :
Ceci fait, il ne me reste plus qu’à créer une petite maison dans laquelle seront disposés les leviers afin de comparer les mois et les années et afficher le résultat en toute simplicité (je ne vais pas vous faire le détail des portes logiques à utiliser, c’est le but de l’exercice).
Le résultat final :
Attention, le circuit est tellement grand que parfois il arrive que la redstone ne s’update pas sur les longues distances si personne ne se trouve là bas. Pour remédier à cela il existe un plugin pour serveurs bukkit : ForeverALoad.
Avis aux futurs candidats au concours Prologin : bien évidemment, faire ce circuit a été pour moi un grand défi mais ce n’est absolument pas ce qui est demandé pour participer au concours ! Vous devez connaître au moins un langage de programmation dans lequel vous pourrez faire l’exercice (beaucoup plus facilement que ce que je viens de faire).
Si le défi vous tente, vous pouvez essayer de faire des puces comme ceci assez compliquées mais faisables, ça peut devenir assez vite très amusant ! Bonne chance !
Si le sujet vous intéresse vraiment, je vous conseille vivement la lecture du livre The Elements of Computing Systems dont voici la préface.
Vous pouvez tester la map temporairement sur le serveur suivant : serialk.fr:42420 (Vous spawnerez dans la cabine où vous pourrez tester les différents leviers et voir le résultat s’afficher).
À bientôt !
Crafté à 02:12 par Serialk (7 866 vues)







Commentaires
Pinoin dit : 2 décembre 2011 à 2 h 50 min Très bon article continue.
spartax dit : 2 décembre 2011 à 3 h 58 min HOLY SH*T
Forfal dit : 2 décembre 2011 à 4 h 47 min Ouais je comprend pas grand chose, sinon sur le server tempo, il y a un nether avec un enderdragon 8D
Ephys dit : 2 décembre 2011 à 7 h 41 min Beau travail! Maintenant répond a la question 4 =) (moi je bloque dessus depuis 3 semaines -mais j'ai pas le temps de travailler dessus ^^-)
Electra1 dit : 2 décembre 2011 à 8 h 05 min Bien que je ne sois pas féru en redstone et que le sujet dépasse de loin mes capacités dans ce domaine, je tenais à témoigner mon admiration pour la remarquable qualité de ton article! :)
Drussa dit : 2 décembre 2011 à 11 h 38 min Vraiment génial! j'ais étudié les fonctions logiques en cours mais je n'aurais jamais pensé qu'on pourais les appliquer dans minecraft aver de la redstone! Franchement dis, chapeau! c'est un travail à faire rougir Notch ^^
mogoto0210 dit : 2 décembre 2011 à 15 h 42 min J'ai rien compris, mais ça à l'air génial ! :D
Ushiua dit : 2 décembre 2011 à 17 h 27 min Je l'ai fait en une demi journée en 4 bit. Tu galères vraiment pour rien, c'est super facile...
numidark dit : 2 décembre 2011 à 18 h 27 min Bravo pour l'article et le comparateur ;)
TheoWal dit : 2 décembre 2011 à 21 h 21 min Je veux pas faire de la pub, mais j'ai fait vachement plus compact (et avec de la chance, plus rapide, mais j'ai pas vérifié) : http://www.youtube.com/watch?v=hezluDz_Aj0
leo_kill dit : 3 juillet 2012 à 15 h 10 min salut , j'ai 13ans , et je comprends pas rand chose au langage de programmation ^^ cependant , j'ai moi-mêmee cherché et trouvé un système de comparaison de nombre qui est beaucoup plus compact ( mais vraiment beaucoup plus ) il consiste tout simplement à fermer le courant des entrées des chiffres plus petits que lui ; cependant nescessite un décodeur binaire ; ainsi , imaginons que nous avons trois chiffres en décimal ( je prend petit pour aller vite ; le numéro 3 bloquera le 2 , le 1 , et le 0 ; le numéro 2 bloquera le 1 et le 0 , et le numéro 1 bloquera le 0 ; je pense qu'il sera beaucoup plus rapide , car il ne passe dans aucune portes logiques !
SOOJ'craft dit : 20 août 2012 à 1 h 01 min Je viens d'en faire un de moi même en 25 minutes. Le cablage est simple, relativement petit (h=8 l=20 L=40) et valable pour autant de bits que voulu ; il n'est en effet pas nécessaire de faire exactement comme sur le schéma car seules quelques portes XOR et NOT suffisent pour y arriver. Si vous voulez un lien ou plus d'explications, faites le moi savoir en répondant à ce message ;) Merci ! :)