Small block game in C
Commit 7058e495333e
tarball8 files changed+86-12
@@ -9,6 +9,6 @@ tetoris: $(OBJ)
99
$(CC) $(CFLAGS) -o $@ $(OBJ)1010
1111
clean:12
- rm -f $(OBJ) $(DEB) tetoris12
+ rm -f $(OBJ) $(DEP) tetoris1313
14
--include $(DEB)14
+-include $(DEP)@@ -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 not shown.
@@ -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 not shown.
@@ -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 */@@ -21,7 +21,7 @@
2121
2222
2323
#define FIELD_WIDTH 1024
-#define FIELD_HEIGHT 2124
+#define FIELD_HEIGHT 192525
2626
#define BORDER_WIDTH 22727
#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
#endifBinary file not shown.