MC613 - Laboratório de Circuitos Digitais Propostas de Temas para Projeto |
|
Lista de sugestões de projetos finais para MC613
A lista seguinte possui diversas sugestões para os projetos finais. As sugestões devem ser estendidas para uma sugestão mais completa e formal. A sugestão mais completa deve ser enviada para o seu professor COM CÓPIA PARA O(s) MONITOR(es). Observe as regras para envio de emails para evitar que seu email seja classificado como spam. A sugestão deve estar em PDF e deve acompanhar a fonte (em texto puro ou OpenOffice; seu professor deve passar recomendações específicas para sua turma).
Cada projeto pode ser alocado somente para UM grupo. A ordem de chegada das propostas será o critério de desempate caso mais de um grupo solicite o mesmo projeto.
Observações:
Em todos os projetos do tipo jogo, o aluno deve implementar pensando na “jogabilidade” e no interesse do jogo;
Nos jogos com duas placas, cuidados especiais devem ser tomados com a comunicação entre as placas nos aspectos elétrico e sincronismo;
Em todos os projetos do tipo jogo, deve ser implementadas as funções iniciar, contabilizar a situação e sinalizar o final e vencedor quando aplicável;
A placa não possuem suporte a sinais analógicos (tanto entrada como saída);
Se for necessário hardware extra (incluindo flat-cables), solicite com antecedência ao monitor.
1- Pong
Clássico jogo onde os jogadores controlam um PAD com movimento vertical, um em cada extremo da tela (direita e esquerda). Um bola é rebatida pelos PADs e marca ponto quem conseguir acertar a bola na extremidade adversária. O ângulo de rebatida depende do ângulo de chegada da bola no PAD e da posição do PAD utilizada para rebater a bola. Ganha o primeiro adversário a atingir 7 pontos.
2- Snakes
Clássico jogo da "cobra". O jogador controla uma cobra que anda sem parar pelo tabuleiro através de dois comandos: virar para a direita e virar para a esquerda. Aleatoriamente aparecem maçãs na tela. Ao passar por uma maçã, uma nova maçã é posicionada aleatoriamente (para manter o número fixo de maçãs) e a cobra cresce uma unidade. O jogo acaba quando a cobra tocar uma das bordas do tabuleiro. A pontuação é calculada com base no número de maçãs comidas, o tempo que foi gasto e a velocidade da cobra (que pode ser fixa no início ou alterável de acordo com o número de maçãs).
3- Boliche
Contador automático de placar de boliche. Pode-se ter de um a seis jogadores, com jogadas alternadas. Na sua jogada, o jogador entra com os pinos derrubados através de dez dip-switches e confirma com o pressionando o push-button. O contador atualiza o placar automaticamente e faz a contagem de pontos de acordo com as regras. Ao detectar um strike, os LEDs do display circulam por inteiro (segmentos a-b-c-d-e-f) e ao detectar um spare, parcialmente (segmentos a-b-g-f), por dois segundos. O contador deve indicar de qual jogador é a vez e qual das duas jogadas ele está jogando, além de qual turno o jogo está (de um a dez). Ao final o contador mostra a pontuação em ordem decrescente, do vencedor ao último jogador.
4- Controlador de Elevador
O controlador de elevador pode controlar um elevador para um prédio de exatamente oito andares. Cada andar possui botões de chamada independentes para subida e descida, indicado por dois dip-switches cada. O controlador deve mostrar o andar corrente do elevador, o estado do motor (subindo, descendo ou parado), os andares esperando para serem atendidos (LEDs) e possuir um sensor de abertura de porta (chave que enquanto acionada não permite que o elevador ande). A implementação deve ser modular para permitir que outros controladores sejam ligados entre si e possam coordenar o funcionamento.
Teclado Musical
O teclado musical simula o comportamento de um instrumento, tocando uma nota para cada tecla pressionada no mesmo. O projeto deve suportar pelo menos duas oitavas, sustentar a nota enquanto a tecla estiver pressionada e permitir ao menos duas vozes (duas teclas pressionadas ao mesmo tempo). É necessário um hardware específico (buzzer) que será fornecido pelo professor.
5- Traçador de retângulos
Utilize o mouse e o monitor para traçar retângulos na tela. O usuário clica com o botão em um dos cantos e arrasta até formar o retângulo desejado. Ao clicar novamente, o mesmo é fixado na tela indefinidamente, sobrescrevendo outros retângulos que por ventura estejam na tela (somente as áreas sobrepostas). Outra opção é manter apenas um triângulo na tela a cada momento, mas desta forma é exigido um tracejado indicando a posição do novo triângulo enquanto se movimenta o mouse. Em ambos os projetos a tela deverá ser renderizada on-the-fly.
6- BreakOut
O jogo consiste de um PAD horizontal inferior controlado pelo jogador (direita e esquerda). Uma bola é rebatida pelo PAD e atinge tijolos posicionados na parte superior da tela. O ângulo de rebatida depende do ângulo de chegada da bola no PAD e da posição do PAD utilizada para rebater a bola. Cada tijolo atingido pela bola some da tela e é contabilizado como ponto. O jogador não pode deixar a bola escapar para a borda horizontal inferior ou perderá uma vida. O jogo termina quando o jogador perder as três vidas disponíveis e caso o jogador destrua todos os triângulos, o jogo recomeça com velocidade dobrada.
7- Space Invaders
Jogo onde o jogador controla uma nave com movimento horizontal inferior com possibilidade de atirar. As naves inimigas movimentam-se a partir da borda superior, com movimentos alternados horizontais e verticais. O jogo termina se as naves inimigas conseguirem chegar ao solo (nível da nave do jogador). Cada tiro que acerte uma nave inimiga elimina-a do jogo. A pontuação é baseada no tempo gasto para eliminar todas as naves.
8- TetrisJogo clássico de tetris, com sete tipos de peças (tetraminos). A pontuação é o número de linhas eliminadas e o jogo só termina se as peças acumuladas atingirem o topo da pilha. O jogador pode rotacionar ou mover horizontalmente (direita e esquerda) as peças.
9- Velha
Clássico jogo da velha. O jogador utiliza o mouse para marcar sua opção no monitor. O jogo deve permitir escolher qual jogador começa e jogar contra outro ser humano em turnos ou contra uma IA, que obrigatoriamente deve ganhar sempre que possível (o jogo da velha é determinístico).
10- Controlador de máquina de café
Este controlador permite a entrada de uma opção entre várias (pelo menos três receitas diferentes, ex: café, capuccino e chocolate), cobrar corretamente, devolver o troco e disparar a preparação do café. A máquina aceita qualquer quantia de cédulas e moedas (até R$10,00) e devolve o troco somente em moedas, que devem estar disponíveis na máquina (a quantidade inicial pode ser pré-gravada na memória mas a quantidade correta deve ser mantida mesmo após o reset). A preparação envolve abrir o bico correspondente pelo tempo correto (ex. para preparar um café com leite de 300ml deve-se disparar os bicos de café e de leite durante 5s, se a vazão dos bicos for de 30ml/s).
11- Campo minado
Clássico jogo do windows. O objetivo do jogo é desativar todas as minas de um campo minado. Para tanto o jogador deverá encontrar todas as minas sem 'clicar' em nenhuma, ou seja, deverá descobrir todos os locais onde não há bomba. Locais já limpos indicam quantas bombas existem ao seu redor (1, 2, 3, 4). Uma mina é descoberta quando todos os espaços limpos ao seu redor são expostos. O jogo termina quando todas as minas são descobertas. Para esse jogo será utilizado uma placa UP2 com mouse e tela.
12- Memória
Jogo clássico de salão, em que cada jogador tenta identificar onde estão as duplas de cartas de baralho dispostas com a face para baixo em um quadrado. Cada acerto conta um ponto e a cada erro as cartas são
escondidas novamente. A implementação na UP2 deve usar números coloridos (o número ou o fundo da célula) e mostrá-los no monitor. Alternativas a serem configuradas: número de cartas, número de jogadores, forma de representação (apenas número, apenas cor (8 combinações) ou número e cor). Mostrar pontuação e identificar jogador que deve jogar e o vencedor no final.
13- Balístico
O jogo consiste de um canhão com controle do ângulo de tiro (de 0 a 85°) e da velocidade da bala. O canhão fica disposto no canto inferior esquerdo do monitor. Há um obstáculo (muro) vertical no meio do monitor e o alvo fica no lado direito. Após cada tiro o alvo é mudado de local aleatoriamente (horizontal e vertical). Há um vento horizontal definido aleatoriamente antes de cada tiro e cujo valor é mostrado para o jogador calibrar o tiro. Mostrar contagem de acertos e erros. O movimento da bala deve ser o mais natural possível (velocidade e formato parabólico. Controles: canhão (ângulo e velocidade) em dipswitches e disparo em push button. Display no monitor. Opcional: uso do teclado para controle.
14- Batalha naval
Cada jogador tem uma placa, um monitor e um mouse. As placas devem se comunicar para sinalizar a posição do tiro e para responder resultado (água ou acerto). Os monitores devem mostrar a configuração inicial do jogador no lado esquerdo e o resultado dos tiros nos navios do adversário no lado direito. A configuração inicial pode ser carregada de um arquivo (mais fácil) ou pode ser carregada no início do jogo (mais complexo).
15- Palitinho (porrinha)
O jogo deve implementar o popular porrinha, onde cada pessoa pode apresentar na mão fechada (escondido) de 0 a 3 palitos e cada jogador chuta o número total de palitos em todas as mãos. Os chutes não podem ser repetidos. A ordem dos chutes (prioridade) circula entre os jogadores de jogada em jogada. Implementação: cada jogador tem uma placa, as placas se comunicam entre si. Além disso, cada jogador tem um monitor e mouse onde ele pode escolher quantos palitos quer jogar e também escolher (com o mouse) que chute ele fará. O sistema deve sinalizar no monitor quando é a vez do jogador chutar e deve desabilitar os chutes já feitos para evitar repetições. Deve mostrar também o placar geral.
16- Gerador de Lissajous
O objetivo é gerar no monitor as figuras de Lissajous normalmente geradas em osciloscópio em que a variável x recebe um sinal periódico com freqüência fx (por exemplo senoidal, onda quadrada, dente de serra etc) e a variável y recebe outro sinal também periódico com freqüência fy. As freqüências fx e fy devem ser múltiplas de inteiros nx e ny. Por exemplo, para desenhar um formato parecido com um dígito 8 podemos definir nx=2 e ny=1. Implementação: placa e monitor. Nos dipswitches, definir nx, ny e o tipo do sinal em x e em y.
17- Gerador de fractal
Fractais são formas geométricas em que há um módulo inicial e pequeno definido arbitrariamente e a imagem geral é construída a partir deste módulo de forma recursiva. O aluno deve procurar na web maiores informações e propor ao professor uma implementação. A implementação deve permitir que se escolha a semente ou forma inicial.
18- Genius
Implementar o jogo Genius que era popular a algumas décadas atrás. Implementação: placa, monitor e mouse. O sistema apresenta para o jogador o display típico do Genius (círculo com 4 quadrantes cada um com uma cor) e apresenta uma cor. O jogador pressiona a cor que foi mostrada. Em seguida o sistema apresenta a cor nº 1 seguida de outra gerada aleatoriamente. O jogador tenta reproduzir a seqüência. E assim por diante, até que o jogador erre a seqüência.
19- Morse
Este projeto consiste em implementar um decodificador de código morse. O usuário entra com uma mensagem em código morse através do push-button. A cada caractere entrado, o caracter correspondente é mostrado no monitor. O sistema deve ser robusto suficientemente para permitir que qualquer pessoa o opere sem confundir o traço com o ponto (não é permitido fixar o tamanho do pulso, por exemplo).
20- Enduro
Clássico jogo de corrida da plataforma ATARI (com algumas modificações). O jogo consiste de um carrinho com a posiçao fixa no centro da tela . A pista se move simulando curvas e retas. Os possíveis comandos para o carrinho são: virar para a direita (o carro se inclina para a direita e a pista se move para a esquerda), virar para a esquerda, acelerar (a pista “passa” mais rápido) , frear (pista “passa” mais devagar). O jogador começa com uma pontuação Y, a cada batida o jogador perde um ponto. O jogo termina depois de X minutos (deve ser mostrado na tela o tempo atual de jogo).
Bónus: implementar obstáculos na pista. Usar teclado. ?
Exemplos de possíveis situações.
• || ||
• || ||
• || 0=0 ||
• || |M| ||
• || 0=0 ||
• || ||
• || ||
• (reta)
• || ||
• || ||
• || 0=0 ||
• || |M| ||
• || 0=0 ||
• || ||
• || ||
• (curva a direita)
|| ||
|| ||
|| 0=0 ||
|| |M| ||
|| 0=0 ||
|| ||
|| ||
(virando para a direita em uma reta)
21- Truco
Clássico jogo de cartas. O jogo será disputado por dois jogadores (utilizar duas placas), cada um com apenas uma tela. A tela de cada jogador deve mostrar suas cartas atuais, assim como a “vira”. Deve ser possível a visualização dos pontos atuais da rodada e o número de rodadas ganhas por cada jogador. Implementar a opção de trucar (3, 6, 9, 12 pontos). Usar teclados.
22- Boxe
Simulação de uma partida de Boxe em 2D (vista superior). O jogo consiste em dois lutadores em um ringue. Para tal implementação será necessário duas placas e uma tela. Cada lutador pode executar os seguintes movimentos: andar para frente, para trás, esquivar para a direita, para a esquerdar, rotacionar 90 graus para direita, rotacionar 90 graus para esquerda e golpear. A cada golpe desferido com sucesso o jogador ganha um ponto. O jogo termina depois de X minutos (deve ser mostrado na tela o tempo atual de jogo), ganha quem fez mais pontos.
Exemplos de possíveis situações.
======================
• || ||
• || ||
• || xox ||
• || ||
• || ||
• || xox ||
• || ||
====================== ?
======================
• || ||
• || ||
• || ||
• || ox ||
• || I ||
• || xox ||
• || ||
======================
(jogador golpeando o adversário)
23- Futebol de Robôs
Simulação de uma partida de futebol entre dois robôs em 2D (vista superior). Para tal implementação será necessário duas placas e uma tela. Cada lutador pode executar os seguintes movimentos: andar para frente, para trás, para a direita, para a esquerdar, rotacionar 90 graus para direita, 90 graus para esquerda e chutar. O jogo termina depois de X minutos (deve ser mostrado na tela o tempo atual de jogo), ganha quem fez mais gols. ?
Exemplos de possíveis situações.
======================
• || ||
• || ||
• || ||
• > o <
• || ||
• || ||
• || ||
=====================
======================
• || ||
• || ||
• || ||
• > - - - o
• || ||
• || ^ ||
• || ||
======================
(Gol) ?
24- Type to Shoot (Datilografia)
O objetivo deste jogo é testar a habilidade do jogador em digitar rapida e
corretamente as teclas do teclado. A tela principal do jogo deve mostrar letras
aleatórias caindo, com quantidade e velocidade de queda crescentes com a fase do jogo. O
jogador deve pressionar as teclas destruindo a imagem da letra correspondente antes que a
letra atinja o "chão". Para cada fase, o jogo deve contabilizar e mostrar o
número total de acertos e o número total de erros. Opcionalmente, pode mostrar o número
de teclas certas por unidade de tempo (carac/seg). O aluno deve propor um critério
razoável para que uma fase seja concluída (por exemplo, número total de letras ou tempo
transcorrido), assim como o critério de sucesso (passar para a próxima fase) ou fracasso
(perdeu o jogo). Os critérios para fase podem ser mútiplos, por exemplo, critério para
fracasso pode ser tempo esgotado com acertos abaixo de determinado limite, ou pode ser
número de erros acima de determinado limite. É importante penalizar os erros para evitar
que o jogador fique pressionando várias teclas ao acaso. A implementação do jogo pode
ser feita apenas com o teclado e o monitor. Opcionalmente, podem ser acrescentados efeitos
sonoros ao jogo. O uso de letras isoladas, palavras, maiúsculas, números ou outros
caracteres especiais fica a critério da implementação do aluno. Ver implementação em
flash em http://www.phoboslab.org/ztype/
25- Corrida de vetores (Vector Racing)
Este jogo simula a corrida de varios carros em uma pista sobre um campo quadriculado. Os jogadores jogam cada um por vez, escolhendo a aceleração que desejam aplicar ao seu carro (intensidade 0 ou 1 grid e 8 possibilidades de sentido/direção, acima/abaixo/esquerd/direita/45 graus). O jogo pode ser jogado com papel quadriculado e canetas coloridas e era muito popular nas escolas de Engenharia no século passado. A implementação para este curso pode basear-se nas descrições nos sites abaixo (o último link é uma versão online):
26- Gerador de FFT (Fast Fourier Transform) em tempo real
Gerar a transformada rápida de Fourier (FFT) de sinal análogico da entrada de áudio. Mostrar o resultado no monitor como um analisador de espectro, em tempo real. Em um primeiro momento, o projeto pode ser feito em duas etapas ou por duas equipes: uma faz a FFT e outra o processamento gráfico.
27- Conversor para VGA com imagem em alta resolução baseada em sprites
Gerado de sinais para a VGA em alta resolução, sem uso exaustivo de memória de video,
como o VGA_CON. O conversor pode ter 2 layers. O layer de fundo, ou estático, é gerado
sobre uma matriz de espaços retangulares, onde cada retângulo tem área e aspecto de
sprites armazenados em banco de sprites (podem ser, por exemplo, caracteres, ou módulos
de figuras). As dimensões da matriz devem ser parametrizáveis. O conversor deve ler
consultar o banco de sprites para cada posição XY do feixe do monitor e enviar para ele
os bits adequados em tempo real e de acordo com a sincronização do monitor. Um segundo
layer, de frente, é composto também por um ou dois sprites que podem ser mover de acordo
com uma posição XY especificada por dispositivo externo (mouse ou teclado, ou botões da
placa) ou interno (variáveis internas do programa, contadores, etc). Este conversor
poderia ser usado pela maioria dos demais projetos, com a vantagem de ter resolução
melhor do que o obtido pelo VGA_CON sem usar exaustivamente a memória interna da FPGA.
28- Jogo 2048
29- Ant Brain
(modificado em 07/jun/2016