diff --git a/images/assets/01_sprites.png b/images/assets/01_sprites.png index 0a5d039..6f3fe36 100644 Binary files a/images/assets/01_sprites.png and b/images/assets/01_sprites.png differ diff --git a/images/assets/03_sprites.png b/images/assets/03_sprites.png index 44ec2c3..b37e76b 100644 Binary files a/images/assets/03_sprites.png and b/images/assets/03_sprites.png differ diff --git a/images/assets/11_sprites.png b/images/assets/11_sprites.png index 3a39a64..7583652 100644 Binary files a/images/assets/11_sprites.png and b/images/assets/11_sprites.png differ diff --git a/images/assets/13_sprites.png b/images/assets/13_sprites.png new file mode 100644 index 0000000..f27a332 Binary files /dev/null and b/images/assets/13_sprites.png differ diff --git a/images/assets/21_sprites.png b/images/assets/21_sprites.png index b7fec13..dcc68b7 100644 Binary files a/images/assets/21_sprites.png and b/images/assets/21_sprites.png differ diff --git a/images/assets/23_sprites.png b/images/assets/23_sprites.png new file mode 100644 index 0000000..14871c5 Binary files /dev/null and b/images/assets/23_sprites.png differ diff --git a/main.py b/main.py index c880bbe..a593abd 100644 --- a/main.py +++ b/main.py @@ -41,7 +41,6 @@ settings_data = load_data(SETTINGS_FILE) stats_data = load_data(STATS_FILE) gui = "gui color" -sensitivity = "sensitivity" music = "music" sound = "sound" style = "style" @@ -87,13 +86,45 @@ if current_size == SIZE_CHOICES[0]: FONT_SIZE = 11 FONT_SIZE2 = 10 puzzle_size = (128, 128) + # --> puzzle_size[2] and puzzle_size[3] (128) - puzzle size (?x? px) non_movable_area = pygame.Rect(8, 19, 128, 128) + # --> scaled_size[0] (8) - x position for image in game mode + # --> scaled_size[1] (19) - y position for image + # --> scaled_size[2] and scaled_size[3] (128) - image size (?x? px) timer_area = pygame.Rect(22, 1, 55, 12) + # --> timer_area[0] (22) - position x for timer area in game mode + # --> 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[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 :( 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 + # --> scaled_size[2] and scaled_size[3] (108) - image size (?x? px) area = (72, 142) + # --> area[0] (72) - x position for text "? of ?" in select mode + # --> area[1] (142) - y position for text "? of ?" + spaces = [14, 18, 20, 30, 8] + # --> spaces[0] (14) - space between setting name and setting in settings mode, increasing + # --> spaces[1] (18) - space between non_movable_area edge, decreasing + # --> 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] + # 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 + # --> list[2] (80, 80, 10) - width of element in settings mode + # --> list[3] (12, 12, 16) - heigth of element elif current_size == SIZE_CHOICES[1]: WIDTH, HEIGHT = 202, 216 @@ -115,6 +146,10 @@ elif current_size == SIZE_CHOICES[1]: cons = [25, 247, 18, 3, 13] scaled_size = (22, 26, 158, 158) area = (100, 200) + spaces = [14, 30, 30, 40, 8] + f_line = [135, 38, 100, 16] + s_line = [135, 58, 100, 16] + s_button = [238, 38, 12, 20] else: WIDTH, HEIGHT = 396, 425 @@ -136,6 +171,10 @@ else: cons = [35, 455, 25, 13, 26] scaled_size = (43, 48, 310, 310) area = (197, 390) + spaces = [24, 34, 50, 84, 8] + f_line = [276, 70, 200, 32] + s_line = [276, 105, 200, 32] + s_button = [479, 70, 24, 40] puzzle_version = settings_data["grid"] @@ -590,16 +629,10 @@ def update_puzzle_data(completed, sorted, current_time, current_moves, real_time # SETTINGS MODE scroll_offset = 0 -space_between_settings = 20 -settings_y_offset = 5 -f_line = [135, 38, 80, 12] -s_line = [135, 53, 80, 12] -s_button = [218, 38, 10, 16] - settings_x_position = puzzle_size[0] -total_settings_height = len(settings_data) * (cons[0] + space_between_settings) +total_settings_height = len(settings_data) * (cons[0] + spaces[1]) max_scroll_offset = max(0, total_settings_height - non_movable_area.height) -active_sliders = {gui: False, sensitivity: False, music: False, sound: False} +active_sliders = {gui: False, music: False, sound: False} gap = (s_button[2]/2)-(s_line[3]/2)-1 @@ -608,7 +641,7 @@ def slider(position, value_range, value, active_slider, setting): value_pos = second_x - s_button[2] / 2 first_line = Image((f_line[0], f_line[1]), (position[0], position[1]), (f_line[2], f_line[3])) second_line = Image((s_line[0], s_line[1]), (position[0], position[1]), (second_x, s_line[3])) - slider_button = Button((s_button[0], s_button[1]), (position[0] + value_pos, position[1] + gap), (s_button[2], s_button[3])) + slider_button = Image((s_button[0], s_button[1]), (position[0] + value_pos, position[1] + gap), (s_button[2], s_button[3])) mouse_buttons = pygame.mouse.get_pressed() if active_slider[setting] and mouse_buttons[0]: @@ -624,37 +657,46 @@ def slider(position, value_range, value, active_slider, setting): second_x = new_value_pos - position[0] + s_button[2] / 2 slider_button.rect.x = new_value_pos value = new_value - - if setting == gui: - settings_data[gui] = value - elif setting == sensitivity: - settings_data[sensitivity] = value - elif setting == music: - settings_data[music]["volume"] = value - elif setting == sound: - settings_data[sound]["volume"] = value + data_set(setting, value) return first_line, second_line, slider_button +def data_set(setting, value): + if setting == gui: + settings_data[gui] = value + elif setting == music: + settings_data[music]["volume"] = value + update_music_volume() + elif setting == sound: + settings_data[sound]["volume"] = value + update_sound_volume() + + with open(SETTINGS_FILE, "w") as settings_file: + json.dump(settings_data, settings_file, indent=2) def play_music(): music_file = settings_data[music]["version"] volume = settings_data[music]["volume"] pygame.mixer.music.load("misc/" + music_file + ".mp3") - pygame.mixer.music.set_volume(volume) + pygame.mixer.music.set_volume(volume / 100) pygame.mixer.music.play(-1) - -if settings_data[music]["on"] is True: - play_music() - - def play_sound(): sound_file = settings_data[sound]["version"] volume = settings_data[sound]["volume"] current_sound = pygame.mixer.Sound("misc/" + sound_file + ".ogg") - current_sound.set_volume(volume) - pygame.mixer.Sound.play(current_sound) + current_sound.set_volume(volume / 100) + return current_sound + +current_sound = play_sound() + +def update_music_volume(): + volume = settings_data[music]["volume"] + pygame.mixer.music.set_volume(volume / 100) + +def update_sound_volume(): + volume = settings_data[sound]["volume"] + current_sound.set_volume(volume / 100) def set_hue(): @@ -677,7 +719,7 @@ def set_hue(): settings_data[gui][x] = hue_value with open(SETTINGS_FILE, "w") as settings_file: - json.dump(settings_data, settings_file) + json.dump(settings_data, settings_file, indent=2) def change_hue(image, hue): @@ -912,6 +954,9 @@ real_time = elapsed_time total_paused_time = 0 timer_button.disable() +if settings_data[music]["on"] is True: + play_music() + while run: background_image, current_buttons = data_check(current_mode) current_time = pygame.time.get_ticks() @@ -1064,7 +1109,7 @@ while run: current_moves += 1 user_win = True print("clicked:", current_moves) - play_sound() + pygame.mixer.Sound.play(current_sound) if pressed_button == hint_button: screen.blit(original_image, non_movable_area) @@ -1113,19 +1158,19 @@ while run: for index, setting_name in enumerate(settings_data): if setting_name != "keybinds": - y = f_line[3] - scroll_offset + index * (cons[0] + space_between_settings) + y = f_line[3] - scroll_offset + index * (cons[0] + spaces[2]) - spaces[1] value = settings_data[setting_name] - if setting_name in [gui, sensitivity, music, sound]: + if setting_name in [gui, music, sound]: if setting_name in [music, sound]: value = value["volume"] render_settings_text(setting_name.upper(), - (settings_x_position // 2 + 9, y - settings_y_offset), screen, value) + (settings_x_position // 2 + spaces[4], y), screen, value) else: render_settings_text(setting_name.upper(), - (settings_x_position // 2 + 9, y - settings_y_offset), screen) + (settings_x_position // 2 + spaces[4], y), screen) if setting_name == gui: - gui_color_slider = slider((settings_x_position // 2 - 26, y + 8), 360, value, active_sliders, setting_name) + gui_color_slider = slider((settings_x_position // 2 - spaces[3], y + spaces[0]), 360, value, active_sliders, setting_name) for slider_part in gui_color_slider: slider_part.draw(screen) if dragging and gui_color_slider[2].rect.collidepoint(mouse_pos): @@ -1133,17 +1178,8 @@ while run: setting = setting_name elif not dragging: active_sliders[gui] = False - elif setting_name == sensitivity: - sensitivity_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, active_sliders, setting_name) - for slider_part in sensitivity_slider: - slider_part.draw(screen) - if dragging and sensitivity_slider[2].rect.collidepoint(mouse_pos): - active_sliders[sensitivity] = True - setting = setting_name - elif not dragging: - active_sliders[sensitivity] = False elif setting_name == music: - music_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, active_sliders, setting_name) + music_volume_slider = slider((settings_x_position // 2 - spaces[3], y + spaces[0]), 100, value, active_sliders, setting_name) for slider_part in music_volume_slider: slider_part.draw(screen) if dragging and music_volume_slider[2].rect.collidepoint(mouse_pos): @@ -1152,7 +1188,7 @@ while run: elif not dragging: active_sliders[music] = False elif setting_name == sound: - sound_volume_slider = slider((settings_x_position // 2 - 26, y + 8), 100, value, active_sliders, setting_name) + sound_volume_slider = slider((settings_x_position // 2 - spaces[3], y + spaces[0]), 100, value, active_sliders, setting_name) for slider_part in sound_volume_slider: slider_part.draw(screen) if dragging and sound_volume_slider[2].rect.collidepoint(mouse_pos): diff --git a/main_data.json b/main_data.json index 08bee3e..ebfb6b2 100644 --- a/main_data.json +++ b/main_data.json @@ -5,10 +5,10 @@ 0, 0, 0, - 50, - "00:00:49", - "00:00:24", - 8 + 93, + "00:01:05", + "00:00:40", + 0 ], "2.png": [ 0, diff --git a/main_puzzle.json b/main_puzzle.json index ffd4635..9ed675e 100644 --- a/main_puzzle.json +++ b/main_puzzle.json @@ -1 +1 @@ -{"puzzle 4x4": [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]], "puzzle 3x3": [[1, 2, 3], [4, 5, 6], [7, 8, 0]], "current 4x4": {"matrix": [[2, 12, 1, 3], [7, 5, 15, 11], [13, 10, 9, 0], [14, 6, 4, 8]], "selected_image": "images/albums/Original images/4.png"}, "current 3x3": {"matrix": [[3, 6, 7], [5, 4, 1], [0, 8, 2]], "selected_image": "/images/albums/Birds/1.png"}} \ No newline at end of file +{"puzzle 4x4": [[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12], [13, 14, 15, 0]], "puzzle 3x3": [[1, 2, 3], [4, 5, 6], [7, 8, 0]], "current 4x4": {"matrix": [[13, 2, 9, 12], [4, 1, 6, 8], [5, 3, 10, 15], [14, 7, 11, 0]], "selected_image": "images/albums/Original images/1.png"}, "current 3x3": {"matrix": [[3, 6, 7], [5, 4, 1], [0, 8, 2]], "selected_image": "/images/albums/Birds/1.png"}} \ No newline at end of file diff --git a/main_settings.json b/main_settings.json index 9000d32..eaae2fc 100644 --- a/main_settings.json +++ b/main_settings.json @@ -1,18 +1,17 @@ { - "size": "medium" , + "size": "big", "style": "classic", "grid": "4x4", "gui color": 0, - "sensitivity": 1, "music": { - "on": true, - "volume": 30, - "version": "serenity" + "on": true, + "volume": 0, + "version": "serenity" }, "sound": { - "on": true, - "volume": 40, - "version": "wood" + "on": true, + "volume": 16, + "version": "wood" }, "display": "time", "language": "english", @@ -37,4 +36,4 @@ "to_left_button": "K_LEFT", "to_right_button": "K_RIGHT" } - } \ No newline at end of file +} \ No newline at end of file