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