https://github.com/rafinhadufluxo/campominado
minesweeper game made in risc v-32
https://github.com/rafinhadufluxo/campominado
assembler assembly-language campo-minado risc-v riscv64 student-project
Last synced: about 1 month ago
JSON representation
minesweeper game made in risc v-32
- Host: GitHub
- URL: https://github.com/rafinhadufluxo/campominado
- Owner: rafinhadufluxo
- Created: 2021-04-01T19:46:51.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2021-10-21T18:23:51.000Z (over 3 years ago)
- Last Synced: 2025-02-17T14:11:44.965Z (4 months ago)
- Topics: assembler, assembly-language, campo-minado, risc-v, riscv64, student-project
- Language: Assembly
- Homepage:
- Size: 38.1 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Trabalho de Campo Minado
### Descrição do trabalho
Implemente um programa que permita ao usuário jogar Campo Minado.
O programa deve ser implementado utilizando o conjunto de instruções RV32I e RV32M do RISC-V e deve ser executado no simulador RARS.
O programa permite ao usuário jogar campo minado em um 'tabuleiro' de 8x8. Internamente o tabuleiro é uma matriz (chamada campo) com tamanho fixo de 8x8 e é composta de números inteiros a qual deve ser inicializada com zeros pelo programador. A matriz campo representa as posições do campo minado, onde cada posição (linha x coluna) pode ou não conter uma bomba.
O programa deve ser implementado com uma função principal (main) e pelo menos duas outras funções:
- função calcula_bombas com o seguinte protótipo:
void calcula_bombas(int * campo[], int num_linhas);
- função mostra_campo (cada aluno pode definir o protótipo da mesma);
Os parâmetros de calcula_bombas devem ser passado nos registradores a0 e a1, respectivamente.
Após inicializar as variáveis de controle o programa deve chamar uma função chamada insere_bombas, com o seguinte protótipo:
void insere_bombas(int * campo[], int num_linhas);
A função insere_bombas não precisa ser codificada pelo aluno pois será fornecida pelo professor. Os parâmetros de insere_bombas deve ser passado nos registradores a0 e a1, respectivamente. Esta função colocará as bombas na matriz campo.
As bombas são representadas pelo valor 9 armazenado na posição (linha x coluna). Assim, na matriz campo as cadas que possuirem o valor 9 possuem bomba naquela posição. O programa deve permitir inserir bandeiras nas casas (linha x coluna) impmpedindo que a casa seja aberta posteriormente (no caso, abrir o campo naquela posição).
O programa deve apresentar uma interface que permite ao usuário (a) abrir uma posição (mostrar o número de bombas presentes no entorno) e (b) inserir uma bandeira ou retirar uma bandeira em uma posiçção. Após escolher entre as opções (a) ou (b) o usuário deve digitar o número da linha e da coluna que pretende jogar (bandeira ou abrir a posição, conforme escolha anterior).
Caso tenha uma bomba na posição jogada o programa deve indicar que uma bomba explodiu e o usuário perdeu (mostrando na interface a própria matriz campo, com a quantidade de bombas no entorno das posições, as posições das bombas e as posições das bandeiras); Caso não tenha uma bomba naquela posição o programa deve mostrar a situação do campo (mostrando a quantidade de bombas no entorno das posições já jogadas e as bandeiras já colocadas); Caso a posição escolhida para abrir tenha uma bandeira uma mensagem informado que a posição não pode ser aberta (jogada inválida).
### Dicas e exemplo:
- Logo após a chamada da função insere_bombas chamar a função calcula_bombas para realizar a contagem de bombas vizinhas em cada posição e armazenar na matriz campo esta informação (veja figura abaixo);
- Utilizar a matriz campo para o controle e uma outra matriz para a interface com o usuário;
- Sinalizar as bandeiras inseridas somando 10 na quantidade de bombas na matriz campo;
- A cada jogada do usuário fazer as marcações apropriadas na matriz campo e na matriz da interface, por exemplo, copiando a quantidade de bombas da matriz campo para a matriz interface, na posição da jogada; somando 10 na posição onde a bandeira foi colocada e colocando a letra F na matriz da interface, etc;