فهرست منبع

upd solitaire

MX 10 ماه پیش
والد
کامیت
e85724b0c9
3فایلهای تغییر یافته به همراه26 افزوده شده و 16 حذف شده
  1. 9 1
      docs/CHANGELOG.md
  2. 15 13
      solitaire.c
  3. 2 2
      src/scene/play_screen.c

+ 9 - 1
docs/CHANGELOG.md

@@ -1,3 +1,11 @@
+## v2.0.2
+
+- Fixed cards from waste can be placed on the first tableau
+  
+## v2.0.1
+
+- Fixed memory leak
+
 ## v2.0.0
 
 - App rewrite
@@ -22,4 +30,4 @@
 
 ## v1.0
 
-- Initial release 
+- Initial release 

+ 15 - 13
solitaire.c

@@ -93,31 +93,34 @@ static void cleanup(GameState *instance) {
     gui_direct_draw_release(instance->gui);
     furi_record_close(RECORD_GUI);
     furi_record_close(RECORD_INPUT_EVENTS);
+    furi_record_close(RECORD_NOTIFICATION);
+
     list_clear(game_logic);
+    free(game_logic);
     buffer_release(instance->buffer);
     free(instance);
 }
 
-static void next_scene(GameState *instance) {
+static void next_scene(GameState* instance) {
     FURI_LOG_W("SCENE", "Next scene");
     current_state = current_state->next;
-    if (current_state == NULL) {
+    if(current_state == NULL) {
         current_state = game_logic->head;
     }
-    ((GameLogic *) current_state->data)->start(instance);
+    ((GameLogic*)current_state->data)->start(instance);
 }
 
-static void prev_scene(GameState *instance) {
+static void prev_scene(GameState* instance) {
     FURI_LOG_W("SCENE", "Prev scene");
     current_state = game_logic->head;
-    if (current_state->prev == NULL) {
+    if(current_state->prev == NULL) {
         instance->exit = true;
         return;
     }
-    ((GameLogic *) current_state->data)->start(instance);
+    ((GameLogic*)current_state->data)->start(instance);
 }
 
-static void direct_draw_run(GameState *instance) {
+static void direct_draw_run(GameState* instance) {
     if(!check_pointer(instance)) return;
 
     size_t currFrameTime;
@@ -146,22 +149,21 @@ static void direct_draw_run(GameState *instance) {
         check_pointer(instance->canvas);
         check_pointer(instance->buffer);
         instance->scene_switch = 0;
-        if (curr_state && instance->isDirty && instance->canvas && instance->buffer) {
+        if(curr_state && instance->isDirty && instance->canvas && instance->buffer) {
             canvas_reset(instance->canvas);
 
-            if(instance->lateRender){
+            if(instance->lateRender) {
                 buffer_swap_back(instance->buffer);
                 buffer_render(instance->buffer, instance->canvas);
                 curr_state->render(instance);
-            }else{
-                curr_state->render(instance);
+            } else {
                 buffer_swap_back(instance->buffer);
+                curr_state->render(instance);
                 buffer_render(instance->buffer, instance->canvas);
             }
             canvas_commit(instance->canvas);
 
-            if (instance->clearBuffer)
-                buffer_clear(instance->buffer);
+            if(instance->clearBuffer) buffer_clear(instance->buffer);
 
             instance->clearBuffer = true;
             instance->lateRender = false;

+ 2 - 2
src/scene/play_screen.c

@@ -219,9 +219,9 @@ void input_play_screen(void *data, InputKey key, InputType type) {
                     //pick from waste
                     if (state->hand->count == 0 && state->waste->count > 0) {
                         list_push_back(list_pop_back(state->waste), state->hand);
-                        set_picked_from(0, 1);
+                        set_picked_from(1, 0);
                         return;
-                    } else if (is_picked_from(0, 1)) { //put back to waste
+                    } else if (is_picked_from(1, 0)) { //put back to waste
                         list_push_back(list_pop_back(state->hand), state->waste);
                         reset_picked();
                         return;