Table des matières:
Vidéo: Jeu de chronométrage VS compétitif à 2 joueurs : 4 étapes
2024 Auteur: John Day | [email protected]. Dernière modifié: 2024-01-30 09:09
Tu auras besoin de:
1. Digilent Basys 3, carte FPGA (ou tout autre FPGA,)
2. Une version relativement à jour de Vivado, ou un autre environnement VHDL
3. Un ordinateur pouvant exécuter le programme mentionné.
Étape 1: le jeu lui-même
Comment le FSM interagit avec les modules.
Comment jouer
Pour commencer, vous appuyez sur le bouton du milieu. Cela entraînera l'affichage de "99", représentant la santé du joueur deux, sur l'affichage à sept segments. Ensuite, les LED s'allumeront séquentiellement de droite à gauche. Cela forme une barre d'alimentation. Une fois la barre d'alimentation pleine, elle se réinitialise. Le but du joueur 1 est de retourner son interrupteur lorsque la barre est la plus haute possible. Plus il y a de LED allumées, plus le joueur un inflige de dégâts au joueur deux. Une fois que le premier joueur a basculé son interrupteur, les dégâts infligés sont déduits de la santé du deuxième joueur. Ensuite, il passe au tour du joueur 2. Maintenant, le nombre affiché représente la santé du joueur et la barre d'alimentation se remplit de gauche à droite. Une fois que le deuxième joueur a fait son mouvement, les dégâts sont déduits et c'est à nouveau le tour du premier joueur. Cela se répète jusqu'à ce qu'un joueur atteigne 0 santé. La vidéo de ce fonctionnement est jointe.
Étape 2: FSM
Ce jeu est essentiellement une grande machine à états finis, dans laquelle se déroule une logique complexe basée sur l'état dans lequel se trouve le FSM.
État 1: MenuLe premier état est l'écran de menu, qui est l'un des états les plus simples. Il comprend l'affichage à sept segments affichant le mot « JOUER » et le bouton qui fait démarrer le jeu. Le bouton, BTN, nous conduit à l'état suivant, qui est le tour du joueur.
État 2: au tour du joueur 1
Le tour du joueur un active un signal qui fait que l'affichage à sept segments affiche la santé du joueur deux. Un autre signal s'allume pour activer un registre à décalage importé d'un autre module que nous avons créé (Pone.vhd). Ce registre à décalage fait s'allumer les LED comme le ferait une jauge de puissance croissante dans d'autres jeux, et il serait ensuite remis à 0 lorsqu'il atteindrait le nombre maximum de LED qui pourraient être allumées. Il se met à jour sur le front montant de l'horloge obtenu à partir de barclock.vhd, qui est modifié à partir d'un fichier de laboratoire emprunté. Nous avons fait commencer la barre du joueur à partir de la droite et se remplir à gauche, car le commutateur du joueur est également à gauche (pour une expérience utilisateur intuitive). Une fois que l'interrupteur est basculé, l'état passe au joueur un déduire, et la quantité de LED actives est enregistrée dans un signal.
État 3: joueur un déduit Le signal avec la quantité de LED actives détermine la quantité de santé qui est déduite. Ceci est fait en ayant un autre registre à décalage (deductor1.vhd) qui plutôt que d'incrémenter les LED, les décrémente. Cela décrémente sur le front montant de l'un des modules d'horloge div que nous avons empruntés et modifiés (downcounterclock.vhd). Dès qu'une LED est éteinte, un point de santé est déduit de la santé totale du joueur deux. Si au cours de ce processus, le joueur 2 atteint 0 points de vie, nous nous arrêtons et passons immédiatement à l'état « Game over ». Sinon, une fois que le vecteur LED atteint "0000000000000000", nous passons au tour du joueur 2.
État 4: le tour du joueur 2 Le tour du joueur 2 est exactement comme le tour du joueur 1, sauf que le registre à décalage (Ptwo.bhd) va de gauche à droite et que l'interrupteur se trouve sur le côté droit du plateau. Un signal s'active pour afficher la santé du joueur 1. Une fois que le commutateur 2 est actif, cela passe au tour de déduction du joueur deux.
Étape 5: Déduction du joueur 2 Tout comme le tour du joueur 2, la déduction du joueur 2 agit un peu comme la déduction du joueur un. La principale différence est que le registre à décalage qui contrôle l'extinction de la LED va dans la direction opposée, ce qui est une modification facile à faire une fois que vous avez fait fonctionner correctement la déduction du joueur.
Étape 6: Fin du jeu Si à un moment donné l'un des joueurs atteint zéro santé, le jeu passe à cet état. Rien d'extraordinaire n'affiche. Si BTN one est enfoncé, la santé est réinitialisée à 99 et l'état revient au menu, redémarrant effectivement le jeu.
Étape 3: Modules
Diagramme de la boîte noire pour le jeu
Downcounterclock (basé sur le module clk_div.vhd de Bryan Mealy):
C'est l'horloge qui gère la synchronisation des déductrices. La constante nommée max_count est 3 fois supérieure à la constante max_count de barclock. Cela rendra les déducteurs 3 fois plus lents que la vitesse de la barre.
Barclock - (basé sur le module clk_div.vhd de Bryan Mealy):
Cette horloge gère le timing des jauges de puissance, que nous avons fait incrémenter rapidement pour ajouter de la difficulté au jeu. Ce timing peut être ajusté à votre convenance, en augmentant la vitesse en faisant de la constante max_count un nombre plus grand, ou en la diminuant en faisant de max_count un nombre plus petit. Sseg_dec - (Écrit par Bryan Mealy): Ce module prend un nombre de 8 bits en entrée, qu'il décode, convertit le nombre en son équivalent décimal, puis sort sur l'affichage à sept segments. Pour que ce fichier fonctionne, vous devez vous assurer que vos contraintes correspondent aux nôtres.
Poné:
Il s'agit d'un registre à décalage qui décale les bits vers la gauche, ajoutant un bit chaud pour donner l'impression que la jauge de puissance augmente. Lorsque tous les bits sont chauds, tous les bits sont réinitialisés à « 0 » et le cycle recommence.
Deux:
Il s'agit d'une version inversée du module P1.
Déducteur1:
Il s'agit d'une combinaison d'un registre à décalage et d'un soustracteur. Le registre à décalage va dans le sens inverse du registre à décalage de P1, indiquant une déduction. Cela soustrait également 1 à la santé du joueur 2 pour chaque cycle d'horloge, donc avec la combinaison de ces deux fonctions, il semblera que la santé de l'adversaire diminue de 1 pour chaque led de la barre de santé qui descend.
Deductor2: il s'agit d'une version inversée du module Deductor1.
PlayDecoder (emprunté et légèrement modifié de ekchen35649 son 133 instructable): Ceci est utilisé dans l'état du menu pour afficher le mot "PLAY" sur le décodeur à sept segments.
Étape 4: Tester
Ce jeu a été inspiré à l'origine par l'un des mini-jeux de Kirby. C'est un jeu simple à deux joueurs qui peut être joué sur une carte Basys 3 ou n'importe quel FPGA.
Étape 1: Matériel requis
Vous aurez besoin de: Digilent Basys 3, FPGA Board (ou tout autre) Une version relativement à jour de Vivado, ou un autre environnement vhdl Un ordinateur qui peut exécuter le programme mentionné Un cerveau
Étape 2: le jeu lui-même
Comment jouer
Pour commencer, vous appuyez sur le bouton du milieu. Cela entraînera l'affichage de "99", représentant la santé du joueur deux, sur l'affichage à sept segments. Ensuite, les LED s'allumeront séquentiellement de droite à gauche. Cela forme une barre d'alimentation. Une fois la barre d'alimentation pleine, elle se réinitialise. Le but du joueur 1 est de retourner son interrupteur lorsque la barre est la plus haute possible. Plus il y a de LED allumées, plus le joueur un inflige de dégâts au joueur deux. Une fois que le premier joueur a basculé son interrupteur, les dégâts infligés sont déduits de la santé du deuxième joueur. Ensuite, il passe au tour du joueur 2. Maintenant, le nombre affiché représente la santé du joueur et la barre d'alimentation se remplit de gauche à droite. Une fois que le deuxième joueur a fait son mouvement, les dégâts sont déduits et c'est à nouveau le tour du premier joueur. Cela se répète jusqu'à ce qu'un joueur atteigne 0 santé. La vidéo de ce fonctionnement est jointe.
Pour jouer au jeu, chargez-le sur une carte basys et appuyez sur le bouton du milieu. Essayez de basculer l'interrupteur avec autant de LED actives que possible, puis attendez et regardez pendant que le tableau déduit ces points de la santé de votre adversaire. Ensuite, passez-le à votre ami, et
Étape 3: FSM
Ce jeu est essentiellement une grande machine à états finis, dans laquelle se déroule une logique complexe basée sur l'état dans lequel se trouve le FSM.
(Diagramme d'état)
Etat 1: Menu
Le premier état est l'écran de menu, qui est l'un des états les plus simples. Il comprend l'affichage à sept segments affichant le mot « JOUER » et le bouton qui fait démarrer le jeu. Le bouton, BTN, nous mène à l'état suivant, qui est le tour du joueur.
État 2: au tour du joueur 1
Le tour du joueur un active un signal qui fait que l'affichage à sept segments affiche la santé du joueur deux. Un autre signal s'allume pour activer un registre à décalage importé d'un autre module que nous avons créé (Pone.vhd). Ce registre à décalage fait s'allumer les LED comme le ferait une jauge de puissance croissante dans d'autres jeux, et il serait ensuite remis à 0 lorsqu'il atteindrait le nombre maximum de LED qui pourraient être allumées. Il se met à jour sur le front montant de l'horloge obtenu à partir de barclock.vhd, qui est modifié à partir d'un fichier de laboratoire emprunté. Nous avons fait commencer la barre du joueur à partir de la droite et se remplir à gauche, car le commutateur du joueur est également à gauche (pour une expérience utilisateur intuitive). Une fois que l'interrupteur est basculé, l'état passe au joueur un déduire, et la quantité de LED actives est enregistrée dans un signal.
État 3: joueur un déduire
Le signal avec la quantité de LED actives détermine la quantité de santé qui est déduite. Ceci est fait en ayant un autre registre à décalage (deductor1.vhd) qui plutôt que d'incrémenter les LED, les décrémente. Cela décrémente sur le front montant de l'un des modules d'horloge div que nous avons empruntés et modifiés (downcounterclock.vhd). Dès qu'une LED est éteinte, un point de santé est déduit de la santé totale du joueur deux. Si au cours de ce processus, le joueur 2 atteint 0 points de vie, nous nous arrêtons et passons immédiatement à l'état « Game over ». Sinon, une fois que le vecteur LED atteint "0000000000000000", nous passons au tour du joueur 2.
État 4: au tour du joueur 2
Le tour du joueur deux est exactement comme celui du joueur un, sauf que le registre à décalage (Ptwo.bhd) va de gauche à droite et que l'interrupteur se trouve sur le côté droit du tableau. Un signal s'active pour afficher la santé du joueur 1. Une fois que le commutateur 2 est actif, cela passe au tour de déduction du joueur deux.
Étape 5: Déduction du joueur 2
Tout comme le tour du deuxième joueur, le deuxième joueur déduit agit un peu comme le premier joueur déduit. La principale différence est que le registre à décalage qui contrôle l'extinction de la LED va dans la direction opposée, ce qui est une modification facile à faire une fois que vous avez fait fonctionner correctement la déduction du joueur.
Étape 6: Fin du jeu Si à un moment donné l'un des joueurs atteint zéro santé, le jeu passe à cet état. Rien d'extraordinaire n'affiche. Si BTN one est enfoncé, la santé est réinitialisée à 99 et l'état revient au menu, redémarrant effectivement le jeu.
Boîte noire
Étape 4: Modules
Downcounterclock (basé sur le module clk_div.vhd de Bryan Mealy):
C'est l'horloge qui gère la synchronisation des déductrices. La constante nommée max_count est 3 fois supérieure à la constante max_count de barclock. Cela rendra les déducteurs 3 fois plus lents que la vitesse de la barre.
Barclock - (basé sur le module clk_div.vhd de Bryan Mealy): Cette horloge gère le timing des jauges de puissance, que nous avons fait incrémenter rapidement pour ajouter de la difficulté au jeu. Ce timing peut être ajusté à votre convenance, en augmentant la vitesse en faisant de la constante max_count un nombre plus grand, ou en la diminuant en faisant de max_count un nombre plus petit. Sseg_dec - (Écrit par Bryan Mealy): Ce module prend un nombre de 8 bits en entrée, qu'il décode, convertit le nombre en son équivalent décimal, puis sort sur l'affichage à sept segments. Pour que ce fichier fonctionne, vous devez vous assurer que vos contraintes correspondent aux nôtres.
Pone: il s'agit d'un registre à décalage qui décale les bits vers la gauche, en ajoutant un bit chaud pour donner l'impression que la jauge de puissance augmente. Lorsque tous les bits sont chauds, tous les bits sont réinitialisés à « 0 » et le cycle recommence.
Ptwo: il s'agit d'une version inversée du module P1.
Deductor1: Il s'agit d'une combinaison d'un registre à décalage et d'un soustracteur. Le registre à décalage va dans le sens inverse du registre à décalage de P1, indiquant une déduction. Cela soustrait également 1 à la santé du joueur 2 pour chaque cycle d'horloge, donc avec la combinaison de ces deux fonctions, il semblera que la santé de l'adversaire diminue de 1 pour chaque led de la barre de santé qui descend.
Deductor2: il s'agit d'une version inversée du module Deductor1.
PlayDecoder (emprunté et légèrement modifié de ekchen35649 son 133 instructable):
Ceci est utilisé dans l'état du menu pour afficher le mot « PLAY » sur le décodeur à sept segments.
A faire: photos, vidéo
Conseillé:
Tap Tap Rainbow - un jeu de réaction rapide à 2 joueurs : 4 étapes (avec photos)
Tap Tap Rainbow - un jeu de réaction rapide à 2 joueurs : il y a 2 semaines, ma fille a eu une idée de génie pour créer un jeu de réaction rapide avec des couleurs arc-en-ciel (c'est une experte en arc-en-ciel :D). J'ai tout de suite adoré l'idée et nous avons commencé à réfléchir à la façon dont nous pourrions en faire un vrai jeu. L'idée était. Vous avez un arc-en-ciel dans
Contrôleur de jeu familial sans fil à 4 joueurs : 3 étapes
Contrôleur de jeu familial sans fil à 4 joueurs : il s'agit d'un contrôleur de style arcade sans fil sur lequel 4 personnes peuvent jouer à la fois. Il est sans fil afin que vous n'ayez pas à connecter votre ordinateur à un contrôleur utilisé par des enfants de 5 ans. Ils tombent tout le temps et je ne veux pas qu'ils détruisent tous mes jouets quand
Système de buzzer compétitif : 5 étapes
Système de buzzer compétitif : Le système de buzzer compétitif conçu dans ce projet fonctionne de la même manière que les systèmes de buzzer utilisés dans les compétitions régionales et nationales de Science Bowl. Ce projet a été inspiré par mon implication avec l'équipe du bol scientifique de mon lycée pendant trois
Aruduino LED Game Jeu à deux joueurs à clic rapide : 8 étapes
Aruduino LED Game Jeu à deux joueurs à clic rapide : Ce projet est inspiré de @HassonAlkeim. Si vous êtes prêt à regarder en profondeur, voici un lien que vous pouvez consulter https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Ce jeu est une version améliorée d'Alkeim. C'est un
Contrôleur de jeu DIY basé sur Arduino - Contrôleur de jeu Arduino PS2 - Jouer à Tekken avec la manette de jeu DIY Arduino : 7 étapes
Contrôleur de jeu DIY basé sur Arduino | Contrôleur de jeu Arduino PS2 | Jouer à Tekken avec la manette de jeu DIY Arduino : Bonjour les gars, jouer à des jeux est toujours amusant, mais jouer avec votre propre contrôleur de jeu personnalisé DIY est plus amusant. Nous allons donc créer un contrôleur de jeu utilisant arduino pro micro dans cette instructables