@@ -115,9 +115,6 @@ void move_ball(Canvas* canvas) {
115
115
released = false;
116
116
lives -- ;
117
117
118
- snprintf (text , sizeof (text ), "LIVES:%u" , lives );
119
- canvas_draw_str (canvas , 0 , 90 , text );
120
-
121
118
// arduboy.tunes.tone(175, 250);
122
119
if (rand_range (0 , 2 ) == 0 ) {
123
120
dx = 1 ;
@@ -165,10 +162,7 @@ void move_ball(Canvas* canvas) {
165
162
//If A collison has occured
166
163
if (topBall <= bottomBrick && bottomBall >= topBrick &&
167
164
leftBall <= rightBrick && rightBall >= leftBrick ) {
168
- // Draw score
169
165
score += (level * 10 );
170
- snprintf (text , sizeof (text ), "SCORE:%u" , score );
171
- canvas_draw_str (canvas , 80 , 90 , text );
172
166
173
167
brickCount ++ ;
174
168
isHit [row ][column ] = true;
@@ -209,8 +203,42 @@ void move_ball(Canvas* canvas) {
209
203
}
210
204
211
205
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 );
214
242
}
215
243
216
244
void draw_ball (Canvas * canvas ) {
@@ -286,8 +314,9 @@ static void arkanoid_draw_callback(Canvas* const canvas, void* ctx) {
286
314
287
315
if (lives > 0 ) {
288
316
draw_paddle (canvas );
289
-
290
317
draw_ball (canvas );
318
+ draw_score (canvas );
319
+ draw_lives (canvas );
291
320
292
321
if (brickCount == ROWS * COLUMNS ) {
293
322
level ++ ;
@@ -320,6 +349,7 @@ static void arkanoid_update_timer_callback(FuriMessageQueue* event_queue) {
320
349
321
350
int32_t arkanoid_game_app (void * p ) {
322
351
UNUSED (p );
352
+ int32_t return_code = 0 ;
323
353
// Set random seed from interrupts
324
354
srand (DWT -> CYCCNT );
325
355
@@ -331,8 +361,8 @@ int32_t arkanoid_game_app(void* p) {
331
361
ValueMutex state_mutex ;
332
362
if (!init_mutex (& state_mutex , arkanoid_state , sizeof (ArkanoidState ))) {
333
363
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 ;
336
366
}
337
367
338
368
// Set system callbacks
@@ -401,12 +431,16 @@ int32_t arkanoid_game_app(void* p) {
401
431
view_port_update (view_port );
402
432
release_mutex (& state_mutex , arkanoid_state );
403
433
}
404
-
434
+ furi_timer_free ( timer );
405
435
view_port_enabled_set (view_port , false);
406
436
gui_remove_view_port (gui , view_port );
407
437
furi_record_close ("gui" );
408
438
view_port_free (view_port );
439
+ delete_mutex (& state_mutex );
440
+
441
+ free_and_exit :
442
+ free (arkanoid_state );
409
443
furi_message_queue_free (event_queue );
410
444
411
- return 0 ;
445
+ return return_code ;
412
446
}
0 commit comments