Índice:
Vídeo: Jogo de cronometragem VS competitivo de 2 jogadores: 4 etapas
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:38
Você vai precisar de:
1. Digilent Basys 3, placa FPGA (ou qualquer outro FPGA)
2. Uma versão relativamente atualizada do Vivado ou algum outro ambiente VHDL
3. Um computador que pode executar o programa mencionado.
Etapa 1: o próprio jogo
Como o FSM interage com os módulos.
Como jogar
Para começar, você pressiona o botão do meio. Isso fará com que “99”, representando a saúde do jogador dois, seja exibido no visor de sete segmentos. Em seguida, os LEDs acenderão sequencialmente da direita para a esquerda. Isso forma uma barra de energia. Quando a barra de energia está cheia, ela reinicia. O objetivo do jogador um é girar o interruptor quando a barra estiver o mais alta possível. Quanto mais LEDs acendem, mais dano o jogador um causa ao jogador dois. Depois que o jogador um ativa sua chave, o dano causado é deduzido da saúde do jogador dois. Então, muda para a vez do jogador dois. Agora, o número exibido representa a saúde do jogador um, e a barra de energia é preenchida da esquerda para a direita. Uma vez que o jogador dois faz seu movimento, o dano é deduzido e volta para a vez do jogador um novamente. Isso se repete até que um jogador alcance 0 pontos de vida. Vídeo deste funcionamento está anexado.
Etapa 2: FSM
Este jogo é essencialmente uma grande máquina de estado finito, em que alguma lógica complexa acontece com base no estado em que o FSM está.
Estado 1: Menu O primeiro estado é a tela do menu, que é um dos estados mais simples. Inclui o display de sete segmentos exibindo a palavra “PLAY” e o botão que inicia o jogo. O botão, BTN, nos leva ao próximo estado, que é a vez do jogador um.
Estado 2: a vez do Jogador Um
A vez do Jogador um ativa um sinal que faz com que a exibição de sete segmentos exiba a saúde do Jogador dois. Outro sinal é ativado para ativar um registrador de deslocamento importado de outro módulo que criamos (Pone.vhd). Este registro de deslocamento faz com que os LEDs se acendam como um medidor de potência crescente faria em outros jogos, e então seria redefinido para 0 quando atingir a quantidade máxima de LEDs que poderiam ser acesos. Ele é atualizado na borda ascendente do relógio obtido de barclock.vhd, que é modificado a partir de um arquivo de laboratório emprestado. Tínhamos a barra do jogador um começando da direita e enchendo à esquerda, porque a chave do jogador um também está à esquerda (para uma experiência intuitiva do usuário). Uma vez que a chave é virada, o estado passa para o jogador uma dedução, e a quantidade de LEDs ativos é salva em um sinal.
Estado 3: dedução do Jogador Um O sinal com a quantidade de LEDs ativos determina a quantidade de saúde que é deduzida. Isso é feito por meio de outro registrador de deslocamento (deductor1.vhd) que, em vez de incrementar os LEDs, os diminui. Isso diminui na borda ascendente de um dos módulos div do clock que pegamos emprestado e modificamos (downcounterclock.vhd). Assim que um LED é desligado, um ponto de saúde é deduzido da saúde total do jogador dois. Se durante este processo o jogador dois atingir 0 de saúde, paramos e passamos imediatamente para o estado de “Fim de jogo”. Caso contrário, uma vez que o vetor LED atinge “0000000000000000”, passamos para a vez do jogador dois.
Estado 4: a vez do jogador dois A vez do jogador dois é exatamente como a vez do jogador um, exceto que o registro de deslocamento para ele (Ptwo.bhd) vai da esquerda para a direita, e o interruptor está no lado direito do tabuleiro. Um sinal é ativado para exibir a saúde do Jogador 1. Uma vez que o interruptor 2 está ativo, ele segue para a vez de dedução do Jogador Dois.
Etapa 5: dedução do jogador dois Assim como na vez do jogador dois, o jogador dois deduz age de maneira muito semelhante à dedução do jogador um. A principal diferença é que o registro de deslocamento que controla o desligamento dos LEDs vai na direção oposta, o que é uma modificação fácil de fazer, uma vez que a dedução do jogador um está funcionando corretamente.
Estágio 6: Fim do Jogo Se em qualquer ponto um dos jogadores atingir zero de saúde, o jogo muda para este estado. Nada extravagante exibe. Se o BTN um for pressionado, a integridade será redefinida para 99 e o estado voltará ao menu, reiniciando o jogo efetivamente.
Etapa 3: Módulos
Diagrama de caixa preta para jogo
Downcounterclock (baseado no módulo clk_div.vhd de Bryan Mealy):
Este é o relógio que controla a cronometragem dos dedutores. A constante chamada max_count é 3x mais do que a constante max_count do barclock. Isso fará com que os dedutores sejam 3x mais lentos do que a velocidade da barra.
Barclock - (baseado no módulo clk_div.vhd de Bryan Mealy):
Este relógio controla o tempo dos medidores de energia, que aumentamos rapidamente para adicionar dificuldade ao jogo. Este tempo pode ser ajustado ao seu gosto, aumentando a velocidade tornando a constante max_count um número maior ou diminuindo-a tornando max_count um número menor. Sseg_dec - (Escrito por Bryan Mealy): Este módulo recebe um número de 8 bits como entrada, que ele decodifica, convertendo o número em seu equivalente decimal e, em seguida, produz no display de sete segmentos. Para que este arquivo funcione, você precisa ter certeza de que suas restrições correspondem às nossas.
Pone:
Este é um registrador de deslocamento que desloca bits para a esquerda, adicionando um bit ativo para fazer parecer que o medidor de energia está aumentando. Quando todos os bits estão quentes, todos os bits são redefinidos para '0' e o ciclo é reiniciado.
Ptwo:
Esta é uma versão invertida do módulo P1.
Deductor1:
Esta é uma combinação de um registrador de deslocamento e um subtrator. O registrador de deslocamento vai na direção oposta do registrador de deslocamento de P1, indicando uma dedução. Isso também subtrai 1 da saúde do Jogador 2 para cada ciclo do relógio, então, com a combinação dessas duas funções, parecerá que a saúde do oponente está diminuindo em 1 para cada led da barra de saúde que diminui.
Deductor2: esta é uma versão invertida do módulo Deductor1.
PlayDecoder (emprestado e ligeiramente modificado de ekchen35649 seu 133 instrutível): É usado no estado de menu para exibir a palavra “PLAY” no decodificador de sete segmentos.
Etapa 4: teste
Este jogo foi originalmente inspirado em um dos minijogos de Kirby. É um jogo simples para dois jogadores que pode ser jogado em um Basys 3 Board ou em qualquer FPGA.
Etapa 1: Materiais Necessários
Você vai precisar de: Digilent Basys 3, FPGA Board (ou qualquer outro) Uma versão relativamente atualizada do Vivado, ou algum outro ambiente vhdl Um computador que possa rodar o programa mencionado A brain
Etapa 2: o próprio jogo
Como jogar
Para começar, você pressiona o botão do meio. Isso fará com que “99”, representando a saúde do jogador dois, seja exibido no visor de sete segmentos. Em seguida, os LEDs acenderão sequencialmente da direita para a esquerda. Isso forma uma barra de energia. Assim que a barra de energia estiver cheia, ela reinicia. O objetivo do jogador um é girar o interruptor quando a barra estiver o mais alta possível. Quanto mais LEDs acendem, mais dano o jogador um causa ao jogador dois. Depois que o jogador um ativa sua chave, o dano causado é deduzido da saúde do jogador dois. Então, muda para a vez do jogador dois. Agora, o número exibido representa a saúde do jogador um, e a barra de energia é preenchida da esquerda para a direita. Uma vez que o jogador dois faz seu movimento, o dano é deduzido e volta para a vez do jogador um novamente. Isso se repete até que um jogador alcance 0 pontos de vida. Vídeo deste funcionamento está anexado.
Para jogar, carregue-o em um tabuleiro basys e pressione o botão do meio. Tente girar a chave com o máximo possível de LEDs ativos e, em seguida, espere e observe enquanto o tabuleiro deduz esses pontos da saúde do seu oponente. Em seguida, passe para o seu amigo e
Etapa 3: FSM
Este jogo é essencialmente uma grande máquina de estado finito, em que alguma lógica complexa acontece com base no estado em que o FSM está.
(Diagrama de Estado)
Estado 1: Menu
O primeiro estado é a tela do menu, que é um dos estados mais simples. Inclui o display de sete segmentos exibindo a palavra “PLAY” e o botão que inicia o jogo. O botão, BTN, nos leva ao próximo estado, que é a vez do jogador um.
Estado 2: a vez do Jogador Um
A vez do Jogador um ativa um sinal que faz com que a tela de sete segmentos exiba a saúde do Jogador dois. Outro sinal é ativado para ativar um registrador de deslocamento importado de outro módulo que criamos (Pone.vhd). Este registro de deslocamento faz com que os LEDs se acendam como um medidor de potência crescente faria em outros jogos, e então seria redefinido para 0 quando atingir a quantidade máxima de LEDs que poderiam ser acesos. Ele atualiza na borda ascendente do relógio obtido de barclock.vhd, que é modificado a partir de um arquivo de laboratório emprestado. Tínhamos a barra do jogador um começando da direita e enchendo à esquerda, porque a chave do jogador um também está à esquerda (para uma experiência intuitiva do usuário). Uma vez que a chave é virada, o estado passa para o jogador uma dedução, e a quantidade de LEDs ativos é salva em um sinal.
Estado 3: dedução do Jogador Um
O sinal com a quantidade de LEDs ativos determina a quantidade de saúde que é deduzida. Isso é feito por meio de outro registrador de deslocamento (deductor1.vhd) que, em vez de incrementar os LEDs, os diminui. Isso diminui na borda ascendente de um dos módulos div do clock que pegamos emprestado e modificamos (downcounterclock.vhd). Assim que um LED é desligado, um ponto de saúde é deduzido da saúde total do jogador dois. Se durante este processo o jogador dois atingir 0 de saúde, paramos e passamos imediatamente para o estado de “Fim de jogo”. Caso contrário, uma vez que o vetor LED atinge “0000000000000000”, passamos para a vez do jogador dois.
Estado 4: a vez do Jogador Dois
O turno do jogador dois é exatamente igual ao do jogador um, exceto que o registro de deslocamento para ele (Ptwo.bhd) vai da esquerda para a direita, e o interruptor está no lado direito do tabuleiro. Um sinal é ativado para exibir a saúde do Jogador 1. Uma vez que o interruptor 2 está ativo, ele segue para a vez de dedução do Jogador Dois.
Etapa 5: dedução do jogador dois
Assim como na vez do jogador dois, o jogador dois deduz age de maneira muito semelhante à dedução do jogador um. A principal diferença é que o registro de deslocamento que controla o desligamento dos LEDs vai na direção oposta, o que é uma modificação fácil de fazer, uma vez que a dedução do jogador está funcionando corretamente.
Estágio 6: Fim do Jogo Se em qualquer ponto um dos jogadores atingir zero de saúde, o jogo muda para este estado. Nada extravagante exibe. Se o BTN um for pressionado, a integridade será redefinida para 99 e o estado voltará ao menu, reiniciando o jogo efetivamente.
Caixa preta
Etapa 4: Módulos
Downcounterclock (baseado no módulo clk_div.vhd de Bryan Mealy):
Este é o relógio que controla a cronometragem dos dedutores. A constante chamada max_count é 3x mais do que a constante max_count do barclock. Isso tornará os dedutores 3x mais lentos do que a velocidade da barra.
Barclock - (baseado no módulo clk_div.vhd de Bryan Mealy): Este relógio controla o tempo dos medidores de energia, que aumentamos rapidamente para adicionar dificuldade ao jogo. Esse tempo pode ser ajustado ao seu gosto, aumentando a velocidade tornando a constante max_count um número maior ou diminuindo-a tornando max_count um número menor. Sseg_dec - (Escrito por Bryan Mealy): Este módulo recebe um número de 8 bits como entrada, que ele decodifica, convertendo o número em seu equivalente decimal e, em seguida, produz no display de sete segmentos. Para que esse arquivo funcione, você precisa ter certeza de que suas restrições correspondem às nossas.
Pone: Este é um registrador de deslocamento que desloca bits para a esquerda, adicionando um bit ativo para fazer parecer que o medidor de energia está aumentando. Quando todos os bits estão quentes, todos os bits são redefinidos para '0' e o ciclo é reiniciado.
Ptwo: Esta é uma versão invertida do módulo P1.
Dedutor1: Esta é uma combinação de um registrador de deslocamento e um subtrator. O registrador de deslocamento vai na direção oposta do registrador de deslocamento de P1, indicando uma dedução. Isso também subtrai 1 da saúde do Jogador 2 para cada ciclo do relógio, então, com a combinação dessas duas funções, parecerá que a saúde do oponente está diminuindo em 1 para cada led da barra de saúde que diminui.
Deductor2: esta é uma versão invertida do módulo Deductor1.
PlayDecoder (emprestado e ligeiramente modificado de ekchen35649 seu 133 instrutível):
Isso é usado no estado de menu para exibir a palavra “PLAY” no decodificador de sete segmentos.
Para fazer: fotos, vídeo
Recomendado:
Tap Tap Rainbow - um jogo de reação rápida para 2 jogadores: 4 etapas (com imagens)
Tap Tap Rainbow - um jogo de reação rápida para 2 jogadores: 2 semanas atrás, minha filha teve uma ideia genial de fazer um jogo de reação rápida com as cores do arco-íris (ela é uma especialista em arco-íris: D). Eu imediatamente amei a ideia e começamos a pensar em como poderíamos transformá-lo em um jogo real. A ideia era. Você tem um arco-íris em
Controlador de jogo para família de 4 jogadores sem fio: 3 etapas
Controlador de jogo para a família de 4 jogadores sem fio: Este é um controlador de estilo arcade sem fio no qual 4 pessoas podem jogar ao mesmo tempo. É sem fio para que você não precise amarrar seu PC a um controlador usado por crianças de 5 anos. Eles caem o tempo todo e eu não os quero destruindo todos os meus brinquedos quando
Jogo Aruduino LED Jogo de dois jogadores com cliques rápidos: 8 etapas
Aruduino LED Game Jogo de dois jogadores com cliques rápidos: Este projeto é inspirado em @HassonAlkeim. Se você estiver disposto a dar uma olhada profunda, aqui está um link que você pode verificar https://www.instructables.com/id/Arduino-Two-Player-Fast-Button-Clicking-Game/. Este jogo é uma versão melhorada do Alkeim. É um
Sistema de cronometragem baseado em laser Arduino: 6 etapas (com imagens)
Sistema de cronometragem baseado em laser Arduino: Como parte do meu ensino, eu precisava de um sistema para medir com precisão a velocidade com que um modelo de veículo viajava 10 metros. Inicialmente, pensei em comprar um sistema pronto e barato do eBay ou Aliexpress, esses sistemas são comumente conhecidos como portões de luz, pho
Métodos de cronometragem do Arduino com Millis (): 4 etapas
Métodos de temporização do Arduino com Millis (): Neste artigo, apresentamos o millis (); e colocá-la em uso para criar vários exemplos de tempo. Millis? Nada a ver com sincronizadores labiais … espero que você tenha reconhecido milli como sendo o prefixo numérico para um milésimo; que está multiplicando um u