Este projeto foi requerido pela disciplina de circuitos digitais 2, a qual pertence a grade curricular do curso de Engenharia da Computação da Universidade Federal do Recôncavo da Bahia. O referente projeto encontra-se disponível neste repositório, dispondo de todos os códigos desenvolvidos no decorrer deste projeto.
O Pong é um jogo eletrônico de esporte em duas dimensões que simula um tênis de mesa.
Nele o jogador controla uma barra vertical presente no lado esquerdo da tela,
movendo-a verticalmente. O objetivo do jogo é fazer com que o jogador
usem a barra para acertar a esfera (bola) e mandá-la para o outro lado.
A placa utilizada para desenvolvimento do projeto Pong-FPGA foi a Altera
DE2-115. Após a
sintetização do projeto na placa, utiliza-se o switch 0 para dar inicio ao
jogo. O
controle da barra é realizado através do push-button 3, para movimento
vertical superior, e o push-button 2, para movimento vertical inferior.
O desenvolvimento do projeto teve inicio a partir da criação do controlador de vídeo VGA (Video Graphics Array), o qual, através do uso de contadores, gera o sincronismo de vídeo necessário para o posicionamento das imagens apresentadas no monitor. A Figura a seguir, apresenta o diagrama de blocos do projeto.
Esta etapa do projeto baseou-se na especificação do controlador para realizar o desenho das telas principais do jogo, a tela de apresentação e a tela de inicio do jogo. A resolução adotada para o projeto foi a de 640x480 pixels. Posteriormente se fez necessário definir as posições iniciais e finais, em coordenadas cartesianas (x,y), de cada elemento, textual e/ou gráfico e estabelecer os limites de movimento.
Para realizar o controle de movimento da barra foi desenvolvido
um módulo, chamado de movBola. Este módulo é responsável
por inicializar a barra nas coordenadas iniciais, bem como, realizar
extrair a informação de posicionamento dos elementos da barra, a fim
da reutilização nos módulos posteriores.
Para o controle da intensidade do movimento da barra, isto é, a quantidade
de incremento ou decremento vertical que a mesma terá, utiliza-se um módulo
contador. Ao pressionar o push-button o módulo contador emitir um sinal
positivo, indicando o incremento e/ou decremento.
Após a etapa de desenho do jogo em tela e geração dos movimentos individuais dos elementos do jogo, tornou-se necessário proporcionar interação entre estes elementos, de modo que, ao existir contato entre dois elementos, como por exemplo a bola e a barra, fosse produzida uma reação capaz de alterar o contexto atual do jogo.
A barra foi desenvolvida levando em consideração diferentes intervalos, sendo estes intervalos responsáveis por gerarem reações distintas na bola dada uma colisão, por exemplo, a parte superior da barra foi definida de modo que ao entrar em contado com a bola, fosse produzida uma alteração na orientação e sentido da bola, sendo assim direcionada à parede superior da arena.
A colisão entre a bola e a parede consta
da verificação do sentido da bola, ou seja, se a bola está se movendo da direita para esquerda, toda
colisão da bola com a parede superior, deve resultar no decremento das coordenadas y da bola,
semelhantemente, a colisão da bola com a parede inferior, deve resultar no incremento das
coordenadas
y da bola.
De maneira análoga, o resultado das colisões para a bola movendo-se no da esquerda para direita é:
incremento das coordenadas y da bola ao colidir com a barra inferior e decremento das coordenadas y
da
bola ao colidir com a barra superior.
Este jogo apresenta diferentes cenários possíveis. Mediante a posição em que a bola choca com a barra diferentes reações no que desrespeita ao movimento seguinte da bola poderá vir à acontecer. Entretanto este não é o único cenário possível, ao ocorrer uma colisão entre a bola e a parede, torna-se necessário avaliar o sentido ao qual a bola percorria no momento anterior, de modo que a configuração anterior produzirá impacto direto na reação seguinte. Visto a complexidade desta Arquitetura, abaixo segue a máquina de estado que rege as ações deste jogo, afim de facilitar o entendimento arquitetural do mesmo.
Ao percorrer a máquina de estados descrita acima é possível examinar todos os estados possíveis do jogo. Uma vez que cada estado possui pelo menos uma transição possível. Desta forma o resultado em termos visuais pode ser descrito da seguinte forma:
Os resultados obtidos através da síntese do projeto Pong-FPGA na placa Altera DE2-115, no que se refere ao uso dos recursos da placa, bem como, a pinagem oferecida pela mesma são: