Índice:
- Etapa 1: Visão geral
- Etapa 2: Materiais
- Etapa 3: Fazendo o jogo
- Etapa 4: Exibindo o resultado
- Etapa 5: juntando tudo
- Etapa 6: Modificações futuras
- Etapa 7: Conclusão
Vídeo: Jogo de asteróides FPGA: 7 etapas (com imagens)
2024 Autor: John Day | [email protected]. Última modificação: 2024-01-30 11:39
Para o nosso projeto final CPE 133, decidimos criar um jogo de asteróides em nosso FPGA usando dois botões e uma tela de 7 segmentos. O jogo funciona de forma que um asteróide nasce em uma das três fileiras selecionadas aleatoriamente e se lança em direção à nave do outro lado do display de 7 segmentos. Os botões superior e inferior podem ser usados para mover sua nave para fora do caminho do asteróide. Se não o fizer, o visor mostra ‘BAnG’ por um momento e, em seguida, reinicia rapidamente o jogo para que o usuário possa tentar novamente. A seguir, uma breve descrição de como o projeto foi feito para que qualquer usuário possa replicar ou aprimorar nosso design.
Etapa 1: Visão geral
O projeto consiste em grande parte em máquinas de estado finito (FSMs), que usam lógica para transferir o FPGA entre estados que armazenam e exibem diferentes valores de posição de navio e rocha. Os dois módulos principais são os FSMs do jogo para o rock and ship, e o decodificador FSM de display binário para 7 segmentos, que são integrados usando um modelo estrutural muito simples em VHDL.
FSMs foram criados para a posição do navio, a posição da rocha e para o decodificador de 7 segmentos. O objetivo do FSM do navio é para que o navio possa se mover para a posição correta quando o jogador pressiona um botão para cima ou para baixo. O FSM é necessário porque ele precisa se lembrar em qual posição estava por último para mover para a posição correta.
O objetivo do FSM da rocha é mover a rocha para a posição correta com base em qual linha ela está e a última posição nessa linha. Além disso, ele rastreia a posição do módulo que irá exibi-lo e pseudo-aleatoriamente escolhe uma nova linha para aparecer a seguir.
O FSM para o decodificador de exibição de 7 segmentos foi usado não apenas para exibir o navio e a rocha, mas também para exibir “BAnG” quando a posição do navio e a posição da rocha são iguais.
Etapa 2: Materiais
Os materiais utilizados no projeto foram:
- Basys3 Development Board da Digilent, Inc.
- Suíte Vivado Design
- sseg_dec.vhd (Este arquivo foi fornecido para nós no Polylearn e foi escrito por Bryan Mealy)
- Clk_div.vhd (Este arquivo foi fornecido para nós no Polylearn e foi escrito por Bryan Mealy)
- Três máquinas de estado finito (FSMs)
Etapa 3: Fazendo o jogo
O módulo do jogo foi criado usando modelagem comportamental para descrever os estados do navio e da rocha para seus respectivos FSMs. A vantagem disso é que é muito mais fácil modelar o circuito comportamentalmente, descrevendo o que ele faz, em vez de descobrir todos os componentes necessários para projetar o hardware.
Os estados da rocha foram feitos usando um gerador de números pseudo-aleatórios para a primeira posição da rocha. Para fazer isso, demos ao gerador seu próprio relógio, que era extremamente rápido em relação à velocidade do jogo. Em cada borda ascendente, um número de três bits é incrementado e todos os seus valores correspondem a um dos três estados iniciais do navio. Portanto, três valores correspondem à posição 3 (canto superior direito), três correspondem à posição 7 (centro) e dois correspondem à posição 11 (canto inferior direito).
Uma vez que a geração aleatória ocorreu e o asteróide recebeu um estado inicial, ele flui horizontalmente em direção à nave sem interrupção.
0 ← 1 ← 2 ← 3
4 ← 5 ← 6 ← 7
11 ← 10 ← 9 ← 8
O relógio usado para a próxima lógica de estado da rocha controla a velocidade do jogo; descobrimos por tentativa e erro que 9999999 é um bom valor para sua contagem máxima.
A lógica do navio funciona inicializando na posição central (posição 4) no lado esquerdo. Se o botão superior ou o botão inferior forem pressionados, o navio se moverá para cima e para baixo para as posições 0 e 11 correspondentes ao botão que foi pressionado.
Para que o movimento da nave seja bom para o usuário, não tornamos seu movimento assíncrono. Usamos um relógio para suas mudanças de estado e usamos uma contagem máxima de 5555555.
Etapa 4: Exibindo o resultado
O decodificador binário para 7 segmentos leva as variáveis de posição de 4 bits para a nave e o asteróide e exibe a imagem apropriada (a nave e rocha ou a mensagem “BAnG”).
Ele faz isso verificando primeiro se os dois são iguais e, em seguida, exibindo a mensagem “BAnG” se a verificação retornar verdadeira.
Se não retornar verdadeiro, o decodificador exibirá a nave e a rocha alternando entre eles em uma frequência de clock muito alta e enganando o olho para vê-los como se estivessem sendo exibidos ao mesmo tempo.
Etapa 5: juntando tudo
Incluímos o FSM do navio e do rock em um grande FSM que conectamos ao FSM de exibição. As entradas para o jogo são o botão para cima e o botão para baixo na placa BASYS3 e o relógio do sistema. As saídas são os vetores de segmento e ânodo de exibição de sete segmentos.
Essas entradas e saídas serão vistas no arquivo de restrições onde são mapeadas as portas.
Etapa 6: Modificações futuras
No futuro, adicionar mais funcionalidade de movimento de navio ao projeto seria uma melhoria. Isso pode ser feito simplesmente fornecendo mais 2 entradas de botão e permitindo que a nave assuma posições (estados) diferentes de 0, 4 e 8. Outra modificação possível poderia ser controlar o tempo do próximo estado do asteróide para que ele comece lentamente e aumente a velocidade em 1.5x toda vez que ele erra o navio até que seja atingido, onde ele reiniciaria e ficaria lento novamente. Isso aumentaria a dificuldade do jogo e o tornaria mais divertido para o usuário se fosse implementado, e poderia ser feito criando uma variável para a contagem máxima do próximo relógio de estado da rocha, multiplicando essa variável por 1,5 toda vez que o asteróide não acertar, e reconfigurando-o para seu valor inicial toda vez que a pedra acertar.
Etapa 7: Conclusão
Este projeto nos ajudou a entender melhor as máquinas de estado finito, relógios e exibições interativas nos visores de sete segmentos.
O mais importante sobre as máquinas de estado finito é que é importante saber (lembrar) em que estado você está atualmente para passar para o próximo estado desejado. Ironicamente, um bom conselho de vida; você deve saber onde está para saber para onde está indo.
Ao manipular diferentes instâncias de relógios, fomos capazes de gerar números aleatoriamente, mover a pedra para a próxima posição e gerenciar a exibição do navio, da pedra e da mensagem de fim de jogo.
Aprendemos que mais de um ânodo não pode ser exibido ao mesmo tempo. O módulo que nos foi dado aproveitou que o olho humano só consegue ver a diferença até uma determinada frequência. Portanto, foi escolhida uma frequência mais alta de comutação de ânodos. O navio e a rocha vistos ao mesmo tempo são, na verdade, uma alusão, já que cada um é exibido separadamente, mas muito rapidamente. Esse conceito foi aplicado para exibir o movimento do navio, a rocha e a mensagem “BAnG”.
Recomendado:
Jogo eletrônico do jogo da velha em uma caixa de madeira: 5 etapas
Jogo eletrônico do jogo da velha em uma caixa de madeira: Olá, eu apresento o jogo engraçado do jogo da velha em uma nova edição. Pesquisei na web por projetos semelhantes, mas a ideia aqui é única. ESPERO:) Então, vamos começar agora
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
Controlador de jogo DIY baseado em Arduino - Controlador de jogo Arduino PS2 - Jogando Tekken com gamepad Arduino DIY: 7 etapas
Controlador de jogo DIY baseado em Arduino | Controlador de jogo Arduino PS2 | Jogando Tekken com DIY Arduino Gamepad: Olá pessoal, jogar é sempre divertido, mas jogar com seu próprio controlador de jogo DIY personalizado é mais divertido. Portanto, faremos um controlador de jogo usando arduino pro micro neste instructables
Controlador de jogo Arduino com luzes que respondem ao seu jogo Unity :: 24 etapas
Controlador de jogo Arduino com luzes que respondem ao seu jogo Unity :: Primeiro, escrevi isso em palavras. Esta é a primeira vez que uso instructable so sempre que digo: escreva código assim, saiba que estou me referindo à imagem no topo dessa etapa. Neste projeto eu uso 2 arduino ’ s para executar 2 bits separados
Como verificar se um jogo será executado em seu computador antes de comprar o jogo .: 4 etapas
Como verificar se um jogo pode rodar no seu computador antes de comprá-lo .: Adquiri recentemente o Call of Duty 4 de um amigo (de graça, devo acrescentar) porque não rodava no computador dele. Bem, o computador dele é relativamente novo e fiquei perplexo porque não funcionava. Depois de algumas horas de pesquisa na Internet, descobri