Skip to content

Jogo St. Charles Racing em Assembly com extensão do processador para a disciplina de Organização de Computadores.

License

Notifications You must be signed in to change notification settings

MatheusPaivaa/StCharles_Racing

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

31 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Saint Charles Racing 🗄️💻

Projeto da disciplina SCC0240 - Bases de Dados

Estrutura do ProjetoInstalaçãoUsoPontos importantesProcessadorVídeoContribuiçãoLicençaAgradecimentos

Este projeto tem como objetivo implementar o jogo "St. Charles Racing", utilizando o Assembly do processador desenvolvido pelo professor Simões, no contexto da disciplina de Prática em Organização de Computadores. Além de codificar o jogo, foi projetada e implementada uma nova funcionalidade para o processador, ampliando suas capacidades e explorando os desafios do desenvolvimento em baixo nível. Este trabalho visa demonstrar a integração entre a criação de software para sistemas embarcados e a extensão de funcionalidades de hardware, proporcionando uma experiência prática em organização de computadores e programação em Assembly.

Estrutura do Projeto

Abaixo está a estrutura do projeto com uma breve explicação do conteúdo de cada pasta:

  • imgs/
    Contém as imagens utilizadas no README para ilustrar e documentar o projeto.

  • assets/
    Armazena os arquivos .asm referentes ao personagem principal e aos inimigos do projeto.

  • src/
    Contém o arquivo .asm principal do projeto, onde está o código-fonte central.

  • tools/
    Guarda as ferramentas necessárias para o desenvolvimento e teste do projeto, incluindo o montador, o simulador e o charmap.

Instalação

1. Clonar o Repositório

Para obter o projeto em sua máquina, execute:

git clone https://github.com/MatheusPaivaa/StCharles_Racing.git
cd StCharles_Racing

2. Utilizando o Makefile

Abaixo estão os comandos disponíveis para compilar, executar e gerenciar o projeto:

  • Compilar o projeto
    Gera o arquivo .mif compilado.

    make
  • Executar o simulador
    Roda o programa no simulador.

    make run
  • Compilar e executar em modo de desenvolvimento
    Compila o código e executa o simulador.

    make dev
  • Empacotar o projeto
    Cria um arquivo .zip com todos os arquivos do projeto.

    make zip
  • Limpar os arquivos gerados
    Remove a pasta bin/ e o arquivo .zip.

    make clean

3. Pré-requisitos

Certifique-se de ter o Make, montador e simulador configurados corretamente no ambiente. Para mais detalhes, consulte o repositório Processador-ICMC.

Uso

Variáveis Principais

  • dif: var #1
    Armazena a dificuldade do jogo, podendo ser ajustada para 1 (fácil), 2 (médio) ou 3 (difícil).

  • posCarro: var #1
    Contém a posição atual do personagem principal.

  • posAntCarro: var #1
    Contém a posição anterior do personagem principal.

  • Inimigos
    Cada inimigo possui variáveis individuais para sua posição e velocidade:

    • posInimigoX: Contém a posição atual do inimigo X (onde X = 1, 2, 3, 4).
    • posAntInimigoX: Contém a posição anterior do inimigo X.
    • velInimigoX: Contém a velocidade do inimigo X.
  • score: var #1
    Armazena a pontuação atual do jogador.


Código Principal

  1. Tela Principal (main)
    A função principal do jogo realiza as seguintes ações:
    • Exibe a tela inicial com as opções:
      • 1: Iniciar o jogo
      • 2: Configurar a dificuldade
      • 3: Sair
    • Aguarda a entrada do usuário e direciona para a função correspondente.

