Commit d8c00f57 authored by Erwan's avatar Erwan

Fonction pour récupérer les voisins a part et gestions dévoiler les cases à 0...

Fonction pour récupérer les voisins a part et gestions dévoiler les cases à 0 mine à proximité d'une case à 0 mine
parent 551ab3c1
...@@ -4,9 +4,10 @@ ...@@ -4,9 +4,10 @@
#include <stdbool.h> #include <stdbool.h>
#include <conio.h> #include <conio.h>
#define SIZE_OF_HEX 40 #define SIZE_OF_HEX 20
struct celluleDemineur{ struct celluleDemineur{
int line, column;
bool hasMine; bool hasMine;
int nearbyMine; int nearbyMine;
Vector2 pos; Vector2 pos;
...@@ -30,23 +31,56 @@ void afficherGrilleConsole(int nbLigneMatrice, int nbColonneMatrice, CelluleDemi ...@@ -30,23 +31,56 @@ void afficherGrilleConsole(int nbLigneMatrice, int nbColonneMatrice, CelluleDemi
} }
} }
void incrementationVoisinMine(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice){ CelluleDemineur* recupererVoisins(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice){
CelluleDemineur* tabVoisins = calloc(6, sizeof(struct celluleDemineur));
for(int i=0; i<6; i++){
tabVoisins[i] = NULL;
}
bool linePrev = (line-1 >= 0), colPrev = (column-1 >= 0); bool linePrev = (line-1 >= 0), colPrev = (column-1 >= 0);
bool lineNext = (line+1 < nbLigneMatrice), colNext = (column+1 < nbColonneMatrice); bool lineNext = (line+1 < nbLigneMatrice), colNext = (column+1 < nbColonneMatrice);
if(colPrev){matriceMines[line][column-1]->nearbyMine++;} if(colPrev){tabVoisins[0] = matriceMines[line][column-1];}
if(colNext){matriceMines[line][column+1]->nearbyMine++;} if(colNext){tabVoisins[1] = matriceMines[line][column+1];}
if(linePrev){matriceMines[line-1][column]->nearbyMine++;} if(linePrev){tabVoisins[2] = matriceMines[line-1][column];}
if(lineNext){matriceMines[line+1][column]->nearbyMine++;} if(lineNext){tabVoisins[3] = matriceMines[line+1][column];}
if(line%2 == 0){ if(line%2 == 0){
if(linePrev && colNext){matriceMines[line-1][column+1]->nearbyMine++;} if(linePrev && colNext){tabVoisins[4] = matriceMines[line-1][column+1];}
if(lineNext && colNext){matriceMines[line+1][column+1]->nearbyMine++;} if(lineNext && colNext){tabVoisins[5] = matriceMines[line+1][column+1];}
}else{ }else{
if(linePrev && colPrev){matriceMines[line-1][column-1]->nearbyMine++;} if(linePrev && colPrev){tabVoisins[4] = matriceMines[line-1][column-1];}
if(lineNext && colPrev){matriceMines[line+1][column-1]->nearbyMine++;} if(lineNext && colPrev){tabVoisins[5] = matriceMines[line+1][column-1];}
}
return tabVoisins;
}
void incrementationVoisinMine(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice){
CelluleDemineur* voisins = recupererVoisins(line, column, matriceMines, nbLigneMatrice, nbColonneMatrice);
for(int i=0; i<6; i++){
if(voisins[i] != NULL){
voisins[i]->nearbyMine++;
} }
}
free(voisins);
}
void revelerVoisinsAZero(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice){
CelluleDemineur* voisins = recupererVoisins(line, column, matriceMines, nbLigneMatrice, nbColonneMatrice);
for(int i=0; i<6; i++){
if(voisins[i] != NULL){
if(voisins[i]->nearbyMine == 0 && !voisins[i]->isPressed){
voisins[i]->isPressed = true;
voisins[i]->couleurCase = WHITE;
revelerVoisinsAZero(voisins[i]->line, voisins[i]->column, matriceMines, nbLigneMatrice, nbColonneMatrice);
}
}
}
free(voisins);
} }
void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, CelluleDemineur** matriceMines){ void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, CelluleDemineur** matriceMines){
...@@ -63,6 +97,8 @@ void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, Cell ...@@ -63,6 +97,8 @@ void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, Cell
} }
} }
int main(void) int main(void)
{ {
// Initialization // Initialization
...@@ -73,7 +109,7 @@ int main(void) ...@@ -73,7 +109,7 @@ int main(void)
bool gameIsLost = false; bool gameIsLost = false;
//CREER MATRICE DES MINES //CREER MATRICE DES MINES
int nbLigneMatrice = 7, nbColonneMatrice = 7, nbMines = 10; int nbLigneMatrice = 10, nbColonneMatrice = 10, nbMines = 3;
CelluleDemineur** matriceMines = malloc(nbLigneMatrice * sizeof(CelluleDemineur *)); CelluleDemineur** matriceMines = malloc(nbLigneMatrice * sizeof(CelluleDemineur *));
for(int i=0; i<nbColonneMatrice; i++) for(int i=0; i<nbColonneMatrice; i++)
matriceMines[i] = malloc(nbColonneMatrice * sizeof(CelluleDemineur)); matriceMines[i] = malloc(nbColonneMatrice * sizeof(CelluleDemineur));
...@@ -85,6 +121,8 @@ int main(void) ...@@ -85,6 +121,8 @@ int main(void)
matriceMines[i][j]->isPressed = false; matriceMines[i][j]->isPressed = false;
matriceMines[i][j]->isFlaged = false; matriceMines[i][j]->isFlaged = false;
matriceMines[i][j]->nearbyMine = 0; matriceMines[i][j]->nearbyMine = 0;
matriceMines[i][j]->line = i;
matriceMines[i][j]->column = j;
matriceMines[i][j]->couleurCase = LIGHTGRAY; matriceMines[i][j]->couleurCase = LIGHTGRAY;
if(i%2 == 0){ if(i%2 == 0){
matriceMines[i][j]->pos = (Vector2){(1.5*j+1.75)*SIZE_OF_HEX, (1.5*i+1)*SIZE_OF_HEX}; matriceMines[i][j]->pos = (Vector2){(1.5*j+1.75)*SIZE_OF_HEX, (1.5*i+1)*SIZE_OF_HEX};
...@@ -113,6 +151,7 @@ int main(void) ...@@ -113,6 +151,7 @@ int main(void)
matriceMines[0][0]->isPressed = true; matriceMines[0][0]->isPressed = true;
if(matriceMines[0][0]->nearbyMine == 0){ if(matriceMines[0][0]->nearbyMine == 0){
matriceMines[0][0]->couleurCase = WHITE; matriceMines[0][0]->couleurCase = WHITE;
revelerVoisinsAZero(0, 0, matriceMines, nbLigneMatrice, nbColonneMatrice);
}else if(matriceMines[0][0]->nearbyMine < 0){ }else if(matriceMines[0][0]->nearbyMine < 0){
matriceMines[0][0]->couleurCase = MAROON; matriceMines[0][0]->couleurCase = MAROON;
gameIsLost = true; gameIsLost = true;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment