From 6e8ce4b544f9f9ca497f4542ebef9e19967d3426 Mon Sep 17 00:00:00 2001 From: elukjanovica Date: Sun, 2 Jun 2024 20:13:40 +0300 Subject: [PATCH] --- images/assets/01_sprites.png | Bin 4614 -> 4689 bytes images/assets/11_sprites.png | Bin 5969 -> 6083 bytes images/assets/21_sprites.png | Bin 12625 -> 12904 bytes main.py | 130 +++++++++++++++++++++++------------ main_settings.json | 4 +- 5 files changed, 89 insertions(+), 45 deletions(-) diff --git a/images/assets/01_sprites.png b/images/assets/01_sprites.png index 6a526c73e443b102d5e247e2425e43ac6a7b27eb..65ab8994cb50d473b63797c56016d2fc99a5a441 100644 GIT binary patch literal 4689 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 literal 4614 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 literal 5969 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 timer_area[1] (1) - position y for timer area # --> timer_area[2] (55) - width of timer area # --> timer_area[3] (12) - heigth of timer area - win_area = pygame.Rect(74, 78, 128, 128) + win_area = pygame.Rect(74, 78, 128, 128) # "You win !!" area positioning # --> win_area[0] (74) - position x for "You win !!" text area in game mode # --> win_area[1] (78) - position y for "You win !!" text area # --> win_area[2] (128) - width of "You win !!" text area # --> win_area[3] (128) - heigth of "You win !!" text area - size = [20, 25, 116, 15] - cons = [15, 195, 12, 3, 9] - # size and cons (constants) are too complicated, I cant remember what each element was, sorry :( + size = [20, 25, 116, 15] # album name positioning + # --> size[0] (20) - x position of clickable area + # --> size[1] (25) - x position of album name + # --> size[2] (116) - width of clickable area + # --> size[3] (15) - height of clickable area + cons = [15, 195, 12, 3, 9] # constants, reffering to arrow + # --> cons[0] (15) - spacing between album names + # --> cons[1] (195) - position x for element in spritesheet + # --> cons[2] (12) - x position of arrow + # --> cons[3] (3) - aligned y position of arrow next to album name + # --> cons[4] (9) - size of arrow + checkbox = [233, 9] # checkbox positioning + # --> checkbox[0] (233) - position x for arrow in spritesheet + # --> checkbox[1] (9) - size of checkbox in spritesheet scaled_size = (18, 21, 108, 108) # --> scaled_size[0] (18) - x position for image in select mode # --> scaled_size[1] (21) - y position for image @@ -118,9 +129,9 @@ if current_size == SIZE_CHOICES[0]: # --> spaces[2] (20) - space between setting names, increasing # --> spaces[3] (30) - space between slider and non_movable_area edge, decreasing # --> spaces[4] (8) - space between setting names and non_movable_area edge, increasing - f_line = [92, 30, 80, 12] - s_line = [92, 45, 80, 12] - s_button = [175, 30, 10, 16] + f_line = [92, 30, 80, 12] # first line positioning + s_line = [92, 45, 80, 12] # second line positioning + s_button = [175, 30, 10, 16] # second button positioning # for list in f_line, s_line and s_button: # --> list[0] (135, 135, 218) - position x for element in spritesheet # --> list[1] (38, 53, 38) - position y for element in spritesheet @@ -149,6 +160,7 @@ elif current_size == SIZE_CHOICES[1]: win_area = pygame.Rect(104, 108, 180, 180) size = [30, 35, 161, 25] cons = [25, 247, 18, 3, 13] + checkbox = [296, 13] scaled_size = (22, 26, 158, 158) area = (100, 200) spaces = [14, 30, 30, 40, 8] @@ -180,6 +192,7 @@ else: win_area = pygame.Rect(200, 214, 360, 360) size = [50, 58, 328, 35] cons = [35, 455, 26, 10, 26] + checkbox = [565, 27] scaled_size = (43, 48, 310, 310) area = (197, 390) spaces = [24, 34, 50, 84, 8] @@ -404,59 +417,86 @@ def quick_game(): def render_albums(): - global current_mode, album_name, album_delete + global current_mode, album_name, delete_mode, accepted current_hovered_index = -1 size_to_y = {"small": 25, "medium": 35, "big": 65} y = size_to_y[current_size] - # Collect albums to be deleted albums_to_delete = [] + checked = False for hover_index, album in enumerate(list(storage["albums"].keys())): render_text(album, (size[1], y), screen) album_rect = pygame.Rect(size[0], y, size[2], size[3]) album_hover = album_rect.collidepoint(pygame.mouse.get_pos()) + + current_hovered_index = update_hover_index(current_hovered_index, album_hover, hover_index) + + album = handle_album_interaction(album_hover, album) + if album: + return album - if album_hover: - current_hovered_index = hover_index + if delete_mode: + checkbox_rect = pygame.Rect(cons[2], y + cons[3], checkbox[1], checkbox[1]) + checkbox_hover = checkbox_rect.collidepoint(pygame.mouse.get_pos()) - if album_hover and pygame.mouse.get_pressed()[0]: - if album_delete: - if album in storage["albums"]: - albums_to_delete.append(album) - album_delete = False + if checkbox_hover and pygame.mouse.get_pressed()[0]: + checked = not checked + + if checked: + if album not in albums_to_delete: + albums_to_delete.append(album) + checkbox_image = Image((checkbox[0] + checkbox[1] + 3, 0), (cons[2], y + cons[3]), (checkbox[1], checkbox[1])) else: - print(f"Album {album} not found in storage.") - else: - album_name = album - if album_name != album: - album_name = None + if album in albums_to_delete: + albums_to_delete.remove(album) - if album_name is not None: - current_mode = "select" - - return album + checkbox_image = Image((checkbox[0], 0), (cons[2], y + cons[3]), (checkbox[1], checkbox[1])) + checkbox_image.draw(screen) y += cons[0] + if delete_mode and albums_to_delete: + accepted = True + delete_albums(albums_to_delete) + delete_mode = False + + if delete_mode is False: + draw_arrow(current_hovered_index) + + +def update_hover_index(current_hovered_index, album_hover, hover_index): + if album_hover: + current_hovered_index = hover_index + return current_hovered_index + + +def handle_album_interaction(album_hover, album): + global current_mode, album_name + + if album_hover and pygame.mouse.get_pressed()[0]: + album_name = album + if album_name is not None: + current_mode = "select" + return album + + return None + + +def delete_albums(albums_to_delete): for album in albums_to_delete: del storage["albums"][album] - if albums_to_delete: - with open(DATA_FILE, 'w') as data_file: - data_file.write(json.dumps(storage, indent=3)) + with open(DATA_FILE, 'w') as data_file: + data_file.write(json.dumps(storage, indent=3)) +def draw_arrow(current_hovered_index): if current_hovered_index == -1: current_hovered_index = 0 arrow_image = Image((cons[1], 0), (cons[2], size[1] + cons[0] * current_hovered_index + cons[3]), (cons[4], cons[4])) arrow_image.draw(screen) -def album_deletion(): - # Not finished yet - pass - - def album_creation(): # Not finished yet pass @@ -1008,8 +1048,8 @@ settings_buttons = [info_button, menu_button, stats_button, continue_button, clo do_not_save = False -def button_check(pressed_button, run, current_mode, timer_running, album_delete): - global completed, not_shuffled, current_timer_text, current_moves, real_time +def button_check(pressed_button, run, current_mode, timer_running, delete_mode): + global completed, not_shuffled, current_timer_text, current_moves, real_time, accepted do_not_save = False if pressed_button == close_button: run = False @@ -1025,11 +1065,14 @@ def button_check(pressed_button, run, current_mode, timer_running, album_delete) current_mode = "game" elif pressed_button == delete_button: if current_mode == "menu": - album_deletion() - album_delete = True - else: - # Not finished yet - pass + if not delete_mode: + delete_mode = True + accepted = False + elif not accepted: + accepted = True + else: + delete_mode = False + accepted = False elif pressed_button == new_button: album_creation() elif pressed_button == quick_add_button: @@ -1047,7 +1090,7 @@ def button_check(pressed_button, run, current_mode, timer_running, album_delete) elif pressed_button == stats_button: current_mode = "stats" - return run, current_mode, timer_running, do_not_save, album_delete + return run, current_mode, timer_running, do_not_save, delete_mode win32gui.SetWindowLong(hwnd, win32con.GWL_EXSTYLE, @@ -1080,7 +1123,8 @@ def data_check(current_mode): # Game state run = True current_mode = "menu" -album_delete = False +delete_mode = False +accepted = False # Dragging and mouse interaction dragging = False can_move = False @@ -1193,7 +1237,7 @@ while run: for button in current_buttons: if button.rect.collidepoint(start_pos): pressed_button = button - run, current_mode, timer_running, do_not_save, album_delete = button_check(pressed_button, run, current_mode, timer_running, album_delete) + run, current_mode, timer_running, do_not_save, delete_mode = button_check(pressed_button, run, current_mode, timer_running, delete_mode) elif event.type == pygame.MOUSEMOTION and can_move: new_pos = pygame.mouse.get_pos() diff --git a/main_settings.json b/main_settings.json index 59c6fc1..04c93d7 100644 --- a/main_settings.json +++ b/main_settings.json @@ -1,11 +1,11 @@ { - "size": "big", + "size": "small", "style": "classic", "grid": "4x4", "gui color": 0, "music": { "on": true, - "volume": 8, + "volume": 0, "version": "serenity" }, "sound": {