Commit b1ab7ffa authored by Erwan's avatar Erwan

Ajout de la condition de defaite et ajout de la regeneration de la grille dans les mêmes conditions

parent 03239074
...@@ -19,6 +19,24 @@ struct celluleDemineur{ ...@@ -19,6 +19,24 @@ struct celluleDemineur{
typedef struct celluleDemineur * CelluleDemineur; typedef struct celluleDemineur * CelluleDemineur;
bool containsMine(int line, int col, CelluleDemineur** matriceMines);
CelluleDemineur* recupererVoisins(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice);
void incrementationVoisinMine(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice);
bool revelerVoisins(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice);
bool revelerCase(CelluleDemineur** matriceMines, int line, int column, int nbLigneMatrice, int nbColonneMatrice);
void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, CelluleDemineur** matriceMines);
void initGrille(int nbLigneMatrice, int nbColonneMatrice, CelluleDemineur** matriceMines);
float getDistanceBetweenPoints(Vector2 a, Vector2 b);
bool containsMine(int line, int col, CelluleDemineur** matriceMines){ bool containsMine(int line, int col, CelluleDemineur** matriceMines){
return (matriceMines[line][col]->hasMine == true); return (matriceMines[line][col]->hasMine == true);
} }
...@@ -60,30 +78,36 @@ void incrementationVoisinMine(int line, int column, CelluleDemineur** matriceMin ...@@ -60,30 +78,36 @@ void incrementationVoisinMine(int line, int column, CelluleDemineur** matriceMin
free(voisins); free(voisins);
} }
void revelerVoisins(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice){ bool revelerVoisins(int line, int column, CelluleDemineur** matriceMines, int nbLigneMatrice, int nbColonneMatrice){
CelluleDemineur* voisins = recupererVoisins(line, column, matriceMines, nbLigneMatrice, nbColonneMatrice); CelluleDemineur* voisins = recupererVoisins(line, column, matriceMines, nbLigneMatrice, nbColonneMatrice);
bool res = false, resTemp;
for(int i=0; i<6; i++){ for(int i=0; i<6; i++){
if(voisins[i] != NULL){ if(voisins[i] != NULL){
revelerCase(matriceMines, voisins[i]->line, voisins[i]->column, nbLigneMatrice, nbColonneMatrice); resTemp = revelerCase(matriceMines, voisins[i]->line, voisins[i]->column, nbLigneMatrice, nbColonneMatrice);
if(resTemp) res = true;
} }
} }
free(voisins); free(voisins);
return res;
} }
void revelerCase(CelluleDemineur** matriceMines, int line, int column, int nbLigneMatrice, int nbColonneMatrice){ bool revelerCase(CelluleDemineur** matriceMines, int line, int column, int nbLigneMatrice, int nbColonneMatrice){
bool res = false;
if(!matriceMines[line][column]->isFlaged && !matriceMines[line][column]->isPressed){ if(!matriceMines[line][column]->isFlaged && !matriceMines[line][column]->isPressed){
matriceMines[line][column]->isPressed = true; matriceMines[line][column]->isPressed = true;
if(matriceMines[line][column]->nearbyMine == 0){ if(matriceMines[line][column]->nearbyMine == 0){
matriceMines[line][column]->couleurCase = LIGHTGRAY; matriceMines[line][column]->couleurCase = LIGHTGRAY;
revelerVoisins(line, column, matriceMines, nbLigneMatrice, nbColonneMatrice); res = revelerVoisins(line, column, matriceMines, nbLigneMatrice, nbColonneMatrice);
}else if(matriceMines[line][column]->nearbyMine < 0){ }else if(containsMine(line, column, matriceMines)){
matriceMines[line][column]->couleurCase = MAROON; matriceMines[line][column]->couleurCase = MAROON;
res = true;
}else{ }else{
matriceMines[line][column]->couleurCase = LIGHTGRAY; matriceMines[line][column]->couleurCase = LIGHTGRAY;
} }
} }
return res;
} }
void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, CelluleDemineur** matriceMines){ void generationMines(int nbMines, int nbLigneMatrice, int nbColonneMatrice, CelluleDemineur** matriceMines){
...@@ -131,28 +155,25 @@ int main(void) ...@@ -131,28 +155,25 @@ int main(void)
{ {
// Initialization // Initialization
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
const int screenWidth = 1600; const int screenWidth = 1280;
const int screenHeight = 900; const int screenHeight = 1024;
int fontSizeBig = screenWidth*screenHeight/30000;
int fontSizeSmall = screenWidth*screenHeight/35000;
InitWindow(screenWidth, screenHeight, "HexaSweeper - Erwan MERLY");
SetTargetFPS(60);
srand(time(NULL)); srand(time(NULL));
InitWindow(screenWidth, screenHeight, "HexaSweeper"); int nbLigneMatrice = 10, nbColonneMatrice = 10, nbMines = 20;
int curCaseX = 0, curCaseY = 0, remainingMines = nbMines;
bool lose = false, win = false;
//CREER MATRICE DES MINES //CREATION DE LA MATRICE DES MINES
int nbLigneMatrice = 10, nbColonneMatrice = 10, nbMines = 1;
CelluleDemineur** matriceMines = malloc(nbLigneMatrice * sizeof(CelluleDemineur *)); CelluleDemineur** matriceMines = malloc(nbLigneMatrice * sizeof(CelluleDemineur *));
for(int i=0; i<nbLigneMatrice; i++) for(int i=0; i<nbLigneMatrice; i++)
matriceMines[i] = calloc(nbLigneMatrice * nbColonneMatrice, sizeof(CelluleDemineur)); matriceMines[i] = calloc(nbLigneMatrice * nbColonneMatrice, sizeof(CelluleDemineur));
initGrille(nbLigneMatrice, nbColonneMatrice, matriceMines); initGrille(nbLigneMatrice, nbColonneMatrice, matriceMines);
//GENERATION DES MINES
generationMines(nbMines, nbLigneMatrice, nbColonneMatrice, matriceMines); generationMines(nbMines, nbLigneMatrice, nbColonneMatrice, matriceMines);
int remainingMines = nbMines, curCaseX = 0, curCaseY = 0;
bool lose = false, win = false;
SetTargetFPS(60); // Set our game to run at 60 frames-per-second
//-------------------------------------------------------------------------------------- //--------------------------------------------------------------------------------------
// Main game loop // Main game loop
...@@ -160,11 +181,11 @@ int main(void) ...@@ -160,11 +181,11 @@ int main(void)
{ {
// Update // Update
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON)){ if(IsMouseButtonPressed(MOUSE_LEFT_BUTTON) && !lose && !win){
revelerCase(matriceMines, curCaseX, curCaseY, nbLigneMatrice, nbColonneMatrice); lose = revelerCase(matriceMines, curCaseX, curCaseY, nbLigneMatrice, nbColonneMatrice);
} }
if(IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)){ if(IsMouseButtonPressed(MOUSE_RIGHT_BUTTON) && !lose && !win){
if(!matriceMines[curCaseX][curCaseY]->isPressed){ if(!matriceMines[curCaseX][curCaseY]->isPressed){
matriceMines[curCaseX][curCaseY]->isFlaged = !matriceMines[curCaseX][curCaseY]->isFlaged; matriceMines[curCaseX][curCaseY]->isFlaged = !matriceMines[curCaseX][curCaseY]->isFlaged;
if(matriceMines[curCaseX][curCaseY]->isFlaged){ if(matriceMines[curCaseX][curCaseY]->isFlaged){
...@@ -178,9 +199,9 @@ int main(void) ...@@ -178,9 +199,9 @@ int main(void)
} }
} }
if(IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON)){ if(IsMouseButtonPressed(MOUSE_MIDDLE_BUTTON) && !lose && !win){
revelerCase(matriceMines, curCaseX, curCaseY, nbLigneMatrice, nbColonneMatrice); lose = revelerCase(matriceMines, curCaseX, curCaseY, nbLigneMatrice, nbColonneMatrice);
revelerVoisins(curCaseX, curCaseY, matriceMines, nbLigneMatrice, nbColonneMatrice); lose = revelerVoisins(curCaseX, curCaseY, matriceMines, nbLigneMatrice, nbColonneMatrice);
} }
Vector2 mPos = GetMousePosition(); Vector2 mPos = GetMousePosition();
...@@ -198,6 +219,15 @@ int main(void) ...@@ -198,6 +219,15 @@ int main(void)
} }
if(win || lose){
if(IsKeyPressed('R')){
lose = false;
initGrille(nbLigneMatrice, nbColonneMatrice, matriceMines);
generationMines(nbMines, nbLigneMatrice, nbColonneMatrice, matriceMines);
}
}
// Draw // Draw
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
BeginDrawing(); BeginDrawing();
...@@ -214,7 +244,12 @@ int main(void) ...@@ -214,7 +244,12 @@ int main(void)
} }
} }
if(lose) DrawText("GAME OVER", 0, 0, 25, BLACK); if(lose || win){
DrawRectangle(0, screenHeight*0.55, screenWidth, screenHeight/8, Fade(GRAY, 0.8f));
if(lose) DrawText("GAME OVER", screenWidth/2-4*fontSizeBig, screenHeight*0.58, fontSizeBig, MAROON);
if(win) DrawText("YOU WIN!", screenWidth/2-3*fontSizeBig, screenHeight*0.57, fontSizeBig, LIME);
DrawText("PRESS R TO REPLAY", screenWidth/2-6*fontSizeSmall, screenHeight*0.62, fontSizeSmall, DARKGRAY);
}
EndDrawing(); EndDrawing();
//---------------------------------------------------------------------------------- //----------------------------------------------------------------------------------
......
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