From 2ceec90ede681004013d627a98ca1350594792b1 Mon Sep 17 00:00:00 2001 From: elukjanovica Date: Sun, 3 Mar 2024 13:08:18 +0200 Subject: [PATCH] --- images/assets/01_sprites.png | Bin 3445 -> 4437 bytes images/assets/03_sprites.png | Bin 1917 -> 2879 bytes images/assets/11_sprites.png | Bin 8530 -> 5869 bytes images/assets/13_sprites.png | Bin 0 -> 4292 bytes images/assets/21_sprites.png | Bin 7835 -> 12201 bytes images/assets/23_sprites.png | Bin 0 -> 9922 bytes main.py | 126 ++++++++++++++++++++++------------- main_data.json | 8 +-- main_puzzle.json | 2 +- main_settings.json | 17 +++-- 10 files changed, 94 insertions(+), 59 deletions(-) create mode 100644 images/assets/13_sprites.png create mode 100644 images/assets/23_sprites.png diff --git a/images/assets/01_sprites.png b/images/assets/01_sprites.png index 0a5d03963a894dc5738eb148d0ad7704ac0d64eb..6f3fe36449c16d8949ea8dab158bbffb91fa3650 100644 GIT binary patch literal 4437 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 HZ5{GIbKO#1 delta 3243 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 Z4>v~q4`U_!nD++(pe*e!R9j%;{|h?;DZ&5% diff --git a/images/assets/03_sprites.png b/images/assets/03_sprites.png index 44ec2c3beebaa5497f34fd3eca88e854eb34719a..b37e76b37fe201970a69f425aa22d2261c016cf2 100644 GIT binary patch literal 2879 zcmeH}X*?9_7sp4|!XRWD+1rMZED_Pz2HE#P$Tk@3kSJRUMNA?pp$ylQk#&}gU3Nxf zYo_>EC%Tht!$`L~clp2iFYo^E?s@V2&iOs(%{kBa#dFWz7AAN^`Un635VW)~bp!x7 z2<)87$H_i_6c$ahg(JohW(;^u0j;tNE(FvD3INoj`46sgv+JYw*3M>9Qc{4N_aUjqMffZ0B&41v~}-0J3vnJBKc}lQIBsq{7k^>KyOQ zD9LtQ>_2MCSl;~Eo(Kk4lRbQkwKz=l3lK#P?Gskh^?|-E^+mh8L(9@$<=680pR|Ui z>KRDCIoD6Ag77xOYm{%g9YpJrpMD0Jyw0CSYE!zGf1rK{Y452c3zsFMI0nSg~#RDuZD7lNfX>|^5Q`GB4>r2_Vy`E^>lOnKlH_wL{p$!U0mw|)+Y1Ry-2Quaf$vkC}U z0jwvyYu`;D9qr02Pw(;1U4PK+6w%|jRS_?>P&TG?O+jn%F1%F6H@A^5HN4KP^yWld z*Dhf^!x3S2jHHOvr6u$Vi^@(U#hbV+HqF0mj@eKPf7g|7ViV!z$sxd{C&Ad0fDJdC zZz|c;w=_UQ+tZHUrrru$Y+7 z%#N=5X;z0nI&J5&Utu#iO?*iasAP};qrT&6{`+4_)gQlnUtIKj|3!?h6ltmAYIGAkn+a2LO6L0~$*gmAA#h!$QNcE7<;2@S!~{YTSM_aHpCV7Bxft7LahE2bxpJtooQ$ zxnj9-?yV69wq_jME7E9iz5|310nmJF4W_AB!AeS&YLwYj)JuvY5BGg4FcKU3Ovk|G zI;5>q&?6p&9mqj~Q*X)B%VmEq+=VkKIKg!5eerF{31EN>9WODwB=-UBdPA}&2W&Rq z7Xzq*jAKu<1*JTCIDIc-1aog7uxH?s!h6sE4IA&F$&NEBNoK@S`58{y{Z>j}l^hZA zlC0?NFrpaxEYqV2bhs$x*W41i9>{Lf@-|JY?4sTT)lbU=LNC|br*o!f!Hkf17X(o9 z?z9RCdbCd6(Ez$X@d9)Q)zt6ZN?rj>vzbvhF69>+YynL%AG*^nHw1SV!{l7gZY$4S zTvy0c+d6^>G`!I=M<;S67>HFGlDEX(K$9B9)&_*}(!Cb9FO2ZUJ(x&;tUOBM(rHcdXpGcxh5 z%7ZqW`m>wP$nRFea-CFZ!y8#(JJ#CM@idmwSJ9;pbL7@p z?wcN-=Z+^~uU=`GkxM@8Q2QLQ_ccMNvv7)M1%sCO*y(&r6Nw(dW~@=Yt5t;Ai5?W9XB6niWLW_?}4a+=-InO0gZqC$*0{ zcSF$^aSY<)$_^r$wShNyy?_fhGC#e!l~<7NQCnuzMEK!*x|cWK=sJ5=p#sIPXn3JQ z)~AFj_612GWN4_mMKF4bAh$QF@ajxi)1)UT@~PcJGMpCqBDg#9beYO%6JgGnWNE&e zusOWGmz;{XvCmR(Q|U~r8rZU$N9PqkO|5)R+F0nS3C{~+`WxI{G?$#65eWH$rUeRV&hwB_TK>8I-N#8nHcw|N zuJyNdJ7~>0i=-S2ti0QS{&T@hkq|_<^}+Rz?=t3%CUlhGv?QDj?+eKhsxx z_Qo+T8-`?~Ze2L=?8Sp&E=Ul-c1D;^S)cJ|3ZqxBYgr|HXdcb;pA||KJ!*FU1KeQiV{`ASd;fMHo!v0;PLe&Y` cv2PCKY^HACD$8f?{_(xFG_y5*ZS0%&JBBHCTL1t6 literal 1917 zcmcgt`(M&&7XFsEah!4-wy-rXTVBc)HB=OI*1U~Zyr7PyXckK7f;oV<47E|4RTFD$ zq(ZV8UCSI(5>dRSvx&%BCIJFL4vwiAC1jF1gF`!?&(7}t0sF)IJnuQ@ectnYKIey1 z6&oG8>%%{O2mrvY@UUPM0PJAv?@~hpJ^EnJiu7cM2}2-P+#R-rfc-juMGPQ^!C^7WJ?C(hf2z zIvzOsd=~pYI29QhY*>er#OVXm+_2*$0N6e9{_OBEinrG%O~~QM5R;{y))r6;assLi z0F3vC2L~h+N>y?hwb|!m<8+x+_*9wQ$Biy5^K|Q~Dl9YNb#{qK;!giWHvA$Ythr*3 z>1Mm|!2Yk>%xw*pt5Bli_UF^0$vdvf>yV5{sdEZm%3ldl(5ZRLrbSLgNl_-(l2v;) zGgPN7>g$&4wP||~6NnqMUQOT@D``2!LOb5PmY6C4MSz>gOikmtOZ)PFxIEP8(zH$z z%Y6uPHR^Lp#GB7?B`p*gdyp1Q*jjD{#VJ0yyT%y0^SCvJ7NZn6zz$Djdq3rJ7s%HH zLPifGzLXg|Ba(kp)aWYnNmYidpwvftUVcK2ndrDdfY4It_^x8L2qFmgK6RW^4H_b;U(WxEqD1gDnQFvRr!oln9$_by-$6EDWyFrKD|!9+O^l0(!a=CEg3d^^1U>0sNhE3 zw9;XM9Pla~79TD`-kg_2f&8N!#k4xChwHa}YiCPc=+iT|c<;{7?aru|4b~%H3E#av zGN&Ts{6cweK^Wex(-B^yZO0&6Uk6QbEcI4&W!_h!2AgGTuag#ab|rL@HKc)*X}D88 z@}ShJa#P)d{5ipDXj*)MT^qd~qm$T|+&8wuca8oIY;5i1@EyyC1j*FH=Qs2i>psNGh)*^DNZ+%ZMl*ipU=O9awY;p%+wPAb%%OF+@TOCEa8YZ!qXE0_4%{AJHp+) z=4Qdm{}K?+WMpBB{zu^9f$;MBO_2OSn|@OPhyLAxoJGhakxvqGf7ig@H}TSc5C2VL T?zK6t*8t%m(ZP2E)4%)`%21is diff --git a/images/assets/11_sprites.png b/images/assets/11_sprites.png index 3a39a6421511f028169e5c3a3b42b2615227e96d..7583652891d46d9cd9efaa8cf3f025d267697c03 100644 GIT binary patch literal 5869 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 ZCHQ3#fdIhtFZDyy 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 diff --git a/images/assets/13_sprites.png b/images/assets/13_sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..f27a33206aafc0a40154111df982ae62d3414966 GIT binary patch literal 4292 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 literal 7835 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 Pb#O#ui`@lAha&$E5e94; diff --git a/images/assets/23_sprites.png b/images/assets/23_sprites.png new file mode 100644 index 0000000000000000000000000000000000000000..14871c5e5bea5463bc24b97276923aca875cd954 GIT binary patch literal 9922 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 literal 0 HcmV?d00001 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