summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/retris.c105
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();
}