Para praticar o que estamos aprendendo aqui no nosso Curso de Programação C, vamos nesta aula definir a estrutura do nosso CAMPO MINADO. Quais estruturas de dados usaremos e se será necessário criar algum novo tipo de dado.
Caso tenha perdido a aula anterior, aqui está o link: JOGO CAMPO MINADO Parte 1.
A primeira decisão que precisamos tomar é como representar nosso jogo campo minado, quais e quantas estruturas utilizar.
Como precisamos saber três informações sobre cada posição (se está aberta ou fechada, se é bomba ou não e a quantidade de bombas vizinhas) vamos criar uma estrutura chamada Celula.
typedef struct{
int eBomba;
int estaAberta;
int vizinhos;
}Celula;
Agora podemos criar uma matriz de células. Assim, cada posição da nossa matriz terá três campos. Esta matriz será uma variável global.
// variáveis globais Celula jogo[10][10]; int l, c, tam = 10;
Antes de iniciar nosso jogo precisamos inicializar nossa matriz, ou seja, dizer que:
– todas as posições estão fechadas;
– não há bombas;
– e zero bombas vizinhas.
// procedimento para inicializar a matriz do jogo
void inicializarJogo(){
for(l = 0; l < tam; l++){
for(c = 0; c < tam; c++){
jogo[l][c].eBomba = 0;
jogo[l][c].estaAberta = 0;
jogo[l][c].vizinhos = 0;
}
}
}
Com a matriz inicializada precisamos agora sortear bombas. Para isso vamos elaborar um procedimento que sorteia n bombas para nosso jogo campo minado. Como as coordenadas podem ser sorteadas mais de uma vez (se repetir), para garantir que sejam sorteadas exatamente n bombas verificamos se a coordenada sorteada já é uma bomba, se for, decrementamos a variável i, para que outra coordenada seja sorteada.
// procedimento para sortear n bombas
void sortearBombas(int n){
int i;
srand(time(NULL));
for(i = 1; i <= n; i++){
l = rand() % tam;
c = rand() % tam;
if(jogo[l][c].eBomba == 0)
jogo[l][c].eBomba = 1;
else
i--;
}
}
Código parcial em C para o Jogo Campo Minado
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
/*
Aula 178: Estrutura do Campo Minado
Código escrito por Wagner Gaspar
Abril de 2021
CELULA
eBomba 0 ou 1
estaAberta 0 ou 1
vizinhos 0 a 4
*/
typedef struct{
int eBomba;
int estaAberta;
int vizinhos;
}Celula;
// variáveis globais
Celula jogo[10][10];
int l, c, tam = 10;
// procedimento para inicializar a matriz do jogo
void inicializarJogo(){
for(l = 0; l < tam; l++){
for(c = 0; c < tam; c++){
jogo[l][c].eBomba = 0;
jogo[l][c].estaAberta = 0;
jogo[l][c].vizinhos = 0;
}
}
}
// procedimento para sortear n bombas
void sortearBombas(int n){
int i, bombas = 0;
srand(time(NULL));
for(i = 1; i <= n; i++){
l = rand() % tam;
c = rand() % tam;
if(jogo[l][c].eBomba == 0){
jogo[l][c].eBomba = 1;
bombas++;
}
else
i--;
}
}
// ------------------ CONTINUA NA AULA SEGUINTE -------------------
int main() {
inicializarJogo();
sortearBombas(20);
return 0;
}
