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 @@
#include <stdbool.h>
#include <conio.h>
#define SIZE_OF_HEX 40
#define SIZE_OF_HEX 20
struct celluleDemineur{
int line, column;
bool hasMine;
int nearbyMine;
Vector2 pos;
......@@ -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 lineNext = (line+1 < nbLigneMatrice), colNext = (column+1 < nbColonneMatrice);
if(colPrev){matriceMines[line][column-1]->nearbyMine++;}
if(colNext){matriceMines[line][column+1]->nearbyMine++;}
if(colPrev){tabVoisins[0] = matriceMines[line][column-1];}
if(colNext){tabVoisins[1] = matriceMines[line][column+1];}
if(linePrev){matriceMines[line-1][column]->nearbyMine++;}
if(lineNext){matriceMines[line+1][column]->nearbyMine++;}
if(linePrev){tabVoisins[2] = matriceMines[line-1][column];}
if(lineNext){tabVoisins[3] = matriceMines[line+1][column];}
if(line%2 == 0){
if(linePrev && colNext){matriceMines[line-1][column+1]->nearbyMine++;}
if(lineNext && colNext){matriceMines[line+1][column+1]->nearbyMine++;}
if(linePrev && colNext){tabVoisins[4] = matriceMines[line-1][column+1];}
if(lineNext && colNext){tabVoisins[5] = matriceMines[line+1][column+1];}
}else{
if(linePrev && colPrev){matriceMines[line-1][column-1]->nearbyMine++;}
if(lineNext && colPrev){matriceMines[line+1][column-1]->nearbyMine++;}
if(linePrev && colPrev){tabVoisins[4] = matriceMines[line-1][column-1];}
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){
......@@ -63,6 +97,8 @@ void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, Cell
}
}
int main(void)
{
// Initialization
......@@ -73,7 +109,7 @@ int main(void)
bool gameIsLost = false;
//CREER MATRICE DES MINES
int nbLigneMatrice = 7, nbColonneMatrice = 7, nbMines = 10;
int nbLigneMatrice = 10, nbColonneMatrice = 10, nbMines = 3;
CelluleDemineur** matriceMines = malloc(nbLigneMatrice * sizeof(CelluleDemineur *));
for(int i=0; i<nbColonneMatrice; i++)
matriceMines[i] = malloc(nbColonneMatrice * sizeof(CelluleDemineur));
......@@ -85,6 +121,8 @@ int main(void)
matriceMines[i][j]->isPressed = false;
matriceMines[i][j]->isFlaged = false;
matriceMines[i][j]->nearbyMine = 0;
matriceMines[i][j]->line = i;
matriceMines[i][j]->column = j;
matriceMines[i][j]->couleurCase = LIGHTGRAY;
if(i%2 == 0){
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)
matriceMines[0][0]->isPressed = true;
if(matriceMines[0][0]->nearbyMine == 0){
matriceMines[0][0]->couleurCase = WHITE;
revelerVoisinsAZero(0, 0, matriceMines, nbLigneMatrice, nbColonneMatrice);
}else if(matriceMines[0][0]->nearbyMine < 0){
matriceMines[0][0]->couleurCase = MAROON;
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