Funções Importantes

  1. startGame
    Inicia o jogo:

    • Apaga a tela principal e imprime o mapa principal.
    • Inicializa os inimigos e o personagem principal.
    • Define os contadores de pontuação e velocidade.
    • Entra no loop principal de controle do jogo:
      • Move o personagem (com base na entrada do teclado).
      • Move os inimigos verticalmente.
      • Ajusta a pontuação e a dificuldade com o tempo.
      • Detecta colisões.
  2. inicializaInimigos
    Configura a posição inicial e a velocidade dos 4 inimigos.

  3. ajustarVelocidades
    Ajusta a velocidade dos inimigos de acordo com a dificuldade escolhida pelo jogador.

  4. MoveCarro
    Controla o movimento do personagem principal.

    • MoveCarro_RecalculaPos: Recalcula a posição do personagem com base na entrada de teclado ('a' para esquerda, 'd' para direita).
    • Apaga a posição anterior e redesenha o personagem.
  5. MoveInimigoX
    Controla o movimento vertical de cada inimigo:

    • Move o inimigo para baixo.
    • Quando o limite da tela é atingido, reposiciona o inimigo no topo.
  6. DetectaColisao
    Detecta colisões entre o personagem principal e os inimigos:

    • Utiliza vetores de sobreposição para verificar posições.
  7. rotinaDerrota
    Aciona a tela de derrota quando ocorre uma colisão:

    • Exibe a pontuação final.
    • Permite reiniciar o jogo ou retornar ao menu principal.
  8. config
    Tela de configuração onde o jogador pode ajustar a dificuldade:

    • 1: Fácil
    • 2: Médio
    • 3: Difícil
    • 4: Voltar ao menu principal.

  1. ApagaTela
    Apaga a tela atual.

  2. prinTela
    Imprime a tela com base em um mapa armazenado na memória.

  3. PrintPontos e Pontua
    Atualizam e imprimem a pontuação do jogador.

  4. Delay
    Adiciona um atraso para suavizar os movimentos no jogo.


Fluxo Geral do Jogo

  1. O jogador inicia o jogo na tela principal e escolhe uma das opções.

  1. Ao iniciar o jogo:
    • O personagem pode se mover horizontalmente usando 'a' e 'd'.
    • Os inimigos descem verticalmente.
    • A velocidade aumenta conforme a dificuldade e o tempo.
  2. O sistema detecta colisões entre o personagem e os inimigos.

  1. Caso ocorra uma colisão, o jogo exibe a tela de derrota com a pontuação final.
  2. O jogador pode reiniciar ou sair do jogo.

Pontos importantes

Nesta seção, destacamos algumas informações essenciais sobre o desenvolvimento do projeto e as ferramentas utilizadas.

1. Criação dos Cenários

Para facilitar a criação dos cenários utilizados no jogo, foi utilizado o repositório Create-Screens-in-Assembly-with-Python, que permite gerar telas em Assembly por meio de scripts em Python.

Essa ferramenta foi fundamental para agilizar o processo de construção e organização das telas, garantindo uma implementação eficiente e visualmente estruturada no código-fonte.


2. Funcionamento do Processador, Montador e Simulador

Todas as informações relacionadas ao processador utilizado no projeto, bem como seu montador e simulador, podem ser encontradas no repositório:
Processador-ICMC.

Este repositório fornece:

  • Detalhes sobre o funcionamento do processador.
  • Documentação completa do montador e do simulador.
  • Exemplos e instruções de uso para implementar e testar códigos Assembly.

Esses recursos foram essenciais para o desenvolvimento do jogo, fornecendo tanto ferramentas práticas para criação dos cenários quanto uma base sólida para a execução e teste do projeto.

Processador

Este processador foi desenvolvido com base nas aulas do Professor Simões e implementado utilizando o software Quartus. Para executar o processador corretamente, siga os seguintes passos:

Passos para Execução

  1. Escreva o programa normalmente utilizando o editor de texto, salvando-o no formato .ASM.
  2. Utilize a tecla F7 para montar o arquivo binário (.MIF) e simular seu funcionamento antes de compilá-lo no Quartus.
  3. Renomeie o arquivo gerado (nome.MIF) para CPURAM.MIF.
  4. Copie o arquivo CPURAM.MIF para a pasta do projeto no Quartus.
  5. Compile o projeto dentro do Quartus.
  6. Programe a placa e reinicialize-a para garantir o correto funcionamento.
  7. Altere a entrada do monitor para VGA para visualizar a execução corretamente.

Imagens de Funcionamento

Abaixo, algumas imagens do processador em execução. Todos os arquivos necessários estão disponíveis na pasta processador deste repositório.

Obs: Ao passar o jogo do Simulador para a FPGA tivemos que diminuir o delay entre os movimentos (do nosso personagem, inimigos e score), isso pode mudar de jogo para jogo. No nosso caso, diminuimos para um delay de 40 e um decrementador de 10.

Vídeo de apresentação

Link: Vídeo

Contribuição

Contribuições são bem-vindas! Por favor, faça um fork do repositório e envie um pull request com suas alterações.

Licença

Este projeto está licenciado sob a Licença MIT. Veja o arquivo LICENSE para mais detalhes.

Agradecimentos

Gostaríamos de agradecer a Eduardo Valle Simões, o Poderoso, pela sua orientação e apoio ao longo deste projeto.

Alunos

  • Matheus Paiva Angarola - 12560982 (Github)

About

Jogo St. Charles Racing em Assembly com extensão do processador para a disciplina de Organização de Computadores.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published