Skip to content

Commit 8a7fa18

Browse files
authored
Merge pull request #188 from DevMilanIan/unleashed
Arkanoid show score, lives. Fix NULL pointer dereference
2 parents be096b9 + bf607dd commit 8a7fa18

File tree

1 file changed

+47
-13
lines changed

1 file changed

+47
-13
lines changed

applications/arkanoid/arkanoid_game.c

+47-13
Original file line numberDiff line numberDiff line change
@@ -115,9 +115,6 @@ void move_ball(Canvas* canvas) {
115115
released = false;
116116
lives--;
117117

118-
snprintf(text, sizeof(text), "LIVES:%u", lives);
119-
canvas_draw_str(canvas, 0, 90, text);
120-
121118
// arduboy.tunes.tone(175, 250);
122119
if(rand_range(0, 2) == 0) {
123120
dx = 1;
@@ -165,10 +162,7 @@ void move_ball(Canvas* canvas) {
165162
//If A collison has occured
166163
if(topBall <= bottomBrick && bottomBall >= topBrick &&
167164
leftBall <= rightBrick && rightBall >= leftBrick) {
168-
// Draw score
169165
score += (level * 10);
170-
snprintf(text, sizeof(text), "SCORE:%u", score);
171-
canvas_draw_str(canvas, 80, 90, text);
172166

173167
brickCount++;
174168
isHit[row][column] = true;
@@ -209,8 +203,42 @@ void move_ball(Canvas* canvas) {
209203
}
210204

211205
void draw_lives(Canvas* canvas) {
212-
sprintf(text, "LIVES:%u", lives);
213-
canvas_draw_str(canvas, 0, 90, text);
206+
if(lives == 3) {
207+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 7);
208+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 7);
209+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 8);
210+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 8);
211+
212+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 11);
213+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 11);
214+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 12);
215+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 12);
216+
217+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 15);
218+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 15);
219+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 16);
220+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 16);
221+
} else if(lives == 2) {
222+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 7);
223+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 7);
224+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 8);
225+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 8);
226+
227+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 11);
228+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 11);
229+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 12);
230+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 12);
231+
} else {
232+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 7);
233+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 7);
234+
canvas_draw_dot(canvas, 4, FLIPPER_LCD_HEIGHT - 8);
235+
canvas_draw_dot(canvas, 3, FLIPPER_LCD_HEIGHT - 8);
236+
}
237+
}
238+
239+
void draw_score(Canvas* canvas) {
240+
snprintf(text, sizeof(text), "%u", score);
241+
canvas_draw_str_aligned(canvas, FLIPPER_LCD_WIDTH - 2, FLIPPER_LCD_HEIGHT - 6, AlignRight, AlignBottom, text);
214242
}
215243

216244
void draw_ball(Canvas* canvas) {
@@ -286,8 +314,9 @@ static void arkanoid_draw_callback(Canvas* const canvas, void* ctx) {
286314

287315
if(lives > 0) {
288316
draw_paddle(canvas);
289-
290317
draw_ball(canvas);
318+
draw_score(canvas);
319+
draw_lives(canvas);
291320

292321
if(brickCount == ROWS * COLUMNS) {
293322
level++;
@@ -320,6 +349,7 @@ static void arkanoid_update_timer_callback(FuriMessageQueue* event_queue) {
320349

321350
int32_t arkanoid_game_app(void* p) {
322351
UNUSED(p);
352+
int32_t return_code = 0;
323353
// Set random seed from interrupts
324354
srand(DWT->CYCCNT);
325355

@@ -331,8 +361,8 @@ int32_t arkanoid_game_app(void* p) {
331361
ValueMutex state_mutex;
332362
if(!init_mutex(&state_mutex, arkanoid_state, sizeof(ArkanoidState))) {
333363
FURI_LOG_E(TAG, "Cannot create mutex\r\n");
334-
free(arkanoid_state);
335-
return 255;
364+
return_code = 255;
365+
goto free_and_exit;
336366
}
337367

338368
// Set system callbacks
@@ -401,12 +431,16 @@ int32_t arkanoid_game_app(void* p) {
401431
view_port_update(view_port);
402432
release_mutex(&state_mutex, arkanoid_state);
403433
}
404-
434+
furi_timer_free(timer);
405435
view_port_enabled_set(view_port, false);
406436
gui_remove_view_port(gui, view_port);
407437
furi_record_close("gui");
408438
view_port_free(view_port);
439+
delete_mutex(&state_mutex);
440+
441+
free_and_exit:
442+
free(arkanoid_state);
409443
furi_message_queue_free(event_queue);
410444

411-
return 0;
445+
return return_code;
412446
}

0 commit comments

Comments
 (0)