Small block game in C
Commit 2fdb50f8f6eb
tarball7 files changed+37-142
@@ -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_parser9
+ GIT_REPOSITORY https://codeberg.org/Jaglekon/jag_parse.git10
+ GIT_TAG v1.0.011
+)12
+13
+FetchContent_MakeAvailable(parser)14
+15
+add_executable(tetoris16
+ source/main.c17
+ source/draw.c18
+ source/logic.c19
+)20
+21
+target_link_libraries(tetoris PRIVATE parser)22
+23
+target_compile_options(tetoris PRIVATE24
+ $<$<CONFIG:Debug>:-Wall -Wextra -Wpedantic>25
+)26
+@@ -1,14 +1,12 @@
1
-CC ?= gcc2
-CFLAGS = -Wall -Wextra -MMD -MP1
+.PHONY: all debug clean32
4
-SRC = $(wildcard source/*.c)5
-OBJ = $(SRC:.c=.o)6
-DEP = $(OBJ:.o=.d)3
+all:4
+ cmake -B build -DCMAKE_BUILD_TYPE=Release5
+ cmake -build build76
8
-tetoris: $(OBJ)9
- $(CC) $(CFLAGS) -o $@ $(OBJ)7
+debug:8
+ cmake -B build -DCMAKE_BUILD_TYPE=Debug9
+ cmake -build build1010
1111
clean:12
- rm -f $(OBJ) $(DEP) tetoris13
-14
--include $(DEP)12
+ rm -rf build@@ -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 clearBinary file not shown.
@@ -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:@@ -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
-}@@ -1,22 +0,0 @@
1
-#ifndef PARSER_H2
-#define PARSER_H3
-4
-#include <string.h>5
-#include <ctype.h>6
-#include <stdint.h>7
-#include <stdbool.h>8
-9
-#define BUF_LEN 409610
-#define ARROW_LEN 3 11
-12
-typedef enum {13
- NO_KEY, PAUSE, QUIT, LEFT_ARROW, RIGHT_ARROW, UP_ARROW, DOWN_ARROW, INCOMPLETE, UNKNOWN14
-} 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