Nesta aula do nosso Curso de Programação C, a sexta parte do nosso jogo Campo Minado, vamos aprender como identificar vitória e derrota em nosso jogo Campo Minado.
JOGO CAMPO MINADO Parte 1
JOGO CAMPO MINADO Parte 2
JOGO CAMPO MINADO Parte 3
JOGO CAMPO MINADO Parte 4
JOGO CAMPO MINADO Parte 5
Para identificar vitória é necessário que esteja claro o que significa a vitória no Jogo Campo Minado. O jogador ganha no Campo Minado quando ele consegue abrir todas as posições que não são bombas. Assim, para saber se o jogador venceu, basta contarmos a quantidade de casas fechadas que não são bombas. Se esse valor for exatamente zero, então o jogador ganhou. É exatamente isso que faz a função a seguir.
/* função para verificar vitória (conta a quantidade de casas fechadas que não são bombas) n > 0 - não ganhou ainda 0 - ganhou */ int ganhou(){ int quantidade = 0; for(l = 0; l < tam; l++){ for(c = 0; c < tam; c++){ if(jogo[l][c].estaAberta == 0 && jogo[l][c].eBomba == 0) quantidade++; } } return quantidade; }
Vamos agora atualizar nosso procedimento jogar. A leitura de coordenadas e a abertura de cada coordenada precisa acontecer até que o jogador vença ou até que uma bomba seja aberta. Para isso, vamos colocar mais uma estrutura de repetição do tipo faça enquanto. Outra alteração é a retirada do procedimento imprimir do main, que agora ficará dentro desta nova repetição, para imprimir novamente o tabuleiro a cada nova coordenada digitada
Quando a repetição terminar, significa que ou o jogador ganhou ou ele abriu uma bomba. Usamos um if para descobrir o que aconteceu e imprimir uma mensagem na tela.
// procedimento jogar que faz a leitura das coordenadas void jogar(){ int linha, coluna; do{ imprimir(); do{ printf("\nDigite as coordenadas de linha e coluna: "); scanf("%d%d", &linha, &coluna); if(coordenadaEhValida(linha, coluna) == 0 || jogo[linha][coluna].estaAberta == 1) printf("\nCoordenada invalida ou ja aberta!"); }while(coordenadaEhValida(linha, coluna) == 0 || jogo[linha][coluna].estaAberta == 1); abrirCelula(linha, coluna); }while(ganhou() != 0 && jogo[linha][coluna].eBomba == 0); if(jogo[linha][coluna].eBomba == 1) printf("\n\tQue pena! Voce perdeu!!!\n"); else printf("\n\tPARABENS! VOCE GANHOU!!!\n"); imprimir(); }
Por fim, vamos alterar a função main, inserindo uma repetição para permitir ao jogador iniciar um novo jogo caso ele queira.
int main() { int opcao; do{ inicializarJogo(); sortearBombas(20); contarBombas(); printf("\n\t\t\tCAMPO MINADO\n"); jogar(); printf("\nDigite 1 para jogar novamente: "); scanf("%d", &opcao); }while(opcao == 1); return 0; }