diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/retris.c | 46 |
1 files changed, 14 insertions, 32 deletions
diff --git a/src/retris.c b/src/retris.c index 8f8abf4..a533304 100644 --- a/src/retris.c +++ b/src/retris.c @@ -35,11 +35,13 @@ main(void){ vis_height = VIS_HEIGHT * FACT; Color grid[WIDTH][HEIGHT]; // if colour is WHITE, the position is empty int interval = FPS, count, i, j; - Tetromino cur_trmno; // trnmo is faster and easier to write than tetromino + // zero init so that prev_trmno can be set later + Tetromino cur_trmno = {.pos = {0}}, prev_trmno; bool gen_trmno = true; srand(time(NULL)); + // clear screen for (i = 0; i < WIDTH; i++) for (j = 0; j < HEIGHT; j++) grid[i][j] = WHITE; @@ -54,7 +56,6 @@ main(void){ for (i = 0; i < 4; i++) { cur_trmno.pos[i].x = WIDTH / 2; cur_trmno.pos[i].y = i; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; } break; @@ -63,12 +64,9 @@ main(void){ for (i = 0; i < 4; i += 2) { cur_trmno.pos[i].x = WIDTH / 2; cur_trmno.pos[i].y = 1 - i / 2; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; cur_trmno.pos[i+1].x = WIDTH / 2 + 1; cur_trmno.pos[i+1].y = 1 - i / 2; - grid[cur_trmno.pos[i+1].x][cur_trmno.pos[i+1].y] = - cur_trmno.colour; } break; @@ -77,11 +75,9 @@ main(void){ for (i = 0; i < 3; i++) { cur_trmno.pos[i].x = WIDTH / 2; cur_trmno.pos[i].y = i; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; } cur_trmno.pos[3].x = WIDTH / 2 + 1; cur_trmno.pos[3].y = 2; - grid[cur_trmno.pos[3].x][cur_trmno.pos[3].y] = cur_trmno.colour; break; case 3: // J-tetromino @@ -89,11 +85,9 @@ main(void){ for (i = 0; i < 3; i++) { cur_trmno.pos[i].x = WIDTH / 2; cur_trmno.pos[i].y = i; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; } cur_trmno.pos[3].x = WIDTH / 2 - 1; cur_trmno.pos[3].y = 2; - grid[cur_trmno.pos[3].x][cur_trmno.pos[3].y] = cur_trmno.colour; break; case 4: // T-tetromino @@ -101,11 +95,9 @@ main(void){ for (i = 0; i < 3; i++) { cur_trmno.pos[i].x = WIDTH / 2 - 1 + i; cur_trmno.pos[i].y = 1; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; } cur_trmno.pos[3].x = WIDTH / 2; cur_trmno.pos[3].y = 0; - grid[cur_trmno.pos[3].x][cur_trmno.pos[3].y] = cur_trmno.colour; break; case 5: // S-tetromino @@ -113,7 +105,6 @@ main(void){ for (i = 0; i < 4; i++) { cur_trmno.pos[i].x = WIDTH / 2 + (i < 2 ? i - 1 : i - 2); cur_trmno.pos[i].y = i < 2 ? 1 : 0; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; } break; @@ -122,45 +113,36 @@ main(void){ for (i = 0; i < 4; i++) { cur_trmno.pos[i].x = WIDTH / 2 + (i < 2 ? i : 2 - i); cur_trmno.pos[i].y = i < 2 ? 1 : 0; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; } break; } gen_trmno = false; } + prev_trmno = cur_trmno; + // KEY CHECKING if (count >= (IsKeyDown(KEY_DOWN) ? FPS/30 : interval)) { count = 0; for (i = 0; i < 4; i++) - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = WHITE; - for (i = 0; i < 4; i++) { cur_trmno.pos[i].y++; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; - } } - if (IsKeyDown(KEY_RIGHT)) { + if (IsKeyDown(KEY_RIGHT)) for (i = 0; i < 4; i++) - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = WHITE; - - for (i = 0; i < 4; i++) { cur_trmno.pos[i].x++; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; - } - } - else if (IsKeyDown(KEY_LEFT)) { + else if (IsKeyDown(KEY_LEFT)) for (i = 0; i < 4; i++) - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = WHITE; - - for (i = 0; i < 4; i++) { cur_trmno.pos[i].x--; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; - } - } - + // for debug purposes only if (IsKeyPressed(KEY_G)) gen_trmno = true; + // redraw current tetromino position + for (i = 0; i < 4; i++) + grid[prev_trmno.pos[i].x][prev_trmno.pos[i].y] = WHITE; + for (i = 0; i < 4; i++) + grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; + BeginDrawing(); Draw2DGrid(grid); #ifdef DEBUG |
