Índice:

Campo Minado: 5 etapas (com imagens)
Campo Minado: 5 etapas (com imagens)

Vídeo: Campo Minado: 5 etapas (com imagens)

Vídeo: Campo Minado: 5 etapas (com imagens)
Vídeo: A simplicidade do Campo Minado!! (Animação) 2024, Novembro
Anonim
Campo Minado
Campo Minado

Para o nosso projeto final CPE 133, Chase e eu decidimos criar um jogo ‘Campo Minado’ que utilizava botão e troca de entrada de uma placa Basys-3, bem como código VHDL. Um nome melhor para o jogo poderia muito bem ser ‘Roleta Russa’, no entanto, queríamos um nome mais familiar. O jogo envolve o usuário para pressionar o botão do meio no tabuleiro Basys para atribuir aleatoriamente um dos 16 interruptores para ser "ativo" com uma bomba. Dois jogadores, então, se revezam ativando interruptores, um de cada vez, até que um dos jogadores vire o interruptor com a 'bomba'. Quando isso acontece, o display de sete segmentos alerta os jogadores de que aquele jogador acabou de perder o jogo.

Etapa 1: Visão geral

O projeto utilizou muitos dos módulos VHDL que utilizamos ao longo deste trimestre. Um contador de quatro bits foi usado em conjunto com a transição do clock para simular um número aleatório de quatro bits para ativar uma das opções. Um diagrama de estado também foi usado para gerar palavras diferentes para o display de sete segmentos, variando de ‘JOGAR’ quando os jogadores estão no meio do jogo, a ‘PERDER’ quando um dos jogadores acionou o botão ativo.

Etapa 2: Materiais

  • Basys3 Development Board da Digilent, Inc.
  • Vivado Design Suite BC_DEC.vhd (Este arquivo foi fornecido para nós no Polylearn e foi escrito por Bryan Mealy)
  • Um contador de 4 bits feito de flip-flops T
  • A FSM

Etapa 3: Fazendo o jogo

Fazendo o jogo
Fazendo o jogo
Fazendo o jogo
Fazendo o jogo

O primeiro passo para fazer este jogo foi desenhar um diagrama de circuito com todos os componentes que usaremos. As entradas para este sistema eram o botão 1, os 16 interruptores e o Relógio. As saídas foram o display de sete segmentos e os ânodos. Depois de desenhar o diagrama de circuito, escrevemos arquivos-fonte individuais para cada componente no Vivado e os colocamos juntos usando mapas de portas sob o arquivo-fonte principal.

Toda a base do jogo gira em torno de atribuir aleatoriamente um dos 16 interruptores para ficar ativo com uma bomba, e para os jogadores não saberem qual interruptor está ativo até que o interruptor ativo seja ligado. Analisamos geradores de números aleatórios e pseudo-aleatórios online, mas finalmente decidimos que usar um contador de 4 bits e atribuir a chave correspondente para ser ativo é suficientemente aleatório para o que estávamos procurando. Conseguimos reaproveitar nosso contador de 4 bits que criamos em um projeto anterior para poder trabalhar nesta atribuição. Usamos o contador para criar um número aleatório entre 0-15; em seguida, no componente main1, atribuímos o equivalente decimal do número aleatório à sua chave correspondente na placa. Como visto no esquema, tanto a saída X ('bomba ativa') do componente principal1 e os interruptores que os jogadores ligam vão para FSM1. A máquina de estado emite um valor Z de um bit que é lido por BC_DEC1. A máquina de estado finito que usamos tem dois estados diferentes: no estado A, o display de sete segmentos produz 'PLAY' e a máquina permanece nesse estado até reconhecer que a chave ativada foi invertida. Uma vez que isso acontece, o FSM vai para o estado B, onde produz 'LOSE' para o display de sete segmentos e permanece nesse estado até que todos os 16 interruptores sejam colocados em '0'. Quando essa condição é atendida, o FSM então vai mais uma vez para o estado A e aguarda os jogadores para iniciar outro jogo. Um diagrama de Moore para ajudar a entender este FSM é mostrado acima.

Etapa 4: Modificações futuras

Algumas modificações que estávamos considerando fazer em nosso jogo incluem adicionar mais bombas ao campo (possivelmente aumentando de uma para três), adicionar um contador de pontuação e várias rodadas. No final das contas, decidimos contra essas melhorias, pois descobrimos que jogar um jogo mais longo e estendido normalmente era mais tenso e, no final, mais divertido do que um jogo que normalmente terminava após três ou quatro viradas de botão.

Etapa 5: Conclusão

Ficamos muito felizes com o resultado final deste projeto; não apenas porque a versão final do jogo foi divertida de jogar, mas também porque criar e programar o projeto exigiu que utilizássemos a maior parte, senão tudo o que aprendemos neste trimestre. Utilizamos flip-flops, contadores, FSMs, o relógio, a entrada do usuário na placa e a saída para o display de sete segmentos.

Também aprendemos como alguns erros de sintaxe podem quebrar completamente o programa (mesmo que sejam considerados bons em outras linguagens de programação como Python ou Java) e que somente após várias simulações e várias iterações do código sendo carregado e testado no bordo, você finalmente será capaz de eliminar todos os bugs do seu código.

Recomendado: