diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/retris.c | 105 |
1 files changed, 94 insertions, 11 deletions
diff --git a/src/retris.c b/src/retris.c index 6779ab8..8f8abf4 100644 --- a/src/retris.c +++ b/src/retris.c @@ -48,51 +48,134 @@ main(void){ SetTargetFPS(FPS); for (count = 0; !WindowShouldClose(); count++) { if (gen_trmno) { - switch (rand() % 1) { - case 0: + switch (rand() % 7) { + case 0: // I-tetromino cur_trmno.colour = CYAN; for (i = 0; i < 4; i++) { cur_trmno.pos[i].x = WIDTH / 2; - // 3 - i so that tetrominoes are listed from bottom up; if drawn - // from top to bottom on line 69, then they will overlap and just - // be 1 cube - cur_trmno.pos[i].y = 3 - i; - grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = + cur_trmno.pos[i].y = i; + grid[cur_trmno.pos[i].x][cur_trmno.pos[i].y] = cur_trmno.colour; + } + break; + + case 1: // O-tetromino + cur_trmno.colour = YELLOW; + 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; + + case 2: // L-tetromino + cur_trmno.colour = ORANGE; + 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 + cur_trmno.colour = DARKBLUE; + 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 + cur_trmno.colour = PURPLE; + 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 + cur_trmno.colour = GREEN; + 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; + + case 6: // Z-tetromino + cur_trmno.colour = RED; + 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; } if (count >= (IsKeyDown(KEY_DOWN) ? FPS/30 : interval)) { count = 0; - for (i = 0; i < 4; i++) { + 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)) { - for (i = 0; i < 4; i++) { + 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)) { - for (i = 0; i < 4; i++) { + 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; } } - if (IsKeyDown(KEY_G)) + if (IsKeyPressed(KEY_G)) gen_trmno = true; BeginDrawing(); Draw2DGrid(grid); +#ifdef DEBUG + char *str1, *str2; + asprintf(&str1, "block0: x: %d y: %d", cur_trmno.pos[0].x, + cur_trmno.pos[0].y); + for (i = 1; i < 4; i++) { + asprintf(&str2, "%s\nblock%d: x: %d y: %d", str1, i, + cur_trmno.pos[i].x, cur_trmno.pos[i].y); + free(str1); + str1 = str2; + } + DrawText(str2, 0, 20, 16, BLACK); + free(str2); +#endif EndDrawing(); } |
