diff options
| author | not_a_robot <hashimm06@outlook.com> | 2023-11-27 10:27:43 +0000 |
|---|---|---|
| committer | not_a_robot <hashimm06@outlook.com> | 2023-11-27 10:27:43 +0000 |
| commit | 4979a2e988cd7d8b3937d8fa743151d6d6fb2ba4 (patch) | |
| tree | 8a31822bf8d06a31ab4e10e7a9603e16b41b2019 | |
| parent | 0aeb6c484a3c37fa466003106e490e311adbc699 (diff) | |
| download | retris-4979a2e988cd7d8b3937d8fa743151d6d6fb2ba4.tar.gz retris-4979a2e988cd7d8b3937d8fa743151d6d6fb2ba4.tar.bz2 retris-4979a2e988cd7d8b3937d8fa743151d6d6fb2ba4.zip | |
Add all Tetrominos
- simple change to input handling meant order of tetrominos didn't matter...
- ... it was such a simple change that saved a lot of time that was already
wasted trying to put cubes in order for each tetromino...
| -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(); } |
