From bee57c12a4582d56f2eb18ea632e416cbffe5528 Mon Sep 17 00:00:00 2001 From: not_a_robot Date: Sun, 19 Nov 2023 16:18:23 +0000 Subject: initial commit --- src/retris.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 src/retris.c (limited to 'src/retris.c') diff --git a/src/retris.c b/src/retris.c new file mode 100644 index 0000000..7335b9e --- /dev/null +++ b/src/retris.c @@ -0,0 +1,88 @@ +#include +#include +#include "raylib.h" + +/* + * each cube is 1 unit, so FACT is used as a scale factor for the size of the + * screen + */ +#define WIDTH 10 +#define HEIGHT 22 +#define VIS_HEIGHT 20 +#define FACT 40 +/* since the game only moves on a block per block basis, no smoothness is + * necessary, so the only thing FPS controls is how fast the blocks move left + * and right, due to how often it polls */ +#define FPS 30 + +typedef struct Vector2Int { + int x, y; +} Vector2Int; + +typedef struct Tetromino { + Color colour; + Vector2Int pos[4]; // position of 4 cubes making the tetromino +} Tetromino; + +void Draw2DGrid(Color grid[WIDTH][HEIGHT]); + +int +main(void){ + int const width = WIDTH * FACT, height = HEIGHT * FACT, + vis_height = VIS_HEIGHT * FACT; + Color grid[WIDTH][HEIGHT]; // if colour is WHITE, the position is empty + Vector2Int cur_cube = {0,0}; + int interval = FPS, count, i, j; + + srand(time(NULL)); + + for (i = 0; i < WIDTH; i++) + for (j = 0; j < HEIGHT; j++) + grid[i][j] = WHITE; + grid[0][0] = RED; + + InitWindow(width, height, "retris"); + SetTargetFPS(FPS); + for (count = 0; !WindowShouldClose(); count++) { + if (count == (interval - (IsKeyDown(KEY_DOWN) ? interval/2 : 0))) { + count = 0; + grid[cur_cube.x][cur_cube.y] = WHITE; + cur_cube.y++; + grid[cur_cube.x][cur_cube.y] = RED; + } + + if (IsKeyDown(KEY_RIGHT)) { + grid[cur_cube.x][cur_cube.y] = WHITE; + cur_cube.x++; + grid[cur_cube.x][cur_cube.y] = RED; + } + else if (IsKeyDown(KEY_LEFT)) { + grid[cur_cube.x][cur_cube.y] = WHITE; + cur_cube.x--; + grid[cur_cube.x][cur_cube.y] = RED; + } + + BeginDrawing(); + Draw2DGrid(grid); + EndDrawing(); + } + + CloseWindow(); + return 0; +} + +void +Draw2DGrid(Color grid[WIDTH][HEIGHT]){ + int i, j; + + for (i = 0; i < WIDTH; i++) { + for (j = 0; j < HEIGHT; j++) { + DrawRectangle(i*FACT, j*FACT, FACT, FACT, grid[i][j]); + } + } + + for (i = 0; i <= WIDTH; i++) + DrawLine(i*FACT, 0, i*FACT, HEIGHT*FACT, LIGHTGRAY); + for (i = 0; i <= HEIGHT; i++) + DrawLine(0, i*FACT, WIDTH*FACT, i*FACT, LIGHTGRAY); +} -- cgit v1.2.3