aula 179

Quantidade de bombas na vizinhança | Jogo Campo Minado Parte 3

Dando continuidade a nosso curso de programação C e ao desenvolvimento do nosso jogo Campo Minado, vamos nesta aula contar a quantidade de bombas na vizinhança de cada posição do nosso campo minado.

JOGO CAMPO MINADO Parte 1
JOGO CAMPO MINADO Parte 2

Para descobrir a quantidade de bombas vizinhas à uma posição é necessário olhar para seus quatro vinhos, acima, abaixo, à direita e à esquerda. Para isso desenvolveremos algumas funções adicionais que ajudarão a resolver este problema.

A primeira função que desenvolveremos é para verificar se uma determinada coordenada é válida ou não. Imagine a posição 0 0. A coordenada acima seria -1 0. Contudo, esta coordenada é inválida. Precisamos prever isso. A função a seguir faz exatamente isso. Retorna 1 se a coordenada for válida e 0 caso contrário.

/*
    função que diz se um par de coordenadas é válido ou não
    1 - é válido
    0 - não é válido
*/
int coordenadaEhValida(int l, int c){
    if(l >= 0 && l < tam && c >= 0 && c < tam)
        return 1;
    else
        return 0;
}

Agora vamos implementar uma função para contar a quantidade de bombas na vizinhança de uma coordenada. A próxima função verifica os quatro vizinhos de uma coordenada, conta a quantidade de bombas e retorna este valor.

/*
    função que retorna a quantidade de bombas na vizinhança de l c
    n - quantidade de bombas
*/
int quantBombasVizinhas(int l, int c){
    /*  l - 1 e c
        l + 1 e c
        l e c + 1
        l e c - 1
    */
    int quantidade = 0;

    if(coordenadaEhValida(l - 1, c) && jogo[l-1][c].eBomba)
        quantidade++;
    if(coordenadaEhValida(l + 1, c) && jogo[l+1][c].eBomba)
        quantidade++;
    if(coordenadaEhValida(l, c + 1) && jogo[l][c+1].eBomba)
        quantidade++;
    if(coordenadaEhValida(l, c - 1) && jogo[l][c-1].eBomba)
        quantidade++;
    return quantidade;
}

Por fim, vamos agora implementar um procedimento que irá percorrer toda a matriz e, para cada posição, fará uso da função anterior para descobrir a quantidade de bombas na vizinhança daquela posição.

// procedimento para contar as bombas vizinhas
void contarBombas(){
    for(l = 0; l < tam; l++){
        for(c = 0; c < tam; c++)
            jogo[l][c].vizinhos = quantBombasVizinhas(l, c);
    }
}

Deixe um comentário

20 + 15 =

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.