|
|
@ -179,22 +179,22 @@ void InitGame(void) |
|
|
|
|
|
|
|
// Initialize grid matrices |
|
|
|
for (int i = 0; i < GRID_HORIZONTAL_SIZE; i++) |
|
|
|
{ |
|
|
|
for (int j = 0; j < GRID_VERTICAL_SIZE; j++) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int j = 0; j < GRID_VERTICAL_SIZE; j++) |
|
|
|
{ |
|
|
|
if ((j == GRID_VERTICAL_SIZE - 1) || (i == 0) || (i == GRID_HORIZONTAL_SIZE - 1)) grid[i][j] = BLOCK; |
|
|
|
else grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Initialize incoming piece matrices |
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
{ |
|
|
|
for (int j = 0; j< 4; j++) |
|
|
|
{ |
|
|
|
incomingPiece[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
{ |
|
|
|
for (int j = 0; j< 4; j++) |
|
|
|
{ |
|
|
|
incomingPiece[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Update game (one frame) |
|
|
@ -423,34 +423,34 @@ static bool Createpiece() |
|
|
|
piecePositionY = 0; |
|
|
|
|
|
|
|
// If the game is starting and you are going to create the first piece, we create an extra one |
|
|
|
if (beginPlay) |
|
|
|
{ |
|
|
|
if (beginPlay) |
|
|
|
{ |
|
|
|
GetRandompiece(); |
|
|
|
beginPlay = false; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// We assign the incoming piece to the actual piece |
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
{ |
|
|
|
for (int j = 0; j< 4; j++) |
|
|
|
{ |
|
|
|
piece[i][j] = incomingPiece[i][j]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
{ |
|
|
|
for (int j = 0; j< 4; j++) |
|
|
|
{ |
|
|
|
piece[i][j] = incomingPiece[i][j]; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// We assign a random piece to the incoming one |
|
|
|
GetRandompiece(); |
|
|
|
GetRandompiece(); |
|
|
|
|
|
|
|
// Assign the piece to the grid |
|
|
|
for (int i = piecePositionX; i < piecePositionX + 4; i++) |
|
|
|
{ |
|
|
|
for (int j = 0; j < 4; j++) |
|
|
|
{ |
|
|
|
if (piece[i - (int)piecePositionX][j] == MOVING) grid[i][j] = MOVING; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
{ |
|
|
|
for (int j = 0; j < 4; j++) |
|
|
|
{ |
|
|
|
if (piece[i - (int)piecePositionX][j] == MOVING) grid[i][j] = MOVING; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return true; |
|
|
|
} |
|
|
|
|
|
|
|
static void GetRandompiece() |
|
|
@ -459,22 +459,22 @@ static void GetRandompiece() |
|
|
|
int random = rand() % 7; |
|
|
|
|
|
|
|
for (int i = 0; i < 4; i++) |
|
|
|
{ |
|
|
|
for (int j = 0; j < 4; j++) |
|
|
|
{ |
|
|
|
incomingPiece[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
{ |
|
|
|
for (int j = 0; j < 4; j++) |
|
|
|
{ |
|
|
|
incomingPiece[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
switch(random) |
|
|
|
{ |
|
|
|
case 0: { incomingPiece[1][1] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[1][2] = MOVING; incomingPiece[2][2] = MOVING; } break; //Cube |
|
|
|
case 1: { incomingPiece[1][0] = MOVING; incomingPiece[1][1] = MOVING; incomingPiece[1][2] = MOVING; incomingPiece[2][2] = MOVING; } break; //L |
|
|
|
case 2: { incomingPiece[1][2] = MOVING; incomingPiece[2][0] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[2][2] = MOVING; } break; //L inversa |
|
|
|
case 3: { incomingPiece[0][1] = MOVING; incomingPiece[1][1] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[3][1] = MOVING; } break; //Recta |
|
|
|
case 4: { incomingPiece[1][0] = MOVING; incomingPiece[1][1] = MOVING; incomingPiece[1][2] = MOVING; incomingPiece[2][1] = MOVING; } break; //Creu tallada |
|
|
|
case 5: { incomingPiece[1][1] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[2][2] = MOVING; incomingPiece[3][2] = MOVING; } break; //S |
|
|
|
case 6: { incomingPiece[1][2] = MOVING; incomingPiece[2][2] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[3][1] = MOVING; } break; //S inversa |
|
|
|
{ |
|
|
|
case 0: { incomingPiece[1][1] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[1][2] = MOVING; incomingPiece[2][2] = MOVING; } break; //Cube |
|
|
|
case 1: { incomingPiece[1][0] = MOVING; incomingPiece[1][1] = MOVING; incomingPiece[1][2] = MOVING; incomingPiece[2][2] = MOVING; } break; //L |
|
|
|
case 2: { incomingPiece[1][2] = MOVING; incomingPiece[2][0] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[2][2] = MOVING; } break; //L inversa |
|
|
|
case 3: { incomingPiece[0][1] = MOVING; incomingPiece[1][1] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[3][1] = MOVING; } break; //Recta |
|
|
|
case 4: { incomingPiece[1][0] = MOVING; incomingPiece[1][1] = MOVING; incomingPiece[1][2] = MOVING; incomingPiece[2][1] = MOVING; } break; //Creu tallada |
|
|
|
case 5: { incomingPiece[1][1] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[2][2] = MOVING; incomingPiece[3][2] = MOVING; } break; //S |
|
|
|
case 6: { incomingPiece[1][2] = MOVING; incomingPiece[2][2] = MOVING; incomingPiece[2][1] = MOVING; incomingPiece[3][1] = MOVING; } break; //S inversa |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
@ -482,34 +482,34 @@ static void ResolveFallingMovement(bool *detection, bool *pieceActive) |
|
|
|
{ |
|
|
|
// If we finished moving this piece, we stop it |
|
|
|
if (*detection) |
|
|
|
{ |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j] = FULL; |
|
|
|
*detection = false; |
|
|
|
*pieceActive = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j] = FULL; |
|
|
|
*detection = false; |
|
|
|
*pieceActive = false; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// We move down the piece |
|
|
|
else |
|
|
|
{ |
|
|
|
else |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j+1] = MOVING; |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j+1] = MOVING; |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
piecePositionY++; |
|
|
|
} |
|
|
|
} |
|
|
@ -519,78 +519,78 @@ static bool ResolveLateralMovement() |
|
|
|
bool collision = false; |
|
|
|
|
|
|
|
// Move left |
|
|
|
if (IsKeyDown(KEY_LEFT)) |
|
|
|
{ |
|
|
|
if (IsKeyDown(KEY_LEFT)) |
|
|
|
{ |
|
|
|
// Check if is possible to move to left |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
// Check if we are touching the left wall or we have a full square at the left |
|
|
|
if ((i-1 == 0) || (grid[i-1][j] == FULL)) collision = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if ((i-1 == 0) || (grid[i-1][j] == FULL)) collision = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// If able, move left |
|
|
|
if (!collision) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) // We check the matrix from left to right |
|
|
|
{ |
|
|
|
if (!collision) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) // We check the matrix from left to right |
|
|
|
{ |
|
|
|
// Move everything to the left |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i-1][j] = MOVING; |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i-1][j] = MOVING; |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
piecePositionX--; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
// Move right |
|
|
|
else if (IsKeyDown(KEY_RIGHT)) |
|
|
|
{ |
|
|
|
else if (IsKeyDown(KEY_RIGHT)) |
|
|
|
{ |
|
|
|
// Check if is possible to move to right |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
// Check if we are touching the right wall or we have a full square at the right |
|
|
|
if ((i+1 == GRID_HORIZONTAL_SIZE - 1) || (grid[i+1][j] == FULL)) |
|
|
|
if ((i+1 == GRID_HORIZONTAL_SIZE - 1) || (grid[i+1][j] == FULL)) |
|
|
|
{ |
|
|
|
collision = true; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
// If able move right |
|
|
|
if (!collision) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = GRID_HORIZONTAL_SIZE - 1; i >= 1; i--) // We check the matrix from right to left |
|
|
|
{ |
|
|
|
if (!collision) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = GRID_HORIZONTAL_SIZE - 1; i >= 1; i--) // We check the matrix from right to left |
|
|
|
{ |
|
|
|
// Move everything to the right |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i+1][j] = MOVING; |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i+1][j] = MOVING; |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
piecePositionX++; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return collision; |
|
|
|
} |
|
|
@ -599,164 +599,164 @@ static bool ResolveTurnMovement() |
|
|
|
{ |
|
|
|
// Input for turning the piece |
|
|
|
if (IsKeyDown(KEY_UP)) |
|
|
|
{ |
|
|
|
int aux; |
|
|
|
bool checker = false; |
|
|
|
{ |
|
|
|
int aux; |
|
|
|
bool checker = false; |
|
|
|
|
|
|
|
// Check all turning possibilities |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY] == MOVING) && |
|
|
|
(grid[piecePositionX][piecePositionY] != EMPTY) && |
|
|
|
(grid[piecePositionX][piecePositionY] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY + 3] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY + 3] == MOVING) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY] != EMPTY) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX][piecePositionY + 3] == MOVING) && |
|
|
|
if ((grid[piecePositionX][piecePositionY + 3] == MOVING) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY + 3] != EMPTY) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY + 3] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX][piecePositionY] == MOVING) && |
|
|
|
if ((grid[piecePositionX][piecePositionY] == MOVING) && |
|
|
|
(grid[piecePositionX][piecePositionY + 3] != EMPTY) && |
|
|
|
(grid[piecePositionX][piecePositionY + 3] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ((grid[piecePositionX + 1][piecePositionY] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 1][piecePositionY] == MOVING) && |
|
|
|
(grid[piecePositionX][piecePositionY + 2] != EMPTY) && |
|
|
|
(grid[piecePositionX][piecePositionY + 2] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY + 1] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY + 1] == MOVING) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY] != EMPTY) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 2][piecePositionY + 3] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 2][piecePositionY + 3] == MOVING) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY + 1] != EMPTY) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY + 1] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX][piecePositionY + 2] == MOVING) && |
|
|
|
if ((grid[piecePositionX][piecePositionY + 2] == MOVING) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY + 3] != EMPTY) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY + 3] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
if ((grid[piecePositionX + 2][piecePositionY] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 2][piecePositionY] == MOVING) && |
|
|
|
(grid[piecePositionX][piecePositionY + 1] != EMPTY) && |
|
|
|
(grid[piecePositionX][piecePositionY + 1] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY + 2] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 3][piecePositionY + 2] == MOVING) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY] != EMPTY) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 1][piecePositionY + 3] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 1][piecePositionY + 3] == MOVING) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY + 2] != EMPTY) && |
|
|
|
(grid[piecePositionX + 3][piecePositionY + 2] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX][piecePositionY + 1] == MOVING) && |
|
|
|
if ((grid[piecePositionX][piecePositionY + 1] == MOVING) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY + 3] != EMPTY) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY + 3] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
|
|
|
|
if ((grid[piecePositionX + 1][piecePositionY + 1] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 1][piecePositionY + 1] == MOVING) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY + 2] != EMPTY) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY + 2] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
|
|
|
|
if ((grid[piecePositionX + 2][piecePositionY + 1] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 2][piecePositionY + 1] == MOVING) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY + 1] != EMPTY) && |
|
|
|
(grid[piecePositionX + 1][piecePositionY + 1] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 2][piecePositionY + 2] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 2][piecePositionY + 2] == MOVING) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY + 1] != EMPTY) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY + 1] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
if ((grid[piecePositionX + 1][piecePositionY + 2] == MOVING) && |
|
|
|
if ((grid[piecePositionX + 1][piecePositionY + 2] == MOVING) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY + 2] != EMPTY) && |
|
|
|
(grid[piecePositionX + 2][piecePositionY + 2] != MOVING)) |
|
|
|
{ |
|
|
|
{ |
|
|
|
checker = true; |
|
|
|
} |
|
|
|
|
|
|
|
if (!checker) |
|
|
|
{ |
|
|
|
aux = piece[0][0]; |
|
|
|
piece[0][0] = piece[3][0]; |
|
|
|
piece[3][0] = piece[3][3]; |
|
|
|
piece[3][3] = piece[0][3]; |
|
|
|
piece[0][3] = aux; |
|
|
|
|
|
|
|
aux = piece[1][0]; |
|
|
|
piece[1][0] = piece[3][1]; |
|
|
|
piece[3][1] = piece[2][3]; |
|
|
|
piece[2][3] = piece[0][2]; |
|
|
|
piece[0][2] = aux; |
|
|
|
|
|
|
|
aux = piece[2][0]; |
|
|
|
piece[2][0] = piece[3][2]; |
|
|
|
piece[3][2] = piece[1][3]; |
|
|
|
piece[1][3] = piece[0][1]; |
|
|
|
piece[0][1] = aux; |
|
|
|
|
|
|
|
aux = piece[1][1]; |
|
|
|
piece[1][1] = piece[2][1]; |
|
|
|
piece[2][1] = piece[2][2]; |
|
|
|
piece[2][2] = piece[1][2]; |
|
|
|
piece[1][2] = aux; |
|
|
|
} |
|
|
|
|
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for (int i = piecePositionX; i < piecePositionX + 4; i++) |
|
|
|
{ |
|
|
|
for (int j = piecePositionY; j < piecePositionY + 4; j++) |
|
|
|
{ |
|
|
|
if (piece[i - piecePositionX][j - piecePositionY] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j] = MOVING; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (!checker) |
|
|
|
{ |
|
|
|
aux = piece[0][0]; |
|
|
|
piece[0][0] = piece[3][0]; |
|
|
|
piece[3][0] = piece[3][3]; |
|
|
|
piece[3][3] = piece[0][3]; |
|
|
|
piece[0][3] = aux; |
|
|
|
|
|
|
|
aux = piece[1][0]; |
|
|
|
piece[1][0] = piece[3][1]; |
|
|
|
piece[3][1] = piece[2][3]; |
|
|
|
piece[2][3] = piece[0][2]; |
|
|
|
piece[0][2] = aux; |
|
|
|
|
|
|
|
aux = piece[2][0]; |
|
|
|
piece[2][0] = piece[3][2]; |
|
|
|
piece[3][2] = piece[1][3]; |
|
|
|
piece[1][3] = piece[0][1]; |
|
|
|
piece[0][1] = aux; |
|
|
|
|
|
|
|
aux = piece[1][1]; |
|
|
|
piece[1][1] = piece[2][1]; |
|
|
|
piece[2][1] = piece[2][2]; |
|
|
|
piece[2][2] = piece[1][2]; |
|
|
|
piece[1][2] = aux; |
|
|
|
} |
|
|
|
|
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if (grid[i][j] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j] = EMPTY; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
for (int i = piecePositionX; i < piecePositionX + 4; i++) |
|
|
|
{ |
|
|
|
for (int j = piecePositionY; j < piecePositionY + 4; j++) |
|
|
|
{ |
|
|
|
if (piece[i - piecePositionX][j - piecePositionY] == MOVING) |
|
|
|
{ |
|
|
|
grid[i][j] = MOVING; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
} |
|
|
@ -764,44 +764,44 @@ static bool ResolveTurnMovement() |
|
|
|
static void CheckDetection(bool *detection) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if ((grid[i][j] == MOVING) && ((grid[i][j+1] == FULL) || (grid[i][j+1] == BLOCK))) *detection = true; |
|
|
|
} |
|
|
|
} |
|
|
|
{ |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
if ((grid[i][j] == MOVING) && ((grid[i][j+1] == FULL) || (grid[i][j+1] == BLOCK))) *detection = true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void CheckCompletition(bool *lineToDelete) |
|
|
|
{ |
|
|
|
int calculator; |
|
|
|
|
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
calculator = 0; |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
for (int j = GRID_VERTICAL_SIZE - 2; j >= 0; j--) |
|
|
|
{ |
|
|
|
calculator = 0; |
|
|
|
for (int i = 1; i < GRID_HORIZONTAL_SIZE - 1; i++) |
|
|
|
{ |
|
|
|
// Count each square of the line |
|
|
|
if (grid[i][j] == FULL) |
|
|
|
{ |
|
|
|
calculator++; |
|
|
|
} |
|
|
|
if (grid[i][j] == FULL) |
|
|
|
{ |
|
|
|
calculator++; |
|
|
|
} |
|
|
|
|
|
|
|
// Check if we completed the whole line |
|
|
|
if (calculator == GRID_HORIZONTAL_SIZE - 2) |
|
|
|
{ |
|
|
|
if (calculator == GRID_HORIZONTAL_SIZE - 2) |
|
|
|
{ |
|
|
|
*lineToDelete = true; |
|
|
|
calculator = 0; |
|
|
|
// points++; |
|
|
|
// points++; |
|
|
|
|
|
|
|
// Mark the completed line |
|
|
|
for (int z = 1; z < GRID_HORIZONTAL_SIZE - 1; z++) |
|
|
|
{ |
|
|
|
grid[z][j] = FADING; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
for (int z = 1; z < GRID_HORIZONTAL_SIZE - 1; z++) |
|
|
|
{ |
|
|
|
grid[z][j] = FADING; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
static void DeleteCompleteLines() |
|
|
|