aula 178

Estrutura do nosso CAMPO MINADO | Jogo Campo Minado Parte 2

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;
}

Deixe um comentário

4 + 19 =

Wagner Gaspar

Capixaba de São Gabriel da Palha, Espírito Santo. Bacharel em Ciência da Computação pela Universidade Federal do Amazonas e mestre em informática pela Universidade Federal do Espírito Santo.