jag

tetoris_c

public

Small block game in C

Star0
Watch0

Commit 2fdb50f8f6eb

tarball

Jaglekon <58274093+Jaglekon@users.noreply.github.com>2026-08-26 14:40 UTC

7 files changed+37-142
made parser it's own library
Added file: CMakeLists.txt+26 additions
@@ -0,0 +1,26 @@
1+cmake_minimum_required(VERSION 3.20)
2+
3+project(tetoris C)
4+
5+include(FetchContent)
6+
7+FetchContent_Declare(
8+ jag_parser
9+ GIT_REPOSITORY https://codeberg.org/Jaglekon/jag_parse.git
10+ GIT_TAG v1.0.0
11+)
12+
13+FetchContent_MakeAvailable(parser)
14+
15+add_executable(tetoris
16+ source/main.c
17+ source/draw.c
18+ source/logic.c
19+)
20+
21+target_link_libraries(tetoris PRIVATE parser)
22+
23+target_compile_options(tetoris PRIVATE
24+ $<$<CONFIG:Debug>:-Wall -Wextra -Wpedantic>
25+)
26+
Modified file: Makefile+8 additions−10 deletions
@@ -1,14 +1,12 @@
1-CC ?= gcc
2-CFLAGS = -Wall -Wextra -MMD -MP
1+.PHONY: all debug clean
32
4-SRC = $(wildcard source/*.c)
5-OBJ = $(SRC:.c=.o)
6-DEP = $(OBJ:.o=.d)
3+all:
4+ cmake -B build -DCMAKE_BUILD_TYPE=Release
5+ cmake -build build
76
8-tetoris: $(OBJ)
9- $(CC) $(CFLAGS) -o $@ $(OBJ)
7+debug:
8+ cmake -B build -DCMAKE_BUILD_TYPE=Debug
9+ cmake -build build
1010
1111 clean:
12- rm -f $(OBJ) $(DEP) tetoris
13-
14--include $(DEP)
12+ rm -rf build
Deleted file: debug.log−1 deletions
@@ -1 +0,0 @@
1-Line clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clearLine clear
Binary file: programbinary

Binary file not shown.

Modified file: source/main.c+3 additions−3 deletions
@@ -1,5 +1,5 @@
11 #include "main.h"
2-#include "parser.h"
2+#include <parser.h>
33
44
55 tetromino playfield[FULL_HEIGHT][FULL_WIDTH] = {};
@@ -154,10 +154,10 @@ int main () {
154154 } else {
155155
156156 switch (input) {
157- case PAUSE:
157+ case P_KEY:
158158 paused = !paused;
159159 break;
160- case QUIT:
160+ case Q_KEY:
161161 goto end;
162162 break;
163163 case UP_ARROW:
Deleted file: source/parser.c−106 deletions
@@ -1,106 +0,0 @@
1-#include "parser.h"
2-
3-uint8_t main_buffer[BUF_LEN];
4-
5-uint16_t start = 0;
6-uint16_t end = 0;
7-
8-uint16_t length = 0;
9-
10-
11-int add_to_buf(uint8_t *input, uint16_t input_length) {
12-
13- if (BUF_LEN - length < input_length)
14- return 0;
15-
16- uint16_t space_end = BUF_LEN - end;
17-
18- if (input_length <= space_end) {
19- memcpy(main_buffer + end, input, input_length);
20- } else {
21- memcpy(main_buffer + end, input, space_end);
22- memcpy(main_buffer, input + space_end, input_length - space_end);
23- }
24-
25- end = (end + input_length) % BUF_LEN;
26- length += input_length;
27-
28- return 1;
29-}
30-
31-
32-uint16_t next_pos(uint16_t starting_position) {
33- return (starting_position + 1) % BUF_LEN;
34-}
35-
36-
37-keypress parse_input() {
38-
39- if(length == 0)
40- return NO_KEY;
41-
42- keypress output = UNKNOWN;
43-
44- uint8_t next_char = tolower(main_buffer[start]);
45- uint16_t next_position = next_pos(start);
46-
47-
48- if (next_char == '\033') {
49-
50- if (length < ARROW_LEN) {
51- output = INCOMPLETE;
52- next_position = start;
53- } else {
54-
55- length--;
56-
57- if (main_buffer[next_position] == '[') {
58- next_position = next_pos(next_position);
59-
60- length--;
61-
62- uint8_t escape_code = main_buffer[next_position];
63-
64- switch(escape_code) {
65- case 'A':
66- output = UP_ARROW;
67- break;
68- case 'B':
69- output = DOWN_ARROW;
70- break;
71- case 'C':
72- output = RIGHT_ARROW;
73- break;
74- case 'D':
75- output = LEFT_ARROW;
76- break;
77- default:
78- break;
79- }
80-
81- length--;
82-
83- next_position = next_pos(next_position);
84- }
85- }
86-
87- } else {
88-
89- length--;
90-
91- if (next_char == 'p') {
92- output = PAUSE;
93- } else if(next_char == 'q') {
94- output = QUIT;
95- }
96- }
97-
98- start = next_position;
99-
100- return output;
101-}
102-
103-void break_unfinished() {
104- while (length--)
105- start = next_pos(start);
106-}
Deleted file: source/parser.h−22 deletions
@@ -1,22 +0,0 @@
1-#ifndef PARSER_H
2-#define PARSER_H
3-
4-#include <string.h>
5-#include <ctype.h>
6-#include <stdint.h>
7-#include <stdbool.h>
8-
9-#define BUF_LEN 4096
10-#define ARROW_LEN 3
11-
12-typedef enum {
13- NO_KEY, PAUSE, QUIT, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, INCOMPLETE, UNKNOWN
14-} keypress;
15-
16-int add_to_buf(uint8_t *input, uint16_t input_length);
17-
18-keypress parse_input();
19-
20-void break_unfinished();
21-
22-#endif