diff --git a/main.c b/main.c index df9c8e5..66e7893 100644 --- a/main.c +++ b/main.c @@ -88,7 +88,7 @@ int main(int argc, char* argv[]){ printf("Digitado(%d %d)\n",x,y); // Pedir Jogada do Usuario - // Analisar jogada + // verificar e realizar jogada sair = realizarJogada(game, x, y, tableSize, bomba, vazia, &nJogada); if(sair == -1){ @@ -97,6 +97,10 @@ int main(int argc, char* argv[]){ // as the user if they want to continue playing before ending the game sair = askUser(); } + if(sair == -2){ + printf("%s Ganhou!\n",nomeJogador); + sair = askUser(); + } if(sair == -3){ break; } @@ -104,6 +108,7 @@ int main(int argc, char* argv[]){ // limpar jogo para reiniciar restartGame(game,tableSize,&nJogada); } + } while(1); diff --git a/minesweeper b/minesweeper index 28d2d6f..532a073 100755 Binary files a/minesweeper and b/minesweeper differ diff --git a/tGame.c b/tGame.c index 7aeed98..376dbea 100644 --- a/tGame.c +++ b/tGame.c @@ -132,11 +132,11 @@ int realizarJogada(tGame** g,int x, int y, int sz, char bomba,char vazia, int *j // verifica validade if(!((x >= 0 && x < sz) && (y >= 0 && y < sz))){ printf("Posicao invalida (FORA DO TABULEIRO)\n"); - return -2; + return -5; } else if(g[x][y].state == 1){ printf("Posicao invalida (JA ABERTA)!\n"); - return -2; + return -5; } else{ if(g[x][y].content == vazia){ @@ -148,7 +148,9 @@ int realizarJogada(tGame** g,int x, int y, int sz, char bomba,char vazia, int *j }else{ g[x][y].state = 1; } - + if(verificaVencedor(g,sz) == 1){ + return -2; + } // aumenta o numero de jogadas pois foi valida (*jogada)++; } @@ -156,6 +158,7 @@ int realizarJogada(tGame** g,int x, int y, int sz, char bomba,char vazia, int *j } void floodFillVazias(tGame** g, int sz, char bomba, char vazia, int x, int y){ + // Need some tweaking to be full-fledged functional if(x >= sz || y >= sz){ return; } @@ -165,10 +168,10 @@ void floodFillVazias(tGame** g, int sz, char bomba, char vazia, int x, int y){ if(g[x][y].state == 1){ return; } - if(g[x][y].content != vazia){ - return; + if(g[x][y].content == bomba || g[x][y].content != vazia){ + return; } - + g[x][y].state = 1; floodFillVazias(g, sz, bomba, vazia, x + 1, y); @@ -189,4 +192,15 @@ void restartGame(tGame** g, int sz, int* nJogada){ } } +} + +int verificaVencedor(tGame** g, int sz){ + // verifica se o jogador ganhou a partida; + + // contar o numero de bombas e subtrair do numero de posicoes disponiveis + // se o numero de posicoes abertas for igual a esse numero ele ganhou + + // nao precisamos nos preocupar com as bombas pois o jogo termina antes desse ponto + // caso tenha uma bomba aberta + return 0; } \ No newline at end of file diff --git a/tGame.h b/tGame.h index 92405d7..240b68e 100644 --- a/tGame.h +++ b/tGame.h @@ -32,6 +32,9 @@ void conta_bomba_position(tGame **g,int i,int j,int sz,char bomba); // reinicia o jogo para o estado inicial void restartGame(tGame** g, int sz, int* nJogada); +// verifica se o jogador ganhou a partida +int verificaVencedor(tGame** g, int sz); + // desaloca memoria alocada de uma tGame void freePosition(tGame* g);