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