jag

tetoris_c

public

Small block game in C

Star0
Watch0

Commit 7058e495333e

tarball

Jaglekon <58274093+Jaglekon@users.noreply.github.com>2026-07-30 18:15 UTC

8 files changed+86-12
added score
Modified file: Makefile+2 additions−2 deletions
@@ -9,6 +9,6 @@ tetoris: $(OBJ)
99 $(CC) $(CFLAGS) -o $@ $(OBJ)
1010
1111 clean:
12- rm -f $(OBJ) $(DEB) tetoris
12+ rm -f $(OBJ) $(DEP) tetoris
1313
14--include $(DEB)
14+-include $(DEP)
Modified file: source/draw.c+15 additions−2 deletions
@@ -162,8 +162,21 @@ void draw_board(piece current_piece, piece next_piece, bool *blink, bool is_piec
162162 printf("\033[%iC", FIELD_WIDTH * 2 + 1);
163163 printf("┠──────────┘\n");
164164
165- printf("\033[%iC", FIELD_WIDTH * 2 + 2);
166- printf("LEVEL: %u\n", level);
165+ for (i = 0; i < 3; i++) {
166+ printf("\033[%iC", FIELD_WIDTH * 2 + 2);
167+
168+ switch (i) {
169+ case 0:
170+ printf("LEVEL: %5u\n", level);
171+ break;
172+ case 1:
173+ printf("LINES: %5u\n", all_cleared_lines);
174+ break;
175+ case 2:
176+ printf("SCORE: %5u\n", score);
177+ break;
178+ }
179+ }
167180
168181 }
169182
Binary file: source/draw.obinary

Binary file not shown.

Modified file: source/logic.c+24 additions
@@ -258,3 +258,27 @@ uint8_t level_delay() {
258258
259259 return delay[0];
260260 }
261+
262+uint16_t line_points_add(uint8_t lines_cleared, uint8_t level) {
263+
264+ uint16_t score = 0;
265+
266+ switch (lines_cleared) {
267+ case 1:
268+ score = 40;
269+ break;
270+ case 2:
271+ score = 100;
272+ break;
273+ case 3:
274+ score = 300;
275+ break;
276+ case 4:
277+ score = 1200;
278+ break;
279+ default:
280+ break;
281+ }
282+
283+ return score * (level + 1);
284+}
Binary file: source/logic.obinary

Binary file not shown.

Modified file: source/main.c+38 additions−7 deletions
@@ -2,7 +2,11 @@
22
33
44 tetromino playfield[FULL_HEIGHT][FULL_WIDTH] = {};
5+
56 uint8_t level = 0;
7+uint16_t all_cleared_lines = 0;
8+uint32_t score = 0;
9+
610
711 int main () {
812
@@ -43,14 +47,19 @@ int main () {
4347 /* Init */
4448
4549 init_field();
46-
50+
4751 bool blink[FIELD_HEIGHT] = {};
4852
4953 bool is_piece = false;
5054
5155 bool paused = false;
56+
57+ uint16_t lines_to_level = 0;
58+
59+ uint16_t pot_score_lines = 0;
60+ uint16_t pot_score_fall = 0;
5261
53- uint8_t lines_cleared = 0;
62+ bool add_score = false;
5463
5564 piece current_piece = {};
5665 piece next_piece = init_piece((rand() % Z_PIECE) + 1);
@@ -172,6 +181,8 @@ int main () {
172181
173182 if (is_tetris) {
174183
184+ uint8_t lines_cleared = 0;
185+
175186 tick_blink += ticks;
176187
177188 while (tick_blink >= BLINK && i < 4) {
@@ -197,7 +208,13 @@ int main () {
197208 playfield[k][l + BORDER_WIDTH] = playfield[k - 1][l + BORDER_WIDTH];
198209 }
199210 }
211+
212+ lines_cleared++;
200213 }
214+
215+ all_cleared_lines += lines_cleared;
216+
217+ pot_score_lines = line_points_add(lines_cleared, level);
201218 }
202219
203220 i = 0;
@@ -207,7 +224,13 @@ int main () {
207224 continue;
208225 }
209226
227+ /* Adding score */
210228
229+ if (add_score) {
230+ score += pot_score_fall + pot_score_lines;
231+ pot_score_fall = pot_score_lines = 0;
232+ add_score = false;
233+ }
211234
212235 /* Creates new piece */
213236
@@ -278,6 +301,12 @@ int main () {
278301 } else {
279302 tick_fall = 0;
280303 }
304+
305+ if (down) {
306+ pot_score_fall++;
307+ } else {
308+ pot_score_fall = 0;
309+ }
281310
282311 down = false;
283312
@@ -286,7 +315,7 @@ int main () {
286315
287316
288317
289- /* When a piece is stuck */
318+ /* Looks for stuck piece */
290319
291320 if (!valid_position(current_piece)) {
292321
@@ -305,10 +334,12 @@ int main () {
305334 }
306335 is_piece = false;
307336 draw = true;
337+
338+ add_score = true;
308339 }
309340
310341
311- /* Looks if there is a tetris */
342+ /* Looks for cleared line */
312343
313344 int8_t j, k;
314345
@@ -325,7 +356,7 @@ int main () {
325356
326357 blink[j] = true;
327358 is_tetris = true;
328- lines_cleared++;
359+ lines_to_level++;
329360 } else {
330361 blink[j] = false;
331362 }
@@ -333,9 +364,9 @@ int main () {
333364
334365 /* Level up */
335366
336- if (lines_cleared >= LINES_LEVEL && level < MAX_LEVEL) {
367+ if (lines_to_level >= LINES_LEVEL && level < MAX_LEVEL) {
337368 level++;
338- lines_cleared -= LINES_LEVEL;
369+ lines_to_level -= LINES_LEVEL;
339370 }
340371
341372 /* Looks for game over */
Modified file: source/main.h+7 additions−1 deletions
@@ -21,7 +21,7 @@
2121
2222
2323 #define FIELD_WIDTH 10
24-#define FIELD_HEIGHT 21
24+#define FIELD_HEIGHT 19
2525
2626 #define BORDER_WIDTH 2
2727 #define TOP_GAP 1
@@ -84,8 +84,14 @@ bool valid_position(piece current_piece);
8484
8585 uint8_t level_delay();
8686
87+uint16_t line_points_add(uint8_t lines_cleared, uint8_t level);
88+
8789
8890 extern tetromino playfield[FULL_HEIGHT][FULL_WIDTH];
91+
8992 extern uint8_t level;
93+extern uint16_t all_cleared_lines;
94+extern uint32_t score;
95+
9096
9197 #endif
Binary file: source/main.obinary

Binary file not shown.