From 5a2f4c2f48f248273f93aa9675d5a947d0541b5c Mon Sep 17 00:00:00 2001 From: horville Date: Tue, 30 Nov 2021 09:38:39 +0100 Subject: [PATCH] Update SAE --- APL1.1/SAE11_2021/taquin.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/APL1.1/SAE11_2021/taquin.c b/APL1.1/SAE11_2021/taquin.c index 6899f47..f2c8939 100644 --- a/APL1.1/SAE11_2021/taquin.c +++ b/APL1.1/SAE11_2021/taquin.c @@ -2,6 +2,7 @@ #include #include #include +#include #include "utils.h" #include "taquin.h" #include "graph_sup.h" @@ -26,11 +27,6 @@ void UpdateTaquin() { } } -//Randomise le Taquin. -void RandomizeTaquin() { - -} - //Vérifie si le Taquin est en ordre et retourne 1 si oui, 0 si non. int CheckVictory() { int X, Y; @@ -96,6 +92,32 @@ int MovePiece(int X, int Y, int Index, int ShouldUpdate) { return NewX + 2 * NewY; } +//Randomise le Taquin. +void RandomizeTaquin() { + int CX = 0, CY = 0; + int LastMove = -1; + + srand(Microsecondes()); + for (int i = 0; i < 50000; i++) { + LastMove = rand() % 4 == LastMove ? (LastMove + 1) % 4 : rand() % 4; + srand(Microsecondes()); + + if (LastMove == 0 && CX + 1 < Columns) /*Droite*/ { + CX++; + MovePiece(CX, CY, Taquin[CX][CY], 0); + } else if (LastMove == 1 && CY + 1 < Rows) /*Bas*/ { + CY++; + MovePiece(CX, CY, Taquin[CX][CY], 0); + } else if (LastMove == 2 && CX - 1 > -1) /*Gauche*/ { + CX--; + MovePiece(CX, CY, Taquin[CX][CY], 0); + } else if (LastMove == 3 && CY - 1 > -1) /*Haut*/ { + CY--; + MovePiece(CX, CY, Taquin[CX][CY], 0); + } + } +} + void TaquinRenderLogicLoop() { int CurID = -1, LastID = -1, LastX = 0, LastY = 0, Victory = 0; @@ -249,6 +271,8 @@ void CreateTaquin(char * FileName, int ImX, int ImY, int RowNumber, int ColumnNu DessinerRectangle(49, OFFSET_Y + (500 - ImageY) / 2 - 1, ImageX + 1, ImageY + 1); ChargerImage(FileName, 50, OFFSET_Y + (500 - ImageY) / 2, 0, 0, ImageX, ImageY); + RandomizeTaquin(); //On randomise notre taquin. + UpdateTaquin(); TaquinRenderLogicLoop(); //Cette fonction est responsable de tout le déroulement de la partie. ShowVictoryScreen(); //On est après une partie, on affiche l'écran de victoire.