From eac68c789e6eddf914f7f50f8b06fafccab29f95 Mon Sep 17 00:00:00 2001 From: Cole Date: Fri, 12 Jan 2024 16:56:44 -0600 Subject: [PATCH] rewrite initiated --- .gitignore | 1 + README.md | 8 ++- src/main.c | 18 ------ src/{ => old}/Makefile | 2 +- src/{ => old}/app.c | 0 src/{ => old}/app.h | 0 src/old/main.c | 24 ++++++++ src/{ => old}/manager.c | 0 src/{ => old}/manager.h | 1 - src/{ => old}/renderer.c | 0 src/{ => old}/renderer.h | 0 src/{ => old}/resources/black.png | Bin src/{ => old}/resources/blue.png | Bin src/{ => old}/resources/green.png | Bin src/{ => old}/resources/light-blue.png | Bin src/{ => old}/resources/orange.png | Bin src/{ => old}/resources/purple.png | Bin src/{ => old}/resources/red.png | Bin src/{ => old}/resources/yellow.png | Bin src/{ => old}/tetromino.h | 0 src/rewrite/Makefile | 22 +++++++ src/rewrite/block.h | 25 ++++++++ src/rewrite/m_block.c | 50 ++++++++++++++++ src/rewrite/m_block.h | 11 ++++ src/rewrite/m_tetromino.c | 6 ++ src/rewrite/m_tetromino.h | 7 +++ src/rewrite/point.h | 17 ++++++ src/rewrite/r_block.c | 67 +++++++++++++++++++++ src/rewrite/r_block.h | 11 ++++ src/rewrite/r_def.h | 0 src/rewrite/r_ui.c | 21 +++++++ src/rewrite/r_ui.h | 7 +++ src/rewrite/resources/black.png | Bin 0 -> 881 bytes src/rewrite/resources/blue.png | Bin 0 -> 900 bytes src/rewrite/resources/green.png | Bin 0 -> 897 bytes src/rewrite/resources/light-blue.png | Bin 0 -> 900 bytes src/rewrite/resources/orange.png | Bin 0 -> 900 bytes src/rewrite/resources/purple.png | Bin 0 -> 138 bytes src/rewrite/resources/red.png | Bin 0 -> 899 bytes src/rewrite/resources/yellow.png | Bin 0 -> 901 bytes src/rewrite/sc_def.h | 15 +++++ src/rewrite/tc_input.c | 7 +++ src/rewrite/tc_input.h | 6 ++ src/rewrite/tc_main.c | 80 +++++++++++++++++++++++++ src/rewrite/tc_settings.c | 16 +++++ src/rewrite/tc_settings.h | 13 ++++ src/rewrite/tc_window.c | 15 +++++ src/rewrite/tc_window.h | 7 +++ src/rewrite/tetromino.h | 0 49 files changed, 435 insertions(+), 22 deletions(-) delete mode 100644 src/main.c rename src/{ => old}/Makefile (78%) rename src/{ => old}/app.c (100%) rename src/{ => old}/app.h (100%) create mode 100644 src/old/main.c rename src/{ => old}/manager.c (100%) rename src/{ => old}/manager.h (86%) rename src/{ => old}/renderer.c (100%) rename src/{ => old}/renderer.h (100%) rename src/{ => old}/resources/black.png (100%) rename src/{ => old}/resources/blue.png (100%) rename src/{ => old}/resources/green.png (100%) rename src/{ => old}/resources/light-blue.png (100%) rename src/{ => old}/resources/orange.png (100%) rename src/{ => old}/resources/purple.png (100%) rename src/{ => old}/resources/red.png (100%) rename src/{ => old}/resources/yellow.png (100%) rename src/{ => old}/tetromino.h (100%) create mode 100644 src/rewrite/Makefile create mode 100644 src/rewrite/block.h create mode 100644 src/rewrite/m_block.c create mode 100644 src/rewrite/m_block.h create mode 100644 src/rewrite/m_tetromino.c create mode 100644 src/rewrite/m_tetromino.h create mode 100644 src/rewrite/point.h create mode 100644 src/rewrite/r_block.c create mode 100644 src/rewrite/r_block.h create mode 100644 src/rewrite/r_def.h create mode 100644 src/rewrite/r_ui.c create mode 100644 src/rewrite/r_ui.h create mode 100644 src/rewrite/resources/black.png create mode 100644 src/rewrite/resources/blue.png create mode 100644 src/rewrite/resources/green.png create mode 100644 src/rewrite/resources/light-blue.png create mode 100644 src/rewrite/resources/orange.png create mode 100644 src/rewrite/resources/purple.png create mode 100644 src/rewrite/resources/red.png create mode 100644 src/rewrite/resources/yellow.png create mode 100644 src/rewrite/sc_def.h create mode 100644 src/rewrite/tc_input.c create mode 100644 src/rewrite/tc_input.h create mode 100644 src/rewrite/tc_main.c create mode 100644 src/rewrite/tc_settings.c create mode 100644 src/rewrite/tc_settings.h create mode 100644 src/rewrite/tc_window.c create mode 100644 src/rewrite/tc_window.h create mode 100644 src/rewrite/tetromino.h diff --git a/.gitignore b/.gitignore index d28e0a3..8cfcd25 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .vscode/ tetris-clone +*.o \ No newline at end of file diff --git a/README.md b/README.md index 68269b3..99dc2a7 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,11 @@ Here are some early screenshots of my progress: ![gameplay](screenshots/game_screenshot.png "Gameplay") ![gameover](screenshots/game_over_screenshot.png "Game Over") -Features left to implement: +I am currently in the progress of re-writing the entire codebase. I am a relatively new C programmer, and when I first started +this project I hadn't nailed down a C style that I like. So I have been working on updating the overall style of the code; plus +I have been challenging myself to use a ANSI-C standard. + +There are also quite a few features left to implement: - Update codebase to use cohesive style (still haven't landed on exactly what I like) - Re-Implement rotation algorithm; my original algorithm was extremely buggy - Empty rows that are full should "break" @@ -20,7 +24,7 @@ Features left to implement: - display upcoming block - introduce levels and increasing speed/score multiplier -I hope you enjoy! +I will be able to focus on those again once I finish the re-write. ## Getting Started diff --git a/src/main.c b/src/main.c deleted file mode 100644 index 2106f58..0000000 --- a/src/main.c +++ /dev/null @@ -1,18 +0,0 @@ -#include "app.h" -#include -#include -#include - -int main(int argc, char **argv) { - // Not great code if I were to need multiple options, but I just need to be - // able to debug - if (argc > 1) { - if (strcmp(argv[1], "--speed") == 0) { - a_run(atoi(argv[2])); - } - } else { - a_run(50); - } - - return 0; -} diff --git a/src/Makefile b/src/old/Makefile similarity index 78% rename from src/Makefile rename to src/old/Makefile index 8d1f2bc..49af283 100644 --- a/src/Makefile +++ b/src/old/Makefile @@ -1,5 +1,5 @@ CC=clang -CFLAGS=-Wall -Wextra -include raylib.h +CFLAGS=-Wall -Wextra -std=c89 -pedantic -include raylib.h LIBS=-lraylib -lGL -lm -lpthread -ldl -lrt -lX11 tetris-clone: main.c manager.c renderer.c app.c diff --git a/src/app.c b/src/old/app.c similarity index 100% rename from src/app.c rename to src/old/app.c diff --git a/src/app.h b/src/old/app.h similarity index 100% rename from src/app.h rename to src/old/app.h diff --git a/src/old/main.c b/src/old/main.c new file mode 100644 index 0000000..ca165d6 --- /dev/null +++ b/src/old/main.c @@ -0,0 +1,24 @@ +#include +#include +#include + +#include "app.h" + +int main(int argc, char **argv) +{ + // Not great code if I were to need multiple options, but I just need to be + // able to debug + if (argc > 1) + { + if (strcmp(argv[1], "--speed") == 0) + { + a_run(atoi(argv[2])); + } + } + else + { + a_run(50); + } + + return 0; +} diff --git a/src/manager.c b/src/old/manager.c similarity index 100% rename from src/manager.c rename to src/old/manager.c diff --git a/src/manager.h b/src/old/manager.h similarity index 86% rename from src/manager.h rename to src/old/manager.h index afa1df7..069594b 100644 --- a/src/manager.h +++ b/src/old/manager.h @@ -4,7 +4,6 @@ #include #include "tetromino.h" -// TODO - I'm not sure whether the internal functions should actually be here... void m_initialize(void); void m_update(void); void m_blocks_set_empty(void); diff --git a/src/renderer.c b/src/old/renderer.c similarity index 100% rename from src/renderer.c rename to src/old/renderer.c diff --git a/src/renderer.h b/src/old/renderer.h similarity index 100% rename from src/renderer.h rename to src/old/renderer.h diff --git a/src/resources/black.png b/src/old/resources/black.png similarity index 100% rename from src/resources/black.png rename to src/old/resources/black.png diff --git a/src/resources/blue.png b/src/old/resources/blue.png similarity index 100% rename from src/resources/blue.png rename to src/old/resources/blue.png diff --git a/src/resources/green.png b/src/old/resources/green.png similarity index 100% rename from src/resources/green.png rename to src/old/resources/green.png diff --git a/src/resources/light-blue.png b/src/old/resources/light-blue.png similarity index 100% rename from src/resources/light-blue.png rename to src/old/resources/light-blue.png diff --git a/src/resources/orange.png b/src/old/resources/orange.png similarity index 100% rename from src/resources/orange.png rename to src/old/resources/orange.png diff --git a/src/resources/purple.png b/src/old/resources/purple.png similarity index 100% rename from src/resources/purple.png rename to src/old/resources/purple.png diff --git a/src/resources/red.png b/src/old/resources/red.png similarity index 100% rename from src/resources/red.png rename to src/old/resources/red.png diff --git a/src/resources/yellow.png b/src/old/resources/yellow.png similarity index 100% rename from src/resources/yellow.png rename to src/old/resources/yellow.png diff --git a/src/tetromino.h b/src/old/tetromino.h similarity index 100% rename from src/tetromino.h rename to src/old/tetromino.h diff --git a/src/rewrite/Makefile b/src/rewrite/Makefile new file mode 100644 index 0000000..c5f3a0f --- /dev/null +++ b/src/rewrite/Makefile @@ -0,0 +1,22 @@ +CC=clang +CFLAGS=-Wall -Wextra -ansi -pedantic -include raylib.h +LIBS=-lraylib -lGL -lm -lpthread -ldl -lrt -lX11 + +default: tetris-clone + +OBJECTS = $(patsubst %.c, %.o, $(wildcard *.c)) +HEADERS = $(wildcard *.h) + +%.o: %.c $(HEADERS) + $(CC) -c $< -o $@ $(CFLAGS) + +.PRECIOUS: $(TARGET) $(OBJECTS) + +tetris-clone: $(OBJECTS) + $(CC) -o $@ $(OBJECTS) $(CFLAGS) $(LIBS) + +.PHONY: clean + +clean: + rm -f *.o + rm -f tetris-clone \ No newline at end of file diff --git a/src/rewrite/block.h b/src/rewrite/block.h new file mode 100644 index 0000000..a8b9369 --- /dev/null +++ b/src/rewrite/block.h @@ -0,0 +1,25 @@ +#ifndef BLOCK_H_ +#define BLOCK_H_ +#include "point.h" + +/* still unsure how i want to name structs and enums */ + +typedef enum btype_t +{ + bt_I, + bt_J, + bt_L, + bt_O, + bt_S, + bt_T, + bt_Z, + bt_Empty +} btype_t; + +typedef struct block_t +{ + point_t point; + btype_t type; +} block_t; + +#endif /* BLOCK_H_ */ diff --git a/src/rewrite/m_block.c b/src/rewrite/m_block.c new file mode 100644 index 0000000..127e489 --- /dev/null +++ b/src/rewrite/m_block.c @@ -0,0 +1,50 @@ +#include "m_block.h" +#include + +#define BLOCK_ARRAY_COLUMNS 10 +#define BLOCK_ARRAY_ROWS 20 +#define BLOCK_ARRAY_LENGTH 200 + +block_t *_blocks[BLOCK_ARRAY_LENGTH]; +block_t *_updated_blocks[BLOCK_ARRAY_LENGTH]; +int updated_blocks_current_length = 0; + +void M_Create_Blocks(void) +{ + int i; + for (i = 0; i < BLOCK_ARRAY_LENGTH; i++) + { + block_t *block = malloc(sizeof(block_t)); + block->point.x = i % BLOCK_ARRAY_COLUMNS; + block->point.y = i / BLOCK_ARRAY_COLUMNS; + block->type = bt_Empty; + + _blocks[i] = block; + } +} + +void M_Update_Blocks(void) +{ + /* implement */ +} + +block_t **M_Get_Blocks(int *length) +{ + *length = BLOCK_ARRAY_LENGTH; + return _blocks; +} + +block_t **M_Get_Updated_Blocks(int *length) +{ + *length = updated_blocks_current_length; + return _updated_blocks; +} + +void M_Destroy_Blocks(void) +{ + int i; + for (i = 0; i < BLOCK_ARRAY_LENGTH; i++) + { + free(_blocks[i]); + } +} diff --git a/src/rewrite/m_block.h b/src/rewrite/m_block.h new file mode 100644 index 0000000..ed54519 --- /dev/null +++ b/src/rewrite/m_block.h @@ -0,0 +1,11 @@ +#ifndef M_BLOCK_H_ +#define M_BLOCK_H_ +#include "block.h" + +void M_Create_Blocks(void); +void M_Update_Blocks(void); +block_t **M_Get_Blocks(int *length); +block_t **M_Get_Updated_Blocks(int *length); +void M_Destroy_Blocks(void); + +#endif /* M_BLOCK_H_ */ diff --git a/src/rewrite/m_tetromino.c b/src/rewrite/m_tetromino.c new file mode 100644 index 0000000..21c8e4d --- /dev/null +++ b/src/rewrite/m_tetromino.c @@ -0,0 +1,6 @@ +#include "m_tetromino.h" + +void M_Update_Tetromino(void) +{ + /* implement */ +} diff --git a/src/rewrite/m_tetromino.h b/src/rewrite/m_tetromino.h new file mode 100644 index 0000000..1f57c65 --- /dev/null +++ b/src/rewrite/m_tetromino.h @@ -0,0 +1,7 @@ +#ifndef M_TETROMINO_H_ +#define M_TETROMINO_H_ +#include "block.h" + +void M_Update_Tetromino(void); + +#endif /* M_TETROMINO_H_ */ diff --git a/src/rewrite/point.h b/src/rewrite/point.h new file mode 100644 index 0000000..a6ae79e --- /dev/null +++ b/src/rewrite/point.h @@ -0,0 +1,17 @@ +#ifndef POINT_H_ +#define POINT_H_ +#include "point.h" + +typedef struct point_t +{ + unsigned int x; + unsigned int y; +} point_t; + +typedef struct point_offset_t +{ + int xOffset; + int yOffset; +} point_offset_t; + +#endif /* POINT_H_ */ diff --git a/src/rewrite/r_block.c b/src/rewrite/r_block.c new file mode 100644 index 0000000..40e65fa --- /dev/null +++ b/src/rewrite/r_block.c @@ -0,0 +1,67 @@ +#include "r_block.h" +#include "sc_def.h" + +#define RES_PNG_FILE(name) "resources/" #name ".png" +#define TEXTURE_SIZE 32 + +Texture2D yellow_texture; +Texture2D blue_texture; +Texture2D light_blue_texture; +Texture2D red_texture; +Texture2D purple_texture; +Texture2D green_texture; +Texture2D orange_texture; +Texture2D empty_texture; + +void R_Load_Textures(void) +{ + yellow_texture = LoadTexture(RES_PNG_FILE(yellow)); + blue_texture = LoadTexture(RES_PNG_FILE(blue)); + light_blue_texture = LoadTexture(RES_PNG_FILE(light - blue)); + red_texture = LoadTexture(RES_PNG_FILE(red)); + purple_texture = LoadTexture(RES_PNG_FILE(purple)); + green_texture = LoadTexture(RES_PNG_FILE(green)); + orange_texture = LoadTexture(RES_PNG_FILE(orange)); + empty_texture = LoadTexture(RES_PNG_FILE(black)); +} + +void R_Draw_Blocks(block_t **blocks, int block_count) +{ + BeginDrawing(); + while (block_count--) + { + R_Draw_Block(*(*blocks)); + blocks++; + } + /* implement */ + EndDrawing(); +} + +void R_Draw_Block(block_t block) +{ + Texture2D *texture = __R_Get_Texture_By_Block_Type(block.type); + DrawTexture(*texture, block.point.x * TEXTURE_SIZE, block.point.y * TEXTURE_SIZE, SC_White); +} + +Texture2D *__R_Get_Texture_By_Block_Type(btype_t block_type) +{ + switch (block_type) + { + case bt_O: + return &yellow_texture; + case bt_I: + return &light_blue_texture; + case bt_T: + return &purple_texture; + case bt_J: + return &blue_texture; + case bt_L: + return &orange_texture; + case bt_S: + return &green_texture; + case bt_Z: + return &red_texture; + default: + return &empty_texture; + } +} diff --git a/src/rewrite/r_block.h b/src/rewrite/r_block.h new file mode 100644 index 0000000..26310c1 --- /dev/null +++ b/src/rewrite/r_block.h @@ -0,0 +1,11 @@ +#ifndef R_BLOCK_H_ +#define R_BLOCK_H_ +#include "block.h" +#include "raylib.h" + +void R_Load_Textures(void); +void R_Draw_Blocks(block_t **blocks, int block_count); +void R_Draw_Block(block_t block); +Texture2D *__R_Get_Texture_By_Block_Type(btype_t block_type); + +#endif /* R_BLOCK_H_ */ diff --git a/src/rewrite/r_def.h b/src/rewrite/r_def.h new file mode 100644 index 0000000..e69de29 diff --git a/src/rewrite/r_ui.c b/src/rewrite/r_ui.c new file mode 100644 index 0000000..acb7121 --- /dev/null +++ b/src/rewrite/r_ui.c @@ -0,0 +1,21 @@ +#include "r_ui.h" +#include "raylib.h" +#include "sc_def.h" + +void R_Draw_Ui(void) +{ + BeginDrawing(); + DrawRectangle(SC_GAME_WIDTH, 0, SC_UI_WIDTH, SC_HEIGHT, SC_Gray); + EndDrawing(); +} + +void R_Draw_Game_Over(int score) +{ + const char *score_message = TextFormat("Score: %d", score); + BeginDrawing(); + DrawRectangle(0, 0, SC_GAME_WIDTH, SC_HEIGHT, SC_Black); + DrawText("Game Over", SC_GAME_WIDTH / 2 - MeasureText("Game Over", 24) / 2, 200, 24, SC_Red); + DrawText(score_message, SC_GAME_WIDTH / 2 - MeasureText(score_message, 18) / 2, 232, 18, SC_Red); + /* Draw a play again button */ + EndDrawing(); +} diff --git a/src/rewrite/r_ui.h b/src/rewrite/r_ui.h new file mode 100644 index 0000000..ec6b1a8 --- /dev/null +++ b/src/rewrite/r_ui.h @@ -0,0 +1,7 @@ +#ifndef R_UI_H_ +#define R_UI_H_ + +void R_Draw_Ui(void); +void R_Draw_Game_Over(int score); + +#endif diff --git a/src/rewrite/resources/black.png b/src/rewrite/resources/black.png new file mode 100644 index 0000000000000000000000000000000000000000..d0f2187ad676479054224529fd175f3ddcdb42c3 GIT binary patch literal 881 zcmZvav1(R95QQfiBm^R2B~}S+B^Ew`8u^1BkPtM5jo=HM$}WY4o$cu@d;!a2Wo2Qf zh2=bhoweiKKM?-=Ul;D~>}6-aGiUb0+3C}R{k!`Sae!y57rh=%-`7Lk2opfJ|?nOij2 zn?Ooe%=YIJ+gc`a^OxpTIa78gg6tE@qz$QKX7>FZAhYLD3-#qnrD;KIy{cpyR@cEw zq`N*;cHL9<9M;Zk^4h>FWH^Z><&7& zG9VX~VD~^VI4^g4BPufmcjpl7I_IweG4D@{j8vG>$19v62i4Ek70Q+n4O)+%_pa@B za38DV^H<+~|2W=>2Yd19*WZs{?z}tPdHMAwzwge+!=u|fj~>4sx26kla=QBb91T5FK(sB$&cZtWs>F{~#8MdWSxgaA*ok!9oOIWg(uOjhOOvX@vU$+BsO* z1giwW!op&HfFRh}$~fP567KGEVP|KTnSF2G%$w=nt?jLgTV}S6+v9t6?sWU?nX=Dj zv)^VTo8H}@)HVB^{gHLcZbgKCNrABtX043^71MqTyC|guBJX|h{AR3ydD?}%R#-d3wjHv(1K}6Y>1NP||3a1NV z@l^)H;i@{Af$*vi8C7?ey$V*!EaR1cr;yd$1!_?#;2wUUoUJNX*X2^WCZ{|o2h~7p zv8J^Z(IvT!9%~tpClz4zK-RcgZZ{)JX9!-MgR$ydod(!ye~P4q%xM*#=3#Q9YHU4C zQ539z`t|kl#%4L!FuuP3;PbEV^YgZIZu98%eD`2}^<;E3z4_(si^C63j;~yL`sr}; l6&p5QWE=AR#26CVHg;km=s5R22=Bh@h25RK?Cf{u%)Z>;yScu)v1(@PxHY|7>t;7r&er_+ z@bIVElI`C)*sX2$Bl{(5m)#c;?k-Gp>uW{Jr*(`Pb$Fbfvj;@Zudr%&Jesh2V>Pad=0Q+e@di<%xQHz&BNqI)wA_9 zMMeeN#A?%wp>^@q>?0X{RE5C8xG literal 0 HcmV?d00001 diff --git a/src/rewrite/resources/light-blue.png b/src/rewrite/resources/light-blue.png new file mode 100644 index 0000000000000000000000000000000000000000..23c3f3958ba3202c63b76c53ee5164bf65dda0f8 GIT binary patch literal 900 zcmZvaKWkM%5XFx%h8TP(NE)kGY-Q&M@K59g9gq;@6&4D9fm5YRCBY`xoi6wR1Pkp3 zL_{U6poO3?*l8o!X=5|aeGkIB?|NZ(XD>VZJ9B0acXw`$HZE-d7}@Q~-CD=pSYNAo zZ-4(ca2mUJrrWj6*~r-K2^cQTJD15jD3Qs87#O zI9(=|US%-cTvZ1%EWGNojHj_0kK!Il8$IC0L66#&5QWDzY77R0U?V77TomjCJCUet&;zoB7{pQwv5-@(RVuO4_Ei1^EA6Jx zMhV!)La>+>U4XmDQyQaWLlKXYtp>Bz+&nwRMja<4>?bwUwzhg2~m>i!B4QFF_I`t%Hi(*?2g zDudy0RUOPgc-4oDs=LcxhLtmmyfW|vS?jVPTVcy$iOs&n}@z?S<{A}wT2tK(@NCO4{{t*0qU zf)%L$j&6?DD%i&4{{FMWzkhCBw(-{CukUwe?|)poaq;@?H@I;8_B3?jDWK{NDch@mzN&cBYfh51zmK2gMbcY5)KL literal 0 HcmV?d00001 diff --git a/src/rewrite/resources/purple.png b/src/rewrite/resources/purple.png new file mode 100644 index 0000000000000000000000000000000000000000..19f10b4bd60585233e3a8420d4102a4330e61037 GIT binary patch literal 138 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdzmSQK*5Dp-y;YjHK@*O>0977^n z-(EKqWl#_}eBr=hW#%Lc;}mdKI;Vst0In+}R{#J2 literal 0 HcmV?d00001 diff --git a/src/rewrite/resources/red.png b/src/rewrite/resources/red.png new file mode 100644 index 0000000000000000000000000000000000000000..958e9a5f46b1fc5eabf7ff5393ed88f1b2eb2a74 GIT binary patch literal 899 zcmZvav1^n;5XHwN#N)`JA|hDG6ws&`br?xp8Ia{)J*?ke=?vh9XXsv~ro5_r3Fl&|7`xRmCCK+jfwf`Lo3pbaE zMi^S%)JyB*(>)|71+cZ0f^6gK#u8CJ}X_ zA<<^}5i2yfF9Io@Fw37gwzPEQ;`hzV^a#0EBFH+S2)aY6m=Se<1&FA*Wlw#2hQjHB zSbCMgaJZ@tW+1%kLq^rzWiP|ZnMGb1c!I3v&Z#A(z%zW$Ia_wFwu_~7O-^}G4yu9H zV#RAKp$m2!JytRxPb$Fbfvj=4-0qDiogsL24#ui;`8B|n`%@ws#M1 q9zQ=nzVXyft!)g>&Vz$T2XD@tyTAVO@6{iJ?n>6&p5QQf(#1Qh(LK~}BEEZabD2QDmFX#aYK_b|hKX6b`5mG(u?BulKA5gKJ zTF_2G3&CPU@CVpg*o|}VgYe$FUfA8)%g%mh&g}F3y_=)WbDL&1!mY`jTF2ekSg-lf z(a|5X6SjZ*V7Io}kL;JMU3OnYxVt2h09tEd=4LXZ8O&N`4Sq$KyGceGVC{d0!otmE zq7jBxHx1H;_;e4+Ndasvr63(p#bf|p0T4Bp)C>=oiz0}I=IIL238Aqm#ULC_jY&kE zXh^g^KVpdn_jw?tV`lj?!PPVnI0kcN(5Oa6hU`L6*HpluK*D>w;ZTX&rmpB z5KFHz7!Fs}!3=~~eaNV~yX-|+IWx~I1CNo_+!?i`6u8F^oU=veYCB&_*W{E3<)9j9 zEtb5t5;|wM(PJqC@}vT+9>^LO%kAEX(iwtR=U}Wl7heNxu|Fl!LgutOp5|e4qw3ju znxZ6Ff%@;uh1InRwlUc`xcA}r_seH(y!G+x`!{Dke|vcG)cLEAvGwErgS)Rj9j?5% se&y%r<*&7k)8p-_t*p+1>EBCFUY~qBTHm>b>C^5~?Cwq8-8g*q54 +#include +#include + +void TC_Start(void); +void TC_Initialize(void); +void TC_Game_Loop(void); +void TC_Stop(void); + +int main(int c, char *v[]) +{ + /* Move somwhere else to parse options */ + /* =================================== */ + if (c > 1) + { + if (strcmp(v[1], "--speed") == 0) + { + TC_Set_Game_Speed(atoi(v[2])); + } + } + /* =================================== */ + + TC_Start(); + TC_Stop(); +} + +void TC_Start(void) +{ + TC_Initialize(); + TC_Game_Loop(); +} + +void TC_Initialize(void) +{ + int n_blocks_created = 0; + block_t **blocks_created = NULL; + TC_Create_Window(); + M_Create_Blocks(); + R_Load_Textures(); + blocks_created = M_Get_Blocks(&n_blocks_created); + R_Draw_Blocks(blocks_created, n_blocks_created); +} + +void TC_Game_Loop(void) +{ + int tick_rate, n_updated_blocks = 0; + block_t **updated_blocks = NULL; + while (!TC_Close_Window()) + { + R_Draw_Ui(); + if (tick_rate == 0) + { + TC_Process_Input(); + M_Update_Tetromino(); + M_Update_Blocks(); + M_Get_Updated_Blocks(&n_updated_blocks); + R_Draw_Blocks(updated_blocks, n_updated_blocks); + tick_rate = game_speed_setting; + } + else + { + tick_rate--; + } + } + R_Draw_Game_Over(0); + getchar(); /* putting this here just to stop prog from ending atm */ +} + +void TC_Stop(void) +{ + M_Destroy_Blocks(); + TC_Close_Window(); +} diff --git a/src/rewrite/tc_settings.c b/src/rewrite/tc_settings.c new file mode 100644 index 0000000..6c50576 --- /dev/null +++ b/src/rewrite/tc_settings.c @@ -0,0 +1,16 @@ +#include "tc_settings.h" + +int game_speed_setting = 50; +int target_fps_setting = 60; + +struct TC_Setting *tc_settings; + +void TC_Set_Game_Speed(int speed) +{ + game_speed_setting = speed; +} + +void TC_Set_Target_Fps(int fps) +{ + target_fps_setting = fps; +} diff --git a/src/rewrite/tc_settings.h b/src/rewrite/tc_settings.h new file mode 100644 index 0000000..d522dab --- /dev/null +++ b/src/rewrite/tc_settings.h @@ -0,0 +1,13 @@ +#ifndef TC_SETTINGS_H_ +#define TC_SETTINGS_H_ + +/* these settings could probably be more robust, probably doesn't matter until i need more*/ +/* Maybe have a load defaults, then optionally update? */ + +void TC_Set_Game_Speed(int speed); +void TC_Set_Target_Fps(int fps); + +extern int game_speed_setting; +extern int target_fps_setting; + +#endif /* TC_SETTINGS_H_ */ diff --git a/src/rewrite/tc_window.c b/src/rewrite/tc_window.c new file mode 100644 index 0000000..b4f4b58 --- /dev/null +++ b/src/rewrite/tc_window.c @@ -0,0 +1,15 @@ +#include "tc_window.h" +#include "raylib.h" +#include "sc_def.h" +#include "tc_settings.h" + +void TC_Create_Window(void) +{ + InitWindow(SC_WIDTH, SC_HEIGHT, "Tetris Clone"); + SetTargetFPS(target_fps_setting); +} + +int TC_Close_Window(void) +{ + return WindowShouldClose(); +} diff --git a/src/rewrite/tc_window.h b/src/rewrite/tc_window.h new file mode 100644 index 0000000..4f0f961 --- /dev/null +++ b/src/rewrite/tc_window.h @@ -0,0 +1,7 @@ +#ifndef TC_WINDOW_H_ +#define TC_WINDOW_H_ + +void TC_Create_Window(void); +int TC_Close_Window(void); + +#endif /* TC_WINDOW_H_ */ diff --git a/src/rewrite/tetromino.h b/src/rewrite/tetromino.h new file mode 100644 index 0000000..e69de29