From f5fab463db37712b90b64115dc5d2203868e92f2 Mon Sep 17 00:00:00 2001 From: elukjanovica Date: Tue, 12 Mar 2024 09:11:04 +0200 Subject: [PATCH] --- TODO | 2 +- images/assets/03_sprites.png | Bin 2879 -> 3063 bytes images/assets/11_sprites.png | Bin 5895 -> 5969 bytes images/assets/13_sprites.png | Bin 4292 -> 4390 bytes images/assets/21_sprites.png | Bin 12861 -> 12625 bytes images/assets/23_sprites.png | Bin 9922 -> 10339 bytes main.py | 113 +++++++++++++++++++++++------------ main_data.json | 8 +-- main_puzzle.json | 2 +- 9 files changed, 81 insertions(+), 44 deletions(-) diff --git a/TODO b/TODO index 5e53afa..75251f7 100644 --- a/TODO +++ b/TODO @@ -6,7 +6,7 @@ TODO main: [meh] add setting - move pieses = slow/normal/fast/instant [meh] fix quick game window moving thing [meh] add popup when loading time - load previous or reset -[ ] add small notes on button hover +[x] add small notes on button hover [ ] add functionality in select and menu mode [sorta] add settings, info and stats with full functionality [meh] optimise code as possible diff --git a/images/assets/03_sprites.png b/images/assets/03_sprites.png index b37e76b37fe201970a69f425aa22d2261c016cf2..7eb548fb6b005e2cabecdc6414375ded181d337e 100644 GIT binary patch literal 3063 zcmeHJc{CJi8y{rI7)sXYO4^Ae##Wj!lXT0LB*a)proq??mxS!gjWK8{!X(Br8)aW6 zWf@#G7-JcGAtrlVzUh2_f9HJn|NH#$EWh`CpL3q){GR8$36|!jV6nqu0001Nb`5R~ z00_|eK3i0Xum8qn5AcmZfVC+MP|j5P$`AITpf{laKvf!O$3>VQOIhBqK`1CF08;u* z`j)h{wfPudGE}2cd;<)$Hovv^O8}I{!bU!_-|yPp002OO?@Kfa=n3CC4gi20&EQa* zP^U#gQt+^z6uc<($6lk+z1!f6Z=Q~US* zs?kP^o}2jqSkYG?CZAqj#}Qp`OAuQYp2z2dzbMHlcp;+lly$gX-6TY`s-8L~RI3fj zxM>Bs6mJ6giA}z>Rh~m(8-*O!_Y-)aO*^+l*Rk~LzXU2dclJ+q!G)vB9`Lmu-88Ih zSYOM87SZA(H^HIgv%#6sxJ}e5+)1=s&((Goi0@YyL@F*Y0@B#H9$lwZ+dNxBLO!_2 z6Cq0#M6r30iEXFQlDd&wQ^hIKr)t5E;sVo5^9kh1mXT`f~=~>T_B0!pM%rmhCXH(W@NUU z)Q}$ue~gq=R|-4A4SE;A=?^s{h;za?ZuKWTOXh>Cj^&ws#y@qWD#hZ)g4>xZN-2jL zyq58-(x)cBGqk7tHF94^nuw!ab5hP*dNYc7tiH?_{%GZ?~*1&9Gbx?5G;)(s3&5uo{rm39ho=oIASzu<_ z%g>{UdGC(Umo8bCw3nEt6iNb9Ys%%vEOslRzHQ95VgSNQo|g9$=!{MD@I7bS^|jC- zak39=t%e%85~2aBc1le;GsovPwRfJbK$6+3`@n{U3&Yi&uYLrQssT$ zNOEISEd+zA%3j_m}V&;V9Cs?;195G%-26zZCFe@=$yoR2Hd zFOIWd^u~FoCW=#!HI1P3Z^z`itx-fwtNb6i=A8|c!U5ZVYs&|r%NDvRVGKP?k&C$Y(qS1qPudy`c? zgM6a&yN?0r%}z!e@90lxwcqc`vn{=C-JxoBtv(kO7t&>A~^l)PLcGC`S%FPB}4WVP59yW{bA&u=<&nGJ0 zNo+|Q0GQt^G`ktzy?ZuxAi;w$yt8@j7+8a)tnug|2%y@#Wo(qUX z)6RKorBNPdMG=O5f}|x_A)G@1$Zm^em=GI z;gFv>hKTBmlZ-YfL(V-5U#knzfAC3d$7W_^a^=OC)N<(Q>$~5X#Bt!xVwv&PU9z43 zwarQSke;zYYY`mlZ8*bz7dAT9TfDe}Dm2czh|pQ-qX!D2hb3_^8h)v=ue*V^*zR%7 z;bl@lj0uabY{FK>=zC(eT`-zvvnpFMzD8fzyRz!B-dgo3KI^>xb&F?9{bifV&1|ue z`nIA|4YkEoLG{MF-m2GL+P6Xvl@W4lSBw;j5y$A{a0*5}-Q&adLMaHO#{*>ZkO?nN2K z*d~#e^l5|8#9kLFil0^OyZ|pTe3{9wFk1!lFs!Irg~>nJ3y3f4AkcT>`%PA!`9b&@ z1F2kM=F3=={qR@;FFpDDEH}rQ_qPN~7kcLMCT<_-GPvjW*hq07Z^10s#D_dk8Xb{4 zl*SWF6>$l@rCmsh9MRp@Qa0knh5cwfM^WyaMf`ER+u|fea~B_J#$QHN^lW%!)u^aD zI~lBsDFIgyBVOt1gfz1+e_$Uznn_-ars-Tc?J+EjMn_q8&_OH~AU_i$S4I+mof+1! za}bKLrr)ci14WA-)FLt91J{RwoB!EE9dZODN43$fw^Cvchh6N-_`(Lpba-tZAuk_v|4<<`x`Q>*CnYmL6bG}rWJgesKg7G%ez={32Kl~GlH9}9%`w=Q zr_3EPK~vnZ3*`iTvi)$BWg6b-|yjbhf=r9rV{1eMWPmD#?KZ1wshaq8k zdswwbT~`!lY}uKXn!Hz&<*Zm$MgO=y;-0$0jwjIm_aK@qGJ-QSviAfWM*rBpir1|9 P^({9;n8V9q$mst7VZQ?i 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 diff --git a/images/assets/11_sprites.png b/images/assets/11_sprites.png index 6bcb10837a791fa5e2fe8f39d7a69842fdbe5e8c..fba0bc01ba15e39f67ab4a64dc6d126d54aa88cb 100644 GIT binary patch literal 5969 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 diff --git a/images/assets/13_sprites.png b/images/assets/13_sprites.png index f27a33206aafc0a40154111df982ae62d3414966..901db4742dbd52f73ee0e114edb58d1424e787e3 100644 GIT binary patch literal 4390 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 F^e{-V??TVNa1`(1lhB3CmSnG5m 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 F{y(!G^t%86 diff --git a/images/assets/23_sprites.png b/images/assets/23_sprites.png index 14871c5e5bea5463bc24b97276923aca875cd954..4ef5b94c46dda70d31d8bc916fc378f31e436532 100644 GIT binary patch literal 10339 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 literal 9922 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 diff --git a/main.py b/main.py index 35bcd28..1ec30c2 100644 --- a/main.py +++ b/main.py @@ -254,13 +254,17 @@ class Image: class Button: - def __init__(self, sprite_position, window_position, size): + def __init__(self, sprite_position, window_position, size, popup_text=None): self.sprite_sheet = sprite_sheet self.sprite_position = sprite_position self.window_position = window_position self.size = size + self.popup_text = popup_text self.hovered = False self.disabled = False + self.popup_timer = 0 + self.popup_duration = 3000 + self.popup_surface = None self.update_images() def update_images(self): @@ -288,13 +292,43 @@ class Button: def update(self, mouse_pos): self.hovered = self.is_hovered(mouse_pos) + if self.popup_text is not None and self.hovered: + self.popup_timer += FPS + if self.popup_timer >= self.popup_duration: + self.show_popup(mouse_pos) + else: + self.popup_timer = 0 + self.popup_surface = None + + def show_popup(self, mouse_pos): + font = pygame.font.Font(None, 24) + text_surface = font.render(self.popup_text, True, (0, 0, 0), (255, 255, 225)) + text_rect = text_surface.get_rect(center=mouse_pos) + + # Increase the size of the popup surface + popup_width = text_rect.width + 14 + popup_height = text_rect.height + 14 + + popup_x = min(mouse_pos[0], WIDTH - popup_width - 1) + popup_y = min(mouse_pos[1] + 20, HEIGHT - popup_height - 1) + + self.popup_surface = pygame.Surface((popup_width, popup_height), pygame.SRCALPHA) + pygame.draw.rect(self.popup_surface, (255, 255, 255), self.popup_surface.get_rect()) + pygame.draw.rect(self.popup_surface, (0, 0, 0), self.popup_surface.get_rect(), 1) + self.popup_surface.blit(text_surface, (7, 7)) + + self.popup_rect = self.popup_surface.get_rect(topleft=(popup_x, popup_y)) + def draw(self, screen): if not self.disabled: screen.blit(self.hover_image if self.hovered else self.img, self.rect) + if self.popup_surface: + screen.blit(self.popup_surface, self.popup_rect) else: screen.blit(self.img, self.rect) + # Ability to move window def move_win(coordinates): hwnd = pygame.display.get_wm_info()["window"] @@ -853,26 +887,26 @@ long_text = ( ) text_surfaces, text_rects = render_text_in_rect(long_text, rect_area) - +names = ("Pause", "Menu", "Hint", "Shuffle", "Close", "Delete", "Continue", "Settings", "Quick game", "Add new", "Info", "Stats") # Buttons (maybe optimise?) if current_size == SIZE_CHOICES[0]: px12 = (12, 12) px14 = (14, 14) - timer_button = Button((0, 0), (7, 3), px12) - menu_button = Button((15, 0), (80, 3), px12) - hint_button = Button((30, 0), (95, 3), px12) - shuffle_button = Button((45, 0), (110, 3), px12) - close_button = Button((60, 0), (125, 3), px12) + timer_button = Button((0, 0), (7, 3), px12, names[0]) + menu_button = Button((15, 0), (80, 3), px12, names[1]) + hint_button = Button((30, 0), (95, 3), px12, names[2]) + shuffle_button = Button((45, 0), (110, 3), px12, names[3]) + close_button = Button((60, 0), (125, 3), px12, names[4]) finished_button = Button((75, 0), (7, 3), px12) not_finished_button = Button((90, 0), (7, 3), px12) - delete_button = Button((105, 0), (95, 3), px12) - continue_button = Button((120, 0), (110, 3), px12) - settings_button = Button((135, 0), (7, 3), px12) - quick_add_button = Button((34, 30), (22, 3), (55, 12)) - new_button = Button((150, 0), (80, 3), px12) - info_button = Button((165, 0), (7, 3), px12) - stats_button = Button((180, 0), (95, 3), px12) + delete_button = Button((105, 0), (95, 3), px12, names[5]) + continue_button = Button((120, 0), (110, 3), px12, names[6]) + settings_button = Button((135, 0), (7, 3), px12, names[7]) + quick_add_button = Button((34, 30), (22, 3), (55, 12), names[8]) + new_button = Button((150, 0), (80, 3), px12, names[9]) + info_button = Button((165, 0), (7, 3), px12, names[10]) + stats_button = Button((180, 0), (95, 3), px12, names[11]) to_left_button = Button((0, 30), (33, 136), px14) to_right_button = Button((17, 30), (97, 136), px14) BACKGROUND_IMAGE = Image((0, 64), (0, 0), (WIDTH, HEIGHT)) @@ -881,20 +915,20 @@ if current_size == SIZE_CHOICES[0]: elif current_size == SIZE_CHOICES[1]: px16 = (16, 16) px20 = (20, 20) - timer_button = Button((0, 0), (8, 4), px16) - menu_button = Button((19, 0), (118, 4), px16) - hint_button = Button((38, 0), (138, 4), px16) - shuffle_button = Button((57, 0), (158, 4), px16) - close_button = Button((76, 0), (178, 4), px16) + timer_button = Button((0, 0), (8, 4), px16, names[0]) + menu_button = Button((19, 0), (118, 4), px16, names[1]) + hint_button = Button((38, 0), (138, 4), px16, names[2]) + shuffle_button = Button((57, 0), (158, 4), px16, names[3]) + close_button = Button((76, 0), (178, 4), px16, names[4]) finished_button = Button((95, 0), (8, 4), px16) not_finished_button = Button((114, 0), (8, 4), px16) - delete_button = Button((133, 0), (138, 4), px16) - continue_button = Button((152, 0), (158, 4), px16) - settings_button = Button((171, 0), (8, 4), px16) - quick_add_button = Button((46, 38), (28, 4), (86, 16)) - new_button = Button((190, 0), (118, 4), px16) - info_button = Button((209, 0), (8, 4), px16) - stats_button = Button((228, 0), (138, 4), px16) + delete_button = Button((133, 0), (138, 4), px16, names[5]) + continue_button = Button((152, 0), (158, 4), px16, names[6]) + settings_button = Button((171, 0), (8, 4), px16, names[7]) + quick_add_button = Button((46, 38), (28, 4), (86, 16), names[8]) + new_button = Button((190, 0), (118, 4), px16, names[9]) + info_button = Button((209, 0), (8, 4), px16, names[10]) + stats_button = Button((228, 0), (138, 4), px16, names[11]) to_left_button = Button((0, 38), (46, 191), px20) to_right_button = Button((23, 38), (136, 191), px20) BACKGROUND_IMAGE = Image((0, 84), (0, 0), (WIDTH, HEIGHT)) @@ -903,20 +937,20 @@ elif current_size == SIZE_CHOICES[1]: else: px32 = (32, 32) px40 = (40, 40) - timer_button = Button((0, 0), (12, 6), px32) - menu_button = Button((35, 0), (241, 6), px32) - hint_button = Button((72, 0), (278, 6), px32) - shuffle_button = Button((105, 0), (315, 6), px32) - close_button = Button((140, 0), (352, 6), px32) + timer_button = Button((0, 0), (12, 6), px32, names[0]) + menu_button = Button((35, 0), (241, 6), px32, names[1]) + hint_button = Button((72, 0), (278, 6), px32, names[2]) + shuffle_button = Button((105, 0), (315, 6), px32, names[3]) + close_button = Button((140, 0), (352, 6), px32, names[4]) finished_button = Button((175, 0), (12, 6), px32) not_finished_button = Button((210, 0), (8, 6), px32) - delete_button = Button((245, 0), (278, 6), px32) - continue_button = Button((280, 0), (315, 6), px32) - settings_button = Button((315, 0), (12, 6), px32) - quick_add_button = Button((86, 70), (49, 6), (187, 32)) - new_button = Button((350, 0), (241, 6), px32) - info_button = Button((385, 0), (12, 6), px32) - stats_button = Button((420, 0), (278, 6), px32) + delete_button = Button((245, 0), (278, 6), px32, names[5]) + continue_button = Button((280, 0), (315, 6), px32, names[6]) + settings_button = Button((315, 0), (12, 6), px32, names[7]) + quick_add_button = Button((86, 70), (49, 6), (187, 32), names[8]) + new_button = Button((350, 0), (241, 6), px32, names[9]) + info_button = Button((385, 0), (12, 6), px32, names[10]) + stats_button = Button((420, 0), (278, 6), px32, names[11]) to_left_button = Button((0, 70), (107, 372), px40) to_right_button = Button((43, 70), (248, 372), px40) BACKGROUND_IMAGE = Image((0, 156), (0, 0), (WIDTH, HEIGHT)) @@ -1194,6 +1228,9 @@ while run: piece_y = row * puzzle_size[1] // len(puzzle_matrix) + non_movable_area.y screen.blit(puzzle_pieces[puzzle_matrix[row][col] - 1][0], (piece_x, piece_y)) + for button in current_buttons: + button.draw(screen) + if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: mouse_x, mouse_y = pygame.mouse.get_pos() diff --git a/main_data.json b/main_data.json index 7a393bf..0d5fdd4 100644 --- a/main_data.json +++ b/main_data.json @@ -14,10 +14,10 @@ 0, 0, 0, - 111, - "00:01:00", - "00:01:00", - 3 + 112, + "00:01:02", + "00:01:02", + 0 ], "3.png": [ 0, diff --git a/main_puzzle.json b/main_puzzle.json index 092d18d..71ed21a 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": [[6, 13, 10, 2], [4, 3, 5, 12], [11, 14, 8, 15], [1, 7, 9, 0]], "selected_image": "images/albums/Original images/2.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": [[6, 13, 10, 2], [4, 3, 5, 12], [11, 14, 8, 0], [1, 7, 9, 15]], "selected_image": "images/albums/Original images/2.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