Boa tarde, estou tendo dificuldade em implementar uma função ao meu jogo de campo minado onde calculo quantas bombas cada item da matriz esta tocando. Eu utilizo o numero 9 para representar as bombas em minha matriz, e todos os outros valores da matriz são nulos, mas devem subir de 1 em 1 de acordo com quantas bombas estão tocando. Ex.: PRINT.
Ate o momento apenas consegui fazer uma função que escaneia item por item da matriz e que quando encontra uma bomba, adiciona 1 a suas laterais e diagonais, mas mesmo assim o meu programa não parece fazer o desejado, sendo que varias vezes o numero não condiz com o numero de bombas. Gostaria de saber se existe alguma maneira de resolver isso. Agradeço desde já.
Segue o código.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define TAM 9
//variaveis gobais
//preview funcoes
void introducao();
void zeraMatriz(int campoMinado[9][9]);
void mostraMatriz(int campoMinado[9][9]);
void sorteiaBombas(int campoMinado[9][9]);
void calculaDicas(int campoMinado[9][9]);
void arrumaBombas(int campoMinado[9][9]);
//funcoes
void introducao() {
printf("*****************\n");
printf("** MINESWEEPER **\n");
printf("*****************\n");
}
void zeraMatriz(int campoMinado[9][9]) {
int i = 0, j = 0;
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
campoMinado[i][j] = 0;
}
j = 0;
}
}
void mostraMatriz(int campoMinado[9][9]) {
int i = 0, j = 0;
for (int i = 0; i < 9; ++i) {
for (int j = 0; j < 9; ++j) {
printf(" %d", campoMinado[i][j]);
}
printf("\n");
j = 0;
}
}
void sorteiaBombas(int campoMinado[TAM][TAM]) {
int i, j, bombas = 0;
while(bombas < 10) {
i = rand() % 9;
j = rand() % 9;
if(campoMinado[i][j] == 0){
campoMinado[i][j] = 9;
bombas++;
}
}
}
void calculaDicas(int campoMinado[TAM][TAM]) {
for (int i = 0; i < TAM; ++i)
{
for (int j = 0; j < TAM; ++j)
{
if (campoMinado[i][j] == 9)
{
campoMinado[i][j + 1]++;
campoMinado[i][j - 1]++;
campoMinado[i + 1][j]++;
campoMinado[i - 1][j]++;
campoMinado[i - 1][j + 1]++;
campoMinado[i + 1][j + 1]++;
campoMinado[i - 1][j -1]++;
campoMinado[i + 1][j - 1]++;
}
}
}
}
void arrumaBombas(int campoMinado[TAM][TAM]) {
for (int i = 0; i < TAM; ++i)
{
for (int j = 0; j < TAM; ++j)
{
if (campoMinado[i][j] > 9)
{
campoMinado[i][j] = 9;
}
}
}
}
int main() {
srand(time(NULL));
introducao();
int campoMinado[9][9];
zeraMatriz(campoMinado);
mostraMatriz(campoMinado);
printf("\n");
sorteiaBombas(campoMinado);
printf("\n\n");
mostraMatriz(campoMinado);
calculaDicas(campoMinado);
arrumaBombas(campoMinado);
printf("\n\n");
mostraMatriz(campoMinado);
//calculardicas
//mostrartabuleiro
//loop
//ler coordenadas
//ler abrir ou bomba
//se abrir
// -dica --> abrir apenas a casa
// -bomba --> morre
// -vazio --> abrir e analisar vizinhos ate a dica
//se marcar
// -marcar
//ate ganhar ou morrer
system("pause");
return 0;
}