From 21936d8d918ec5cb5ead0b2721094bce19ed0583 Mon Sep 17 00:00:00 2001 From: TravoMaster <@> Date: Wed, 9 Mar 2022 01:36:46 +0100 Subject: [PATCH] Saper na ekranie --- .gitignore | 1 + assets/sprites/sand.png | Bin 0 -> 7060 bytes assets/sprites/saper.png | Bin 0 -> 22348 bytes classes/minesweeper.py | 109 +++++++++++++++++++++++++++++++++++++++ classes/system.py | 31 +++++++++++ icon.png | Bin 0 -> 38075 bytes main.py | 59 +++++++++++++++++++++ requirements.txt | 1 + 8 files changed, 201 insertions(+) create mode 100644 .gitignore create mode 100644 assets/sprites/sand.png create mode 100644 assets/sprites/saper.png create mode 100644 classes/minesweeper.py create mode 100644 classes/system.py create mode 100644 icon.png create mode 100644 main.py create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ba0430d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__/ \ No newline at end of file diff --git a/assets/sprites/sand.png b/assets/sprites/sand.png new file mode 100644 index 0000000000000000000000000000000000000000..df9fccdbed94480463ada351967a3dc3c2f84a9e GIT binary patch literal 7060 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 m3&Gtf&Y$nj+?jKd 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 e?aKete*F&->`R@V{+A#C00000: + self.offset_x-=self.speed + elif self.offset_x<0: + self.offset_x+=self.speed + if self.offset_y>0: + self.offset_y-=self.speed + elif self.offset_y<0: + self.offset_y+=self.speed + + def draw(self, window): + position_on_screen = (self.size*self.position_x + self.offset_x, self.size*self.position_y + self.offset_y) + window.blit(self.rotated_image, position_on_screen) + self.update_offset() + + def move(self, dir:int): + #południe + if dir==0: + self.rotated_image = pygame.transform.rotate(self.image, 0) + self.position_y+=1 + self.offset_y=-self.size + #północ + elif dir==1: + self.rotated_image = pygame.transform.rotate(self.image, 180) + self.position_y-=1 + self.offset_y=self.size + #zachód + elif dir==2: + self.rotated_image = pygame.transform.rotate(self.image, 270) + self.position_x-=1 + self.offset_x=self.size + #wschód + elif dir==3: + self.rotated_image = pygame.transform.rotate(self.image, 90) + self.position_x+=1 + self.offset_x=-self.size + + + + +class Map: + window:system.Window + tile_size:int + tiles_x:int + tiles_y:int + terrain_matrix:list + tile_palette:list + + minesweeper:Minesweeper + + def __init__(self, window:system.Window, tile_size:int=64, tiles_x:int=8, tiles_y:int=8): + self.window = window + self.tile_size = tile_size + self.tiles_x = tiles_x + self.tiles_y = tiles_y + + #dodanie grafik wszystkich typów terenu do jednej listy + self.tile_palette=[] + image = pygame.image.load("assets/sprites/sand.png") + image = pygame.transform.scale(image, (tile_size,tile_size)) + self.tile_palette.append(image) + + def generate(self): + #generowanie terenu + matrix = [] + for i in range(self.tiles_y): + matrix.append([]) + for j in range(self.tiles_x): + #od liczby zależy jaki teren, np. 0 - piasek + matrix[i].append(0) + self.terrain_matrix = matrix + + #generowanie objektów + self.minesweeper = Minesweeper(0,0, self.tile_size) + + + def draw_tiles(self): + #narysowanie na ekranie terenu + for i in range(len(self.terrain_matrix)): + for j in range(len(self.terrain_matrix[i])): + self.window.window.blit(self.tile_palette[self.terrain_matrix[i][j]], (self.tile_size*j, self.tile_size*i)) + + def draw_objects(self): + self.minesweeper.draw(self.window.window) + + \ No newline at end of file diff --git a/classes/system.py b/classes/system.py new file mode 100644 index 0000000..e2faba0 --- /dev/null +++ b/classes/system.py @@ -0,0 +1,31 @@ +import pygame + +class Window: + window:None + width:int + height:int + title:str + icon_path:str + + def __init__(self, width:int=640, height:int=480, title="", icon_path=""): + self.set_resolution(width,height) + self.set_title(title) + self.set_icon(icon_path) + self.mount() + + def set_resolution(self, width:int, height:int): + self.width = width + self.height = height + + def set_title(self, title:str): + self.title=title + + def set_icon(self, icon_path:str): + self.icon_path= icon_path + + def mount(self): + self.window = pygame.display.set_mode((self.width,self.height)) + pygame.display.set_caption(self.title) + if self.icon_path != "": + icon = pygame.image.load(self.icon_path) + pygame.display.set_icon(icon) \ No newline at end of file diff --git a/icon.png b/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..a59e0be25f4fabe8ef5783c3ceb1a4a6b512b7a1 GIT binary patch literal 38075 zcmXuKcQ{<#_dYy&FF`^OCJCd9-fJY7Vbl=4x6ym=goxgm(G4CEEjrO#^e{TnOZ2EA zB>5em_x=7c*Tpf;K6{;2?sczw$7rZ2krC4qgFqlMsPZc<5C{u){~^Q&t^{yA!UKMJ zhfq+^fGQ|}UEN)55RTR$5PNb^vb1uq9Am$!w#sWxVsA<}LcLt>_aEM;zNsaA1T!qu zAxKq`jf9XvKg1TV8MywmtleMR_*4;50VWI%6_XI>XjP8+r$WqQAtiP^*cOo3<`b&% zLU87g4(H97fYxbN)>!5H?zh(u&y{uEZB_#uYo zXi(}7CqWj6!7&{*66vDjZy@~r% z7U!+Oh-okihiJ6q&0lVH^!dz}V*Z+@tnC0i_G86m?MdZVA+Z3GiOY20|erIe*eMpEs^yGE)sY`;jamHa0nkV(DB*}yag^j_I$19so>(|WbNz; zQgF96_q4VG`yf2+z)DcK#@jG*S`Y{fg1(Y}Lp_-{f+P--6@wn3VX)+Qn z+Zm$~n*tfYv_DWW<1x``pam218a;E6w}IH6f--0axVuuN{9MP|MX@wC)K>`co8Z409 zsp^9&lXm3)ec!5P84nb?kWB*Igaiaq&y#A&$jx@N>J18fA&JKp5GhYtHylg*LXIx7 zX2oDaO%+(3f7p>lZ`*kSw_4Yp&j&#cBF~Xt_f{?FS9sOfzrq zM@8(zT>=aXUqb~L#KK)AgH1T#z5TJY1zJ^I0|Scq8Nk2dr!9a$guQ&HvdFa(Ee@O! zN2}*J!x-^n-sQcby(g%RwxNF`+f+u#kuHHY=>6ZcC3HLWq|H+0>7ohO+4DHUPvBv@ zw;GkYz^?OPHDBBg{G0xM%!6k+TFGUT1*MI!W+8JTVJ+DG77zBT_g#I~$IC$@3{6!& zSRhCl#C-3xI8Mg~xUnP46Nwxh{|*A+iytvMggtB1IjIW^`dNM<_`!cJ5ckg;dR9+C zDj`}6vkzy+`{sLP;kQ?##iMD_?0bqmZI995ezd+l3=`4(T$sQuxJwgnCmOzyZ4s`6 z4NBwM4w55#`r(;xeKVm-BC}VuX=h(GiT@(GLI%ytWqhC67|$d?$!WUsKRy5d4Xp@3cT zP9jd={U-zPkW0mJ!C4FW%(C~D$LE=g)|GiA*S#ZL}!KHxsRb)n}rt@_lr zH1LP6adEPac0`3RrQgEspU(s%infXkuSqUt-FlTPFb1_dBNe7rHUy6B+sg|47un`xP>ISo(Vl>mWf5-W7Bo zGIZNlYT@!nf-h$ZpJ%U8Ezy?{AS1Sl`(G!|Jgs=OJH-dy3utEmF>9x$o|2hg#?EkG zOEEmw$iq((;)i7x)(*3OP$bVFOrc3~%a{Hqr}Roa&>%^bG4mwG#^*kYw>jv)cGR1@ z|4{yv5@8K&LR?RT-hn7d_4C@_O}7Q_;>l*k1=oD>&XcdTxv~F?32i>gK(V!XPZ%z> zb2u}8osmoBpc&+tz&yR#$?%J1-NGS`>BKKHd-u;LS?Kfh`1@B7u9UwS6-n6Ar{%7@ zfRlxz8w2_IU)FZK;oR-Mjk^*#o}X0%Wan=3h@y>wfr02}@2V7G5KVx`d;2Q z_L8A@C)4&mQ7}Hw$lgDHIZrvmDNN1S?GBiLtGOUA2F%;9zL5 zn0cYQs?491Dk0PQ$K26ya#?_D&( z5U`^{lj`2#k#vU!12SHdFCck3x$-yRO$$C8mT3#`2d6fbzTf_m_4>{I8Dc0^IKbI3 ztu)M8TWUq~`sdxvxy(ep%`+5;7#?WFG1g!cs9n%02=jQHXrBMnc*4fOy^Gyq8zmr%T7mere9bOOlcr)pI}=W>1IR*F9hZ!`oWi zwx7NjL64M2fkG86<9laC>ieqr6(16)8|;hmV`@Y+!b#J5+tXWCFE>-?%^M8jWursk z`RBi`U7n+aproE{DGP9U8TfX=r(GZQm2PAqP(nDjiSH{yRa&7zd4Ik`WfSO@Iv1Uc zNMnoCbcdj`tHpZw7@J4w<~SRizStAx@B{dJ4qI zN4EmmvDR&+CfUPr)Ap RQ(bfAvPH5j~WQSk@@>jM^wAD};UJn0&}6?|MgIxuOK zMwJ>Drpa%MAs^@Du*9hTWd8sreMuN$))^uu+Ua*^McMfXA1hLx5QzP8$0^8Tbc;Mq zY`^x*`R#pj_IG#!?BP?>thuEn4y;7W)X2Wp7lM^Cc8M=UPp0Qm*?ag-zq#q>IW?;e zBZK12VgH#HGH?SUrMNxKH&gjacWBINc%R)D&wTArmGkZJscoZ=w;7Ntag`St#k7*d z@su*nJS6NUPTEL(TG?v<{kktE^}obtiE@FG`*DU7u%9%~XRRprmNd{1csUAq8QaOJ zU%L{?G-UkFw&-27@`XRiE^~@PDg}r}ZKsQ<>*rs1Ez-o=PRlaJE8^^5whAh{4;XRh z)$aJ9v?R)-I~E*!?u}U0Gz<7J+i=a3Un!2F&c-J)zCYLKd5Yp7BDTqSyO*`+x(+z> z@dGh7D}w_URk{_Y7Pl95x8H5*9uMv#!p6$vWj}U)B#D)Ujd8;BoKfPjScile)41xN zTR}bG_p~{07^uUX8dhS*9IAw$T=j~6hNkWrbLY7YhbUpF6Zf` z6d!3}!%Fy3Ztnbo_vTJKb<5v`^tm?O3TbB%6lK)YH(bK^sB``5Xld=ngt6z;&W&H> zT?UiveqKfq{`627Hx_dXwC_O6ohKy%U8*yc@qic7JdO9D`vG%+%`!b$yV05f;hzO1 z*jAm#b4^_dcyTJedfxpj&`tyegsUareVyKO8c~pv+`l>BofDqdQHr(r#0JZ$|sMf6xcp# zcj4Cz?^3?3k8rvPU--g zu`Hs*&;ODFKnaL!He%uX8%mF_z*amI1=?9dC+SKm-&GFX?LeC2_YmNlyBiNpmzk+Y z#!c%1+T{x2*H=aC&m>Bi35HR05bJD0Bfvt89~duyq%d_K*7t_03a(w;MHfvsd2OZrZR| zL*Fd*cO96hn!{%TP8C^ZzV)s4w)h;(Rt^?tx#S0XcisYdVI}I(Dj=xA#`)^2ES9ZY_R}33`4$-~dm2iZlFN;yz`Y&R8D( zH);2NG^I{u;=EvH@jaWcaD%J7*<%h;n-Cz5%O~xO0#XwS5}iZlUx$7X5@mZ-(2)LF zU^_r1_B$RU7TDZEd#rBafE#2PVs8$;qW1l(*GLWX#)wilBXXsMNkjkd#zb;%Qiv(%4itvJmaz)R^8hzA)PuDVANZAwD zuCHzLw|1&c_KqD-`Z#RFu%1nrNW_^08bIO%V*K0x7t%6;*OW!<{+3=u$>L^@xyI9a z_#%&TpFA*AH52?Q=ZgLmzLF-SICv?UdNUTW1Hb(QB@7}}#{$J`F8b$Tf{O5DuF1Mt zgk8JPa;g{>#H1m2l8W@a2!45(6+L7~;lCg8$%Yo9F3Ui6$PiTYdoze(8);b}5v=_s zO6vbo5V@4{IL2i0YpjJwPV}d5Z-gbDGV$;ZfE!l~n9F_JFRnG4CiSQd>0V7bGoysO z*cm;4o;P&V&e|HBbH0MO)b&k?xw_V&P|Ngo$WiB187Rrsq7W>;-7<{AKai38=2RsV zDj3*|`--aY#o$G!3C&5DS8sUEaj#b=4h@!TyE8MkBJ+|ld7*~?Vqbf3ZX5Vf*=)&rn!nXS& z{m0<*M3m3(2?Ca{~~#Spk2E{3b_< zhib)u3JCf{pNdXJ{Pb=y`}3zL^W?ib*TykxqF`;bTrj;o7vn9?J*_~Cf=^C!kK%Wm zF!8P!U2NH(dQrUxlXNw!31!*^mcpZ_CGe22NOLKMPK*P1=#qP1dF}9xC1)T%vMU8u zyr}2bf_+fwrK2v~kG)tgYIJR|4W2vT7WcgFm|Sz>+I%?AmAG2ZuS^^2i3c4zoaH7N zh7_}h13seu8VhMT!A{G}yG_Z>ikU!nFI=cB$vu+Ohp7EjijDobXZx!Si1wfE)_4HN zLy!6av5hAK@7aFQS2zB-_zX>AYLJB3;OVbnRJn9_4i4xbxQ)~m_A;JFdmsDyCUN;f z*DV*}?^o?qRomXCa8oXnAhMiIdXbA%s5DjQ7`RR8FMj%T_mXPor*mA!-6AB)K;r-JZVAL zwMcAq0)V(4%#YPoIF>dJuo(LjARJR7t^iEUCd2)s4~rEKnu)h-5#{h{43Ce4x`+hP z`PE^$L-@?6(1%M7TkR&!mfvJ4w|vo`SP@6=J`!ajkxQ7BKn-^ zYDPHx7~fqM#y*#j^Q8dUoAZ2bM`!1kZQrAMUSXZxNF5#>$#y&Z;=ozacxn{JQeIlL`NhpkCikS+Ur$LD=q7f}-8(yMWn{^3?wWOqdA8W7CY%y@ zmV?VMF)rA^sx?hb1OV^~zD2FBjD((L#s99D2?)6u45<&Lc6D?l1&p|Le&buDuJ$|W z1r7Mavj^Pb%COMvk@zF^<|;w6XLgUy-gUg*^2v3W898&~kMMeK{z(p{>Sj$$#8zJO+bR`X zIh+Eq3X7lOtLneNn+B6o-Nu~&tt^%{_E^lzr~H|LtBF{GqzXU0+xYlTZ<8hx2SwpA z{EyD4`IXO5%4Ha}P!{Pt@3tp~O28ZIfC5g?-BPy;5MT+L05Bx(+=hVxS4JIXI=em-g5lx5sU_u?@cr>BYze*nMFI<+bY6 zv0D=lq&W1ZcAG)MQ8CrKza|#0WmFV@o(5JY!eMgIu<&r)aGbeqmICygs%4rK3{=e) ztV>UrVNPivuZ^wRs@^P1m;p2^wDKuTO?@n^Nn7SxIq+wC9lurremdSPlw%Foruv%! zG-C{Rw8>1St7#6oKSYs^{L|aXQKm&=tlNQR8lUYI!(}#^b=G+3uxXQt+X!!BcVoG9C+b+`gX3`)O7yOKku;5u<5oW zP0eJ`mAAU(dzoJerK<@+-&Yz*-r@G5OKD!@EH2HRGTnj=7=*hgjfx-=K~)GO zeJ`3@TVN3LS!I|d`5o9yt8N*sze9qTm6H?c+(dG78aSG_ctq}5xRlCC{4T4dXd$Ll zSXh`Nc4Jr3BF%^)&5CICeA7e83mOl9*5xIUOZOwm+}`E}pdm(ilg%5KobHKjUQg;) zYr3eK8-MD%p=Z}CRy}>Q^DJ|$9H_KRCH60yHIIJ`2 z8r7q;XVOnRaLr;uW6Til*J~EVsm!!eF9O5NIKrOIt^YV+)Zh?vEm$*v;7tgTGr^nC z09jcQ+goN(*)=~;SHJXResM9JkGSx=^PpNyZEfxK?@5pTOR>GEP3*KZP0gUk%oyBV z?XK5duO@uyB8djo=^|^@RD@Nn(o<5)FncUrpM6X3(?JkDD^us#R_P*(v=Z@_YdYXW>CQWLc_mHZ43ODO3qQ7fIS>31eIdhiBh?R^Rzd~c;0&MS z_C@p*b^NCTo9Rq_=yoTQOD?QDx8@1$>?7jDOWS;6#8nanez*2oJ|UXo^dD<`La-v2 zs3J4i}O%}YO43%jSRqxe6#!1f3u#ItP`R`d;X`SgD(x5eIfo) z{7g@ep2`XXp=k75Biw-S1od(1+|_ACQO)pZz5u#gY;(%4(Zjf`WGl;5ns0j@SUCxc zsZ(OfG`}$u$3C>oJOlqQ2GQ5bDv6W*k=?7MFX^jzsO@%N@+9gCw6zqo#)BttK8bh1 zsu81F{<+v?Tz2+0zMaK=CDY%tUp-i`sUrf&B>M-J^;fu z+%2Kww4Jyqj5X|QupOZZryU+j$2|8A9`ZOuR!JXA2?GwETBa)V-6&S?;pGE+A^LBQ zBAc(_)zUJw2VRZ8!`?^a;D_?AZl0)wW?nU&3X^?HPTsiPhP9k5E{8eR{E+=WnAyH%$6cb9vxnX>og+0Kcn&_1EQ9N{CS8YkT+To3KH++_c%$%c2i z@BZQi0rW3`-!%TD5>#n-sU1AoO<;s24+Ej?JrjlxWm*c#kDHWMLV4! zVgf2i(O9tHdlP6k4a&VGYxy3^*;PJ^BLWL&l=nY|LBxH|Na>@Y+1vj`muEb)_V858 z+P6Svm6pCnj=IIyX3v+{d|1*$lo*8p2#d&10S5+`mF8(+D{-^H84m&aDRJTiWYoJ< z?1)J>?8$erpqIjf_0I{LZo5JwSiFjw(~LGBn){YKb+%WbFChZ6uI+$^;GU=<$0?SE z4F-A;GH;WNV(c7Xuz<$#O@+>XXHN&YJ z!W?K`*8uD=z}LpaN^iQ7@pk%c4wQ?ut6x09ZWDs23U${iymK4UhH=?Y^l;9J&Qhr{ zQlo^h5*!{FjI%q%Y1{AGV>^s=r3KA{tXGcLv0sbUCDUyk zG}*1U4M28hbFbO}+%_<4<`gvGs zBQBD+wZz67W3(r920Mr`#JTrtBrYP>I;)|*t%z6jTGG7+d1R*aqS zY4kAzs5RtRX)@eqlLnY>#VEqrtOnU;^&NEsnEP zNCnxn(4&tH%4=~L{0!t?`~MfQY*u#$g<#Z@kz0f&zK<+<(tVmZ-4vT`n3mRQ>Ji)v{UBTcswzv)O}IrV^2JA z-q}Q9LQtOG+&=re;*#>y|7igv?jbYE5arg&H0D;y5inKI@{KS-XjvJ1h>x_NkA_~R zPo?E)!QvFtX-K&%zH9;?Vcb(FFi~(Lezr4>@h0_TVrf(-);8l6*)i6x*;*R7P?WHn z{{{s8IxzP5Nf7dr7XXg-8I-d<0P><#Ed1zmM)^EPR!a4Kp6HPu&Fj<4p3Q;PQjXZ- zAIACFD=vOgKzD29zY6)FV*Q6TKGwg-X?r2umBFAgUT+so(z`PmUqnbBuQ)mo=tBH4 z-DJu5xAEc5oPmpcMFUpltfFIHwaX{*T*gUsmi)=Ik;2vD0!XOqo`H&orK`ydQhyj7F4Q`_bo&hZF;{0tCSj zz>3KNZ22NEMXX+cL=P4Ao-8lpmKo6US`k|jnXTwW=sGAIzGC0@Pyxs?0_nDjbOQ^? zc|`I+k1#zMfLRW)c7s30?B2$hNHroeBC=K&-IUi~r4%bov9p3ocBgil*Dqyn$kZ{A zz2ZP^qE9w2qON{Q6dN3=uJnyqJHxs-!b-*_S@uw6<$n=}kyGkD1I0=R&)yXHA6 z_^m*<-_Cd#VqP$oACf-IAxeUReJ}Z5qzVSczGD=s%h8mOt75fBup(wkGDP z5y*sGa`LZJO9x+JCDWqQ?K$1$3c0zQzbJ-c`b7N5RNqF$*oeHq9qlH2A|}yB0ybr5 zVM6ez8|H~K3C^$y+r)4rd}R{ngMrE~&nD+tL|gpGlowG0p4vsiBx12!qmOmZ%wM%3QqB2%PY7ueGn!l)2{lN=O_4e%>0DJ!bA9>kS4lk}_R+)) zu=f@*nTJNe1XF_dED|tuFdoqyhZN*O{OttugIB<$;KEl}I%zk|!Qjc*%Er?AQq5k9 z0huywu9nK%X%mmf^a^8&E;;W*&l5wgpvS}MTrpGjTHJ<6`A+ro?!7H%A^LK;6aijD zKuYh>ENQ$*YEkD%?5 z$6XCned>x{x$^G zktiEYQD@q79_^m$V-jj)t?d<3u<)kg7B_RxP?S%_1_*m|N|u)i>~^I?E01$$)_!4i z?0wPpKt((bqKLRdxRH{9g{ys$hs=5MeU~0&eL`1*4N&c>Cj6>KnlVytbv@$Eg3@sO zf@R!YvzSviDg|ZjpGAXomuawZPA9V=tkgP{7;E=$aoz6u=8Xmn12nK<7I8Uy{wxFE zq z@@hr?XAjRV5g{s>Q29i|CP?-yV}sSn1}*79`i4&+tVDOY2R|#vTFVR}M9*&~GRMIA zd`G$$KAQ3fyY^vM0XNlzczmVjW2x~JrI!FEQaw$-kUIUtm%VJ@S0}%(-WrM~5)ubt zoZRGOD$V>hK3L2jf8{;YMAc*=k{2C4KlNEI%2=nqzsN$V>)nLmfY zqBz5rGT(5j!tzJDPJjtJfVhId<@`8f5h@O_4QAaZ?qi{aapbfGL%5zggSip8>0sP`xRuP)z!y_BJ5DLihH}yW|}wzqFOh46HJ7;dIIopbFSLJ}XBU zv0--B)^7*ox#BU=`4nV)C9_RPqGNi_KCfY+^_OX5P@6X~`4sMhl{=dQVb51?ovI?R{VH@ zAr__s*1JVGHBM&hBXXXyVr0}RvM9BNe0(fXvmHLPB_i%@q#D#A%ln<#I85ue>SE0k z@)QxL={||r{%1L!HBystXTKXzE%(xbyc78rtz$uXED&eO9^F^`$Jf%ogT|I;{SUL~ zN}RgE8p>*vsK>kwm`dc(LU%E*9yC@JkNmQaly^-t`G#5hOksek=IF#sv5R zpe-xB$mxJ&pZiAa+^XEB=6l-s6}9nMJd&@})y{rX&p<|+k}@5O#;3GSr<=1$Swn;J2+@G_7SpCBt+n#JN%PUm@*3q^3n zp?=4sE}${57b_DATtd_h(+jCrtGth=a+=rhd6b`GJ-3a|fx@`8={?V2qjD7%eNQA8 zYwbg0s!??8;SAQPyoaeW?x`l{%}c5-waOb%*8!g(GwBNQ=QzA+SAU7^cbR~^z z*Bip(@{WVWC9+ei-W(o~u$(dZh!d!E2Rzi;GK~r))b4WbdhVp`mMbE{!4FGiLRh34 zm8Ie1DG;YfRcT>c5HTW@slUq_zMTfvnlEsiYTzxhDzY!&3}Y7Ub#m0gmRfq5%m`Y> z72Qim&4jK42x0^6!zX z@hNY=352!cW?WzYT<>*Y<8MEGg>7A2n_-q(n)H~M7;&MJn$3e%+WezO<1%n@@xeUp zY85qIYt{yGXr!r3+)|9I{s_fYyk#RQI%vF2Z1`8?SCtBw!zoes&93Nc22}mKzshATh`<+32*Fajo3GYVU! z#!J&1>)YAO08RC8Wqfu~jT4ApDe(h4NtD1hRi_m^+4Bl>UufGGBT$I>;sFWcO%7vK z7oIm?y_)fxRSK06p2I>sPmT1-D@|$a(+qS9>&>$Hfl+i`yPk=?2ujUS3rCs3RXNXz zxM2CVGH6aH8ROdlH{09C+m%3jlV7`Jh4&CRz3cWG6FN;>#`PwW%l!RAnTPHAWU(v7 zAr%rdg&(=d_^p+ z4ffHoP>5Me6G~B4Y^^D~us}qzbraE|eA=Zne>=!n;1A=BE)+QOQM13d%=RqY+rBg9^z$-e?Wl01rro^yWY~nKfS4exgBrYcg zes;hRDUYqJYWDsFC6|VSR$(k*xtte*#R#8SZvNXGTVwIVsh?^IM6YKf7X zqfWJ#Q&-Me^A>*dmo$7_QUA2o`I95pC3L-qzCk+R(2s+jI2Z z=+|zHr-E<^x0Wu)ULk_mR9RJvn9LpVfXi>dxFSb8I$l>=d1QRD>#fB|n*Ij-sb!jy zmDxM+|5Om6zxTQRtL_Nj@h_f0PiI*p3p}*fNy^iZdp=UDq8WeGd%?!BQdwP8rm1wf zX>Cpx6^t|p9$364Z2cu~oB$jSi`O}u5TcKN18G-zELwRKZM6Z5?=x~nH;TcIyK4Q~ zZ$ylC!FWTPEAJ2Iakj%|>qr2Z*Zs&DQ1*whspoZJOkecc2kFeLUY`SK@uTpbR$peK zdkbz|U7cFH3VQCkrw)-WB4}ih0x3w(x}Wb$(ihifuS2?2pJQB;rZ+fSY!HhXIrto? zVk*LH6O1$3XxFnG+}Ay6li_hguxm_-4{)zfNqep}k*JPcg?1C!SvAgpSEfN>kn4961J3mh%EipXgL?5uga$&qU)0?X%o3>~YEMlmX>I;D7CdQJ zE5o_@v-`g>W8z@`!T$z_zq43^qk{8-6BE?RQhks8n1D$iZb09}+Um$bw;*ucy-wd3DPb?{~W$rGgc>;tu7Vy z>$BglHEDkR$jk4vuuf~N0W-aT<}cZ6Awd_X|5^xvL?JXOsZ;^(P1KwUL*wgH-F`+S zjJG!uMQn}r)&E_gI!N=>pw-Q8e1eN7YM9y2M`+njCh2+R1hr{;bDkpUp}3w?C;SKl zq%v4c5NsyKk#${&4bbemo)3`y4E)F6C0{>0D0|D2iM1VC;0wTO-_`pp>;H4DTbP!* z|Bcidptb`}e*FH@R;u={Dm1&4F3M(HHsFc|5U)TWwFB&MGY*|2HHVMnI7y7$;(YF* z(;y5yGaYNH$Q&zg*iNeDlQR zro_cQ{^TW-GG0KJlSSJ2V;Xk%$971OClx$3!Kdq5$J02hQCDv&W_;Z%gKIyo^s9#c zp#QLT!!&I#{Jf44pU=r`@9b}#t@`b#>k>SiS#qM^3vWmWfE!RU(uUogcP4AYf4-OP%@fR_V_#esl?hX zbfNK(F6STv0S8*td;kTyC95qtE@I;|8XffIJ(XT5M=b=a1V1XGW)wJt0%RXMA$p=m zmZ^_@12j_sV&)aL8a2vulGWIBbJSBK{;b9mMhx=h71x7ttG1~{FSLA{ZJd1vZ{>q= zN;fat8Oa0C+Ku^M2262!Uy1;6Y(wv~gwpTcdu6^R{QexxF>pZQ0N343tvS4K1W)1H z&%jkEkZD;kpkk7?S6#1iM*a3rUpx(Jq3nElDU?d9{a?32KdxWb!aap@q#b+CuLR))K&3^BUSZrAg-Qx z3Yi^j7d`8{!|CohW2yMuKyp9Wl>V<+se*`upO^aULcJ17AKuM>^esoSH*1xK`?O{3 zLX8B;2o~2<)I>|j;R`nycTM1CRT-2BIS%qmN^)fgGP3*#(SX2&P5noKV=Duxm$MRY zh9BNbo|g@=hVKPz?LwlNuIFubu_8~L=qL{f=KuPKYq`3;5ZqB^)m=iwmIl~uZEe># z`bmNgO&!>GKXQ3cdX@LF)T#{`b^2fKZ}JgVVOL3~pkZmTvB6P%i_sIH zZfW^X$D=koS+kxbUQxlzF>R#8_mrYYbCENT!ZN(GJo%9w<`MOzs_WZto_Hgg$TcdI zC)S937eBmtf-lZpuUZt_+TZ|O`Ng8G5kfgrMEZm5wL2-IITIsyHn~yM0EbXeCxIsM z1FwcW2Iki%bd*SXDP{iM=~(3dkkQZ;|D=Y%=`1FUqxxEAjw;4gF1OG$sGRE4#h+wn zbw%qw0Fjbr^y_ubg)0zo~al}W@RH@Ls<~#qZn%|PQIkYeI zD%!-3!-kuOkR01tOE2c46LGylBQ(eG&A^3ql$SiM*;xC9iy_ajCSHCg2RI#Bv>=x< zmy%pORXI-ev1{T0%0mL?Kt9>}(an7l zx>x&?RCH*^k2ZA+KF<6opsVjaJmmhLPVkvz-#j~Yk_Kfe$SJGvVJTk;L#g-zP+T8; zyQwYV?{<>d))eYgDsd_;Z$|SIYSV9mOS4t(tPH9@?R-tX@V3ej*^MXKni3eTk8`I3 zEWF(i5@Pw|rflprBA(3ts98^5>>rg*!&MOdn9X^pCU7d|o|n<*n(de-mpuNsnN1ge zu&a7o(@~oNf??pH*uM%4SYNb>#L*g^e_C2mv2;H7_?TfB#Ny zY?wa%zSTXiB(Khpk!-G7^yYA8fZe!#wbZq+*tbeGXeiok#jXHB{7QXn?ya$G|(Gl~ef3E5wKtry1Ig-zz>Zd7vJ{G`}+LbFsW zKY_}By_K3sjhM4%+`iZ6gGmd3(}>D%FP^|G~%ap@);rj45tL56`=kMO%zmnf2*NT$#CXaIM$rRtGDBFT1^x?`l9f#p+^zYNF4i!;!G{9%?vG^_*ma6PvYL5L?zE!t%U^Lrc9R{F% zf5g;I{c$X#kXwSvV=Iv)^madcT^dN+GKT&-+dgg4Kwcx&&@$6S;Ss&a_e`AU#bB-9X6G~9@x7Y3D4ndd1lU4(3*1_VO|ac6s&Z5asn5vq?9vlZgN z?feaNY0kFJhqX<`PF@605b&Dp$Cc%bn|hO|IgI5)_JDpm+tMP9_Y)P)xXbsu5mBUu z`R8DEKCM}0m&h;I0y2Q4S5Ka*tJZe>{}ajmImqYzR9!t7Bs?%Muo3T7NMcU+lH8pV z7YhJf@|0bAyabwb@-&J`Bk|oUD=U9}S}CKjBF#Y{;~$=jZiz@>a8!_#|Nb`k+u)sV z$H~^@-1WbhAttcY$D9%lw%%r3(T@pITy(Wb0sMiu(X_1Wp z6xZ(V>b6bd_m%dHAG||yW75e?pcwPV?dRk#a{n8%lgGojr&8;TFGDw^U4_g_Ru9?| zZiBKYarbIB{~-q%em!KK$dx1rxrh!yR|(Gv?-3_8%dkIMV_aSiBm-tIjg1}eD#zgO zdkFvDpj-gSU+;m7|4I8wAeo_|A^+cd3EB7+`Q6q;F!sMI^?x*fcS3Fwb$hZn`5C=b zKJ^ch3{UN97MW>{WmP-wOG9X=G&TB?bCVIb>({j#*LQah z|4S=XvQcyB`UZL?P0<}Z+NOZ;X!L4t#{JrL$u(uOF z2Gyd*gL*<6JCzLOp;OyYPS{G7nHvQ?V_5xhk}T4V)IvMwmqphFQ19lLDD zqhHim@@R}GEsQ01j751?_((1N)#M-3vJ#jOlNW=aa9@03qF)K>t35-?| z0kiZJE)#ZD?PY?4pz`iCWJ8LJrW^M&tApzOpz2PdE}<~U90appSj^Xk0cGkYf5p?l zfHuJ(KRU-L-G>2mbxRK!{S*Y9mPESJvd}S_rNYJ0)@dm>PC3OehFIo_2}7027Hms{ zEB3HwUbAa-50w)b*^Rpa%&k2_2*qr9v9>@JBQpFLF!kflsqK&-_u}Z4DJp;w2+jfJ z|7iiBnT#~-H$64{P}Gq0`{&USEcwjzvFTF=B~(TLTN*1FFOwYwFRfJIAT#7A?Jy}< zQ2KyK15M#36oZtdqPX5xky_hyJ}7uq(^p?04@y;IET14}*1|Gh;flsbwq+e5NN^lf z9re7$?HfPxLoptEHvFWiY4a=ud~bo%&PHu&i;U1aX=*cfk0l^E0(Vhk&Xh>wjnne~ zGh2xQjzWJjC??^9aev1Hw}fl~L&oO_$dzI!)&1eikdS|W%R)-NcN;w}B^eRID&x{1 z$H_p@?fwV)$?n@ET;pl^I>N72i6{*Mpg?CN{ow6H8y^hSB2E1Ncsk3tCf`5a(}<*i zbp3ElP@2&#IZ8_DmKa?U(jXwxqeDU2P((n4(VfyTx*MEyH=LXQIj{2!c{I6qf3NHM z#QO>YR`S_?_adZHx#9bJz<`kC6Jzr14F_D+lIm(wHgYNuHj|JS0dw=^c*t$@?djg_ zXvo>cX4!3K^Q3F_sxx+IL|l5HOx`)GMLP*ezc*HBhttIinS*| zwP^Hlz+?@Dg#w3)YMwmS#Iw;V3#v%q7(Lsk@x&5Z;ohV@}zcdCQo5*rU z6h?oLHO7ogu=2FJz~^DSS_XpKlbVdlKm>MkgDuHJHdEp?{A{b??+b>fTEHL5e1$B24DNa(B2*;Fp zC8g#{F{rNG$*UG%!Ofkn3%1}g>8;u~|iblu-1YLNfHAE5ql;dl8)+}7iJwf=tUkL}Y8 zAp_&$Ps(+v+;iS_<(#HOi2eo;4&=QgW=%E~gCIUp8DFbZN_XAY^aNJyO{oUKo7*}j z)o3S5RhgjQxdAC`7ZX5i`?rJ{Y60IYG`Tq;kx;_+?u`ht4@v?L4<#UA@`k)t#{P(# zfmg_DS3ma8U^b!3O{B1BUdnU@tSOP-g@c;ZFwR^+|Hto`t5aDVj=*eu6t${rmiiYS z@&0vwMnsaP5CmnPuc#xcR|m5##Y_$B z9;*{4rPOXfLLmqI_~C%*ShWCN0Z~R9qw7D8RZ5vuaQ`19D4WYKP+RYc|KWkBkfdfS zF&-BeV|30km}(9pS~;c$3jtzX59}fcvcC;<2}sXqxVpH&mNllpc63xGPgHp$-@fE7 z=qNvT=Q0REW!HPIe@rvW*6`Fb;&8F5p|)Czi;-bXHOlUXFXo-W>l0B$6w1c0p@~A8UC@f@_W)SJ&)o5+pk{t;jHa69U*r7A zNKMD3hVt@c2lA9Cc}Kxn9qgVbt(=(uo$Aw`8|1$D0EvoO5g+JCrimP*d4&rtZLP&p zV#pW5M8ZX2Xnu~8k<+??x%7nbLUqUT53sDY{Qe=lLU_a zRO2|QK2#`vbsWT=LO45?rE`^l7jA4L0Qrw6-v>UOP!|D4oC`phFVSz~~BzTWSRrNa;rT zp-p?h*#{f3F)yOV5KaKI4ubxYf?c6l6<)MS>#n3`g ziS2qYCawTV z^kdwGB%C}pj-H2i`+;Q!$h8~#C-ohkd&Y(zf_>*S`5$bi_Vsjy*pan*3 zL8Z4+%Jk0Hmn{A5`7aa4TXG_7-`34^s|w{adH;7M({Gj?0kCG0&9t;M!NA0@%Z(9M z-S|4L*Eco6UlinKUGs;~I0}wo%INUL51t$;m{6Etn`!v-2_4^cCfBXd=0Q!6QR)K{CmytPeF!{DTuQMP#u zUa4{>ALG4~pP9~bPHDJIK9ikUiY0B;`=N_F9P5He$WylAX@%6%@9HMJv`(SSB!5^4 z>;?thgkOKdFYwxgcU)KEK>TiX9066O%ex~Um1oHdc zDJhM_$w2WZkCkxfh%Ij@V)Nu-?1ra}BlaX<8Voo7awrq|CC16K^ikp2aj^>(Ed>qV zx+T}+2VHH|$6l3|&+Zl>=X(yb-#TAi-1ap;r=9P_si|Ub^CNY5WZR&OZgN;X5iPU9 zYTFy$Tk+z~RKLT*dU)}IPeq*MOA=oTP(o;ItCz=;r;wwqJ2=`qZHnNGV*?~n*(TS( zgn-%1aG%X);IO)XnKMZg%DooQZ7(6(;2_)>b^c-L`waolaO}|2Z{XFh4d);5-C!fm zm-UsI{2>aI^kn;SE-7M{>i z7At6{XbAUmYGVJTEEw~ysr;#B?F0KA02!UPv##IOn?XB(y=Il%HsBw+_*DcTA}SW& zNc7+3y&K0S3-5UnA}W&zh>t)jHfYw%Dy48i%y?c6BWcWE+cPJE$FWq9knFk5&)2lBVLg@U?8xYL;XH0rP9FY_k`-o{a}@8^;*T zSK~B7WCErjS6Rtpt~#K#pMx2Tt4?-|dnjy%u6^*pmZAy}l2$YRveDT|A!1@FhHpib z>CaZz#V(HJn7}wF;j;O%j(+&8(l{qoJD=qzRSs^{g2PW+hV}f_tIei63yDu;Yixum zDNQrf+`#@-nC3@-#||+qSJTUrUf^(kzUkH!29zm)6M2j>6tJ>}BVDg0zuTf_UFiDO zt#3Z=(u$0rD`holQ;$VvePL8(kaqC#ntQ!&@t8HWDn$ zaMR+L7uex98?W@QDx|X^GDKqMOuxcFSU{D>@I`z3o=0f=hAH}1PgDDnX%a}@>Z_6F zxa%;d;QZ&RV4Zq=&QZbm)=*;cFj7i``kiK9;O|=pTsaBAhx3+Te$a;XuM9ARmHpQm z7J!QI&CNYzu&HtK`BXJ^?6{av9%$^vy)3oVIm}t`1@8L6#h)Y=MAk z3W&`=hOo$P5T)ws_)WOpgyJPzcG{! zWR!_que8-h$yyP#PJ@g@bR0)HeB2reOd!>)oVuz^#fNbsq22;697}6g`Lh)>twTPODoW^espT)wGthpiEWVcw#v zC=Si|JX5Jc@32y!=OC|JSL|diZCZI;4P?E!Re_8)K$VG4NUj#vVA-x5q&MKvMJJg- zprxAVK$o8bHxIKEW;l( z9*p$9EVORE@1k!_x;DMdWsv;HmQ^U#6yK9cBWw%jy;1vqA(us#K415L5oZ+du^UW{ zpqVR_=OhnR+xeB}ENGK7i2oYrF~*q95PY_H7*{AlZtP^EhjNXP_Vh`o0U?9n8xK->EhZs5SalWItYu~#Au?f-0~B7)wRvh|BM0CB~P z3|{!oPb8__UkAfnYF<{{sb9;|BTR!ADmFQJly6+rO32#Z4j84t`h{nxcClI|rg)o; z3Avq1O@PHlR<1jI6W@gCQF3U)D=5g)!TjY}^;LdOb#%73VYYQ!)g#ub-`TNoI#%q ziak8U9KHww7KtAAgP4mtH9`i-wS#1M)~7@}h0N$G3{$dI+ zVXM9Dbj+ja+539V(1;ab=i;7(m`RU;dg|qbgEpM67WBW0fWp_2wc@}F$q+C6IM5mV z3o7aDKR>bCrvE1#r$N&x^~$84b_wwJCqWo5@4r(t4Qu6ETlr8)XENp@feeDAs%IM_ z%0=RVrVaB|8ce%O5b-HACF4KN7lHTWy8DBkY~9T=BVoVq0z|IqELzs^{9DN7w{yH< zCS4iK(S;O%5CNLK!;$x82LbH^Cg(VTQR^d#Pg*#jfW^Mp1V-R^o5}Yu>EZ=8K&JC( z^52t$hQ^)2q{uginu*JRcssBX4)6F_S+AUR`YAG~bYpA18#s9sLiP07Jg;vk5YWFL zk1)fwk&=X7Wkt^>6zarN)m{2I?uZro*l8_j^Anq}-t6na{t3?bTNa6mcOgzd zr7xz08XoB|07!{6`o?Cu@63cc#f!(LCafw{2RSi5z+aNIVC=A3vkvjbXZG?Kfg$PP zc(!xt)u-aw3;UT`(H9?2>X*`g_(>EWZp=h)o7f;obPK!-7h*H4d%6%CJU%SJ9Gy^* zeX?Qshu?ozve?(U2gU;f7o#V0%D#*{%AZ-(^NWZO*bjXYwu@Cw^E-DsZ$ACg%&1fk zMEL22x+fPKfVvGX@Q|KPVQ8Y;LMuM)jUjQ-78P#f3P~V zyqaT~L^-=U?oakJui+1`c){2P!BEF?TKM0CCx)Irv9rU^bf7dWjfHTk=)nviVL^5E z`0GBMgAZ-#D8L)Sqe7;=ms;G)k^RFfK((VO*jFw}1fTQx3KL<{aCvO#d>Ksu&t~B& zSH)9(2ZG)M=Ai&F6W}aNElih7sB3797VW!hm|MkxnuX~y=_-+x^p|nvGa|(r-g;ihou85SO zZ`B@>9rIQ;R^VC$Um$@#Fw`oUcuY<_7T~jSu072)db4QeS4O%Q7cUQh{N^!d)mD9y zS}8AGE`tk3Liw7n1(Vyg+-PPxljT|A2B^|wLMYprSodzs0aP2{-kr%@b=sp;$Z12~u7w@mH$?B2S#OsUO-f#W zrQ^g`HV8$8{<{ihMShE9q+Id%LP1-@pEb+L?!>ZVg)K;s_m%upqX?d4V|eY3&r=Vk zXyG=t(7Q{E=J&wYZM;TY22)Gai5rayQckf*kv(UJYq-=6kF1HXTIjO>0ayj1=>f%- zF)gX7GH>ij`MUbt;(!(g77*j&D3TYvD>@o`$ST1nn_Oecuj_@;Ao_TzB z$P$AW@(k?gAhu_)sBp(vrTpA??#XWVOh*=?{Cl$@C3B4v3oYXBp1i^u4#Iyx1QIyz z?qL7aD$!}*x2|i!@mS`I--nb_hj;Oxaf4+rPOxlqD3t~A=L{@u+~&&lQ9nk*XV;@m z3r(BdjZ5T={AQUT3#zKNCSdply7Fiy3#n7(R3e4cN(4dbFY9#3^dv1QS`e5--~}}d ztb71il_aF;3b0hx`P*Mt+tU@zFqH8DRI6Aao8X3YXbTgQtwpa?KkNWm+FA_a2?vco zsck1fsY0XUd~*MJk}3 zO9xb${l6!XzW4uC`&wQV4H0&sY!BtEKy>@tGU7>b;ikAuiqVkydGxP5<$_1FwJkTv$Eq7VX|fYt0GA-V$vJ2K9%#YpNhd`*oJQiY0{&`XpoXCq$Dl&)H3(5_i2 z0S~Ff%b?jXzWoE)Cmor9^6h~ki;MNMp`g2F?W9yX%WPt$W`G}6v&oph`3gwRxu4D% zVf|eP-ED|AV{oC4jxVVn0-Mj(V})M!=%!-vckMuOjxDaO2FbNR`c(BH8@}d_aJI+? z-(CI(D_)__;X(Q#egUiou@lrpXqTH5%o8d`!O7z{xwJT&IA2p)ZF?bL>avkzHIU=G< z^KjwCSPXbQ)ho2)rb9*);AE0{68%E70(8EmC(8T`v z$?<1Ty?OoB5j^-z!$fKHYe7w+c0#V;|7;&X+c|vDonsqEk!R|g3AH*BK~jsc9CS0D z)^FsvP!4p|Y$$%BAD^IUpD*w`?93}o8Nv~p0YLZ!;9f>}B1wQ&&a0ZlSS_f<>e3(9 z2zSYY=#*~ABh!akpa84rAEKk)ETbClfK}eOkmhnNAlTvyRS(H(?1u_fSTd;uq>PsX z|C+C4qO|j6T~*;yAxd9uK>xZ8xq+Cl)u|85Lesd^HSE}_6wo1dNQD69gCzZaFKgEJ zAx^IL_2xf`;4GCgC`MnmT7I ze&IIC>N;A^rte!}Xc4NqWk^S)Co7Uh*1lNFrEfMJOK&Sup*>>1rhxPJX<#}H86lJw z3=K=-4bFyHOR_RZPU3W3*c0x|N60x?r{+egIjN(cYRd0cY2;dMy_}Kb%d!OOxJ+_{ zR+;0DkL?!nVwk0e@?;6A3_ofHAlm9+^oWuNatvPh-2j+KfZx4aGZ8vL`JZgNnB&)Z z&Q^w4`;S3#4DV-qVi}{B{6CimIXg9u`>F_^gbQHPlM)IF*H(uip-C@oe4N<0c*22P z8`kkh#>|GvYvCNOQfv;E=lJSWHgLm?3D1dBX)3uoRr*Vss`;XW6Kw*Mon{gi{sqvtBXx{^J$8c~(+K%xeI(aLX< zVOaO&843H3Ow=OMfVv<+Tnre%$}p!V{tJ@b63Vz56t7zunYo4nAAdiSN6g6(H7)EXd%8SHEn*?IaD#=uS7me z_^6pp$8kwRz)bm}5L=H(%%gOrVGbZa0XwE8knV-b`cHO2dU{PONxMBUHA|QCH;D z0T)Uu$j_PMjTw^uURx5j#(DXcyd7LL9q)|pa)_ocW$R5;!RZIKzp>;Qo_l~Bnl4AV z%AlE6qk{iliZ{Lq9JV%x6hChbkX7waoN0NqN`C-=*%<*Cl(&S-)Lh`F59>2Cmm)H! zz+n8d-bLBE0MR0UE^K4`nP#;sEP}un7%o_VK-pqo5j=h-u`}Ja%IQzSLHcg*rmS1z zaBFDwF)AmF`ayzR$5hOzd+J^m{F>&JKwON1%$^&BuE+})NpYjaOq|6gL2@bjMR zg8i#W8de^bOL>od04zbU5fX@Rx7f^y^CbK$DFv{;*;=UqQfz0>(_h2|sVp2S36=S1 z9FD!)@8!D?tgP22@Z;Xf>^H{W;$v~2mVjYix0yeM47%gj);d%v-pzj>x54SFWW)S; zX-)GfReBK#hv7xVA6o0S!+_R0j4A>q- zC>r)!VQm2Jm{sttT0eWi`~%<)0kXL+rDCPaZ;x(9Kisq@IHI0uiBWN?S=ANtq0tUTIi88V1TlM3Bx!6> zE&Cr-yDbJ^w_m9p{Ugu)<`# z^o9@;w*oc+wI3YctWq14zZC<|$hcNaqjC$vSx|YOe{|Kp>3a;)0^fAzD)qc5*> zcKg`HHR8Q8+kS$@HRjd=&W|N5vr=z8R>D@pCWJ~(A}*KBpWW<7pgPt^bHyBm zXdEPfd(?otPNvDvDEgM@#;>tSk`N{oSG2rJWJ-nB6+ZV2Z4A5+oU6OYaLi-^a9_`g z^f*Y15fc#|;98lUX#nWf*4y`Zi*(*-@hP*2X6H3C_@f#0q@ zgr9R_62O{3{jDnPvDf$jXMWwpr^>K`=P8Owxj@$=p5wHU>p|NNo}Wh}+yb}f+3&D7 z*1PY02HsJ4;$j8OtlXEa+bt7S!gaE{?tfOcA>H5|kY2F(H7T_ia=q4*;*{NE{;9O9 z5T^vklaBjUPCuBfa}pvVzWpm}5vcf-L*td|!hsBAJ3_}1h$u^=ZSx4NQri98guz_n zd5S_uKx)lVsyyB(Tf;rLebxA#aRuWERIh=L)u7ZgEPz;c$jV~(KGl19pLo6Jk&|VL ziYHKOXLsHI;(xLEw5d4+EM6C%ssFjKxRf$!K7;m15EHmwo}tQ54PrpS>4btk0wLX> z>-C!%eX0B`Vr9%`@k z+H84#`a>uWINCH_W$dkNXcqhx(g=y@#i?w;#TofUno73o)3_GQRrrYb4FF{n3)z)g zBlh<@oA87SWGh@C$=6jv1^gM&V^0!7qyk50w}#-C!m!QM!!VH zTZxb|3A4yzgR&PW-HNRyg3Wu-lE}35kUGD-%+p^z*$Xy3uAb_7-?k6FXHPv%(4mww zZm9>QW7ML6nk0vqPuR6`~xh|Gc6m%LK zqInq?|B43u(EW7VNG#-5ssZ33dh|f>pl^~><<)FY9sHl0`;bJ(6hWOSt2YChdfCJS zI^dQJzedu#b^nqJ%IopD#7F94eQ7QrjnQG}KZFNX+WP^WG_TE}*2K-t33>puIo;ZNuij=bHi4mtJM6i#yE&ot=PqVx=B1`~7Zg@=EF-)|r57rxqGYQ8}e{2LyMAu4s76|v{N0NSCH0Puh3oEJrnk~T^d3f(;U3u z(&CCPq(-)#Bl$|r$g_wX#DjM-2sw|UM(z;u_8v!+@%DSnr^F(esy`K;rddyKc<@B) zMD}x6J%D~*$5s1)YsnXu+g&S~%$`ue&iz0>URU|I-2L%|@r~za8Z&uNDg>6wQ(Swc zT=^L+z8w#Ba6^ZKyX6oZqC{k>JMhTOI3&6r zxFrJ?Dqq8lo7?fsOrFx@i~EwagB#q{Ji9Id&m)*7FnDZac ztrK4untaKo83&@JbW3#%0HFHUWRfmXFq6PN$)Q40DO;g5S zK5RNKQUSDA*PjLn>z>1aMdCCP>AE);cQ%2Z_OgHF0?(NT@S4Elpt?f{nGTj<4buJYyf#t%y zRTzuEI-|$0CkzXrZit^cPCwSsP4cl<5KI*S+ue+9ev0Hm$I;D1JxTB-ZO=6O3UwXj zMxAjGe0;|-$n%4E)wu0l23TZzw6#5Kmfv2^-|(lW?0OHun`|GysdnlOn*diFBj}5k zyXWf@&uPSiM(+4ufVsG2j0-CQ#myt=t zW|g5DCdB*2tKxAnT|=<4=x>ZceHkS4FUd@-ISrLvaw?7#vXie@MBF6)vq}6~|DR6RtHN^bY(GD<1Q# zN5NsHg)LiAA(WOgQ%HjJYhjGg9MvF^LdCSkn|f%$h{N}^=!7jlLanLHM*e!a#$w$r zGO~Zj^@Uf?Sc!`nzm?CgYL<{22X2%g7!CQrl6;w%9oxuuf&9^&Kn@-@!I0z$$*L2) zJBL@Xr(LsgB(#q#W`8-Ku{|yH<9}3D@uF<2P@o|ombPC2JF>%!VXq&EP8xC$Dm?sn9&r4~=v$Y}g;$LK;p9Qctr4DNF9R2y z^)`o$TI()^VC+b0Uy8h|yL)-=!pnX4S{z95w44R)2g%xfYG@0W9Hz zgSrmWjqW303)tB&_^?2%igNW?{oPDtPZ8Ij&F-@y8$Q?HqZp?8aN2Khos}ipSRtC) zrq7!l{~+lwn^+)(wgnN;Z%Tyev5EH~nxhi|(JF8#+7V?iW#i)`(kkI%*)ffD@>Sr8 zo*84GDuk;2oS5JoEL89W_f#aE`&RDdSWBb0*?R@K+Eb6!|7|aud(cM3n0pN!T^e%i z61x&^Wk<==`91~S%uLb&;z8^boJ69(AUn>+bnr_f>tEghV2VvU;gF%VwJ$?1i4Cd` zBv>J3RqCwtC2ci$amM>KPT1t50i~D^bKdEmb>f_kz@I=dl!%`r#T2(6z}4Yt%mPi2 z*0aJ(4flW8vQvpzfcXBDMrA>~hwY*|Z4{MM7C=?iKyAN&CaV!Ds66gaMBn zuFtGP3if56_*=^}-RPqDF<1AcrMsiVy9fVk=>#9j-dwQS$@%wp6-382Ut%ooq9X?e z2K+_<8Hg}l>dXZF0TQ|<*MXf9k<gmG}IlGs?hWi3lBP)ehKg^C^1$adQL+Q8*mR z4iX3h3YqF)oyL-KNc+Y#FbLE>yJVjwyj9m+aQOlCBz=vmLr;&bFf8y01 zsv+gpDeDJdcJm9q0;(%-8T!_j?xDM)ilOrad&;&*28T-E16DC1E1?nq&#!bPP^rsu@7q7Xu=aTAO{&A&3( zi+3Qx#J)|?&WP{_)8}DeaW{mem)--4Ns!q`$(&qWFwf}PvAlG$Q-;V>@+i`@K92oB zS)XlZ;66PV-Ck}~L}1nR_5$neNC5HX(5H;OO#IqoTKkyxH;b0VxI`ozDcQf39ewnw zILlQA8Sd^*OYMqFo*QN4N;*jTE%r3U^FthbH!R7La#mVS!WvDmD8EIPzouK{xF-=UyX7!xY;Flv-DKK1 z+9|tjQd>1XIs~)mjT`>nt1xvf@3`gWPO8IPH~!?-eKs#|kRt?r_|;eno}r~f6Vt4| zom_V|=aNByx-bOC+pK&~5~)=3fq8T$8#PH@8e|Zg7mqJhTZ9Bqh6>`IW;EaWbGddh zcTzpnX7JOUgx4?dvbke}ZcJH1)|NOqU=V&^>~F%ms#|hghPu@W(X>Cala1k#3rkE> z+~unO>JI5Zd6)tYH`7v)E@ssGc)SE-!B`(IXxXZ8CZ(mZbvk;Lx5c@WM@%M|yz)sm ze!5Ecp2R_~asl?;^`@-V;q994`sSyn*qm2$!B;2MPeU%Y@-iF*qbr~c#lQ<-lg2>7 z#=lS#jO)7CG*89q9Un2glJMFtGhG^;S)jiH!nUF8>dgYN-eoIVW^}V7&xSJ*6A6Fl zkz1sBpr8+mf$u1;BHaY1xYFwX@al4N2FtQE0^F}5_SA|Qp z3Pon3U2I@g)HNA^}9 zj(wrv!O3uFMIlt_Eze3_E(XMWiNyZamCtFDs{H3L@Axg+$@J$S`>ncUHu{%h-vuno z7mC1B^3U<00uB$~C=tdbFN)tjK)pky(CT zewIQ11wR!gokHEw9zL~|`#^@pC` z3}ifq7B0AY7CJKNR*Jo3q@MS))O{v%%}7p%k$x*%p)|(Gp&UvaTiM0K$G{!r@%o)J zBt7P=ZT}BHAPUfNC7gz?|LbMAf3`NhU4q}(j(hTPI1*}tZZ?FOn3-E=tKF7?cQ8WK zZK37rE`Z!^u_;n4;mggQNadIL7y~pJOAPe0y~YToTdLZ-%Bd$iQ~3hj2wRy_ZjlU9 zuTHk00vqI+`mQSmzc1NmE?vuT+lhnvJfB;vN4cDY$mBsnUL|{NGAA} zb&F%MQ8L_)sU78%hqZP)pZ0i21;6GXZ*uu;F(kU6;K?83qTv=nwaSzDagjO_%Gj1j zX+bIU^ebUI|1?)rtdd%J7oxx_Xm{VgzT18v!Hed5IW#Z!U$47~=?W|>5{*U#xi zJ>`>$I+wp&KiQzq$x5GX@Ys$eCMHTQs?2@-GU6atG4lRwZ?S#kK=S^pTyq<}<$iU_ z`UPNy$le|#YS^|AvH*<=wE`qZyyhWIxk%-IgtffC#y)nB)}UuzK77Zt55gwv8AwMg z!mF6oc17?3>)*IHxDw9p@;ROy1T%%#jaF_)7sJ)PT>N@SU7(1EP==H->QqRQV&CRb zQhoXrC*^x;$f_O5Wa%gBLRMyGdBEcpEn93sz4X-Pq-Lw5Z{3l-q21oyZ5wTt<|!-v z8I*?~cbv#!i)O8O0&wqB&tW=feAD`58m^V#(K%|CwS|m> zBSZ!tnJfqZB@K;?vMvt3@%(9X-ZKqV48;)Yxdcb3PRrKS)N;h=sVV#kq<1u6(#37B zoOZSlB_(XF6i{Sc0`pvWbaIH-m?{E3y)jq9mNk6tU%=b%I}`e$Ym8Z_x%lqst$?=< zC}ZG;U8OX3QbXh;T0^MrVsZQC=xA1wC2^dtC2gS2Xk;nRKag-5(=j(&Q5Xkd2cm}o z6O|5Tu4@_Xxel(Bzn|Ln`>NwYRnJ;w7FvF+qeHLIGuCnhzGL9Q7Db&c9cA!>NY4} z^r5{9gX-7Wfs_A$!tE!abZa-4sm$jEJVEJ0C?6D|Zg3WK9^d&>*{hXcwW=D}ut zxl*$+SCgP3sj?eZV~AK6m~%gh3>+#qnp%q%e%5dX>-#VK4fXu{_)eU4s2Xe#_V*1gZ-N#7S8LxDe~~>_J5x3@9*C=1YK1X zFTGY@aW{kV4iUJsBSv=n_0ruaT~0-@zT+>KdVWSszm*YX3~^+qp(#dwQ4CWzU6A7T?OBy=y+3= zTHGlRQrADHc5OR25CGWmem7T6_NJd=YnI+#oJ?BW<-T2B2(wG2#I39emQvNiU0wI2 z2cG8Bg369ZW|I4`WD^t4g$%Om2H zwPqC^#2~>pHm(rz=uaV#*B4eSzN3&IM%Jl*yPOtup@I=KqN}Aj-H-hyNpP1~7b=J@ zUbJF9*3a>=_>NiULc`Q%@B$fngO8qsVPW%`!ZRqbr=O7zY<58cMfu)6w zrm^$k#BkDgL2A*QPn!oPlqSa<&gjezcSO!2A$$VcQYIbA(e-x~HE;ZsvE-)WmpaCS ztg@8Rw0EOUZXBO-PQl&9v%&fWuAb(v@aRwk9$CB&y92u_csdl>F~~O6l1^xKfn&=o z^EydURM3J`ZqE6m+&{18(H}AD<;9@L5g13GX`U6=*#QS9WYYK)c)0F`t#%JFD|(6Pb5On0V*c}-6Uy&f@#<5&xLRJUkgXs&28h%RK(e< zGSI#yA~l(P6eI_L?s<<4ipM4LUY4=irqJCc%TZ!UtTNVQq>TMtT%DTXcGMw*6jbtO zfxb44t)I?Qrw=mG@?RL*P$p^UExF)BgL8p}^_@2<@rB9foP+%04L(xxm>hYTB1VT;Tfq&*#UC$70@3wmL$_?kI#r8(_a^Pw4jXYOzmLt|1AOH)92>RGKJ8NJZg}Ii`$uZwvnSG&u5Az zxAe7f0vgUq(bu!ZPEL-_g0P{Vee3CVJK7n#PEZZp%qF5}nSE6T;_;U3gvll0An)I- zSRY1j`r}T2;SZc+0ar@gk8xmSA>`+1IVx9Sm8)wYd)@-_sNfKZiL&f@e2#4P2t)Km zsI3M+u^IZ>cF|(j$aAD%S|3cAkrM$pSuzIkta)ITW$PI9qRE_#0nHp5cV5VzGvNz8 zYc8g~K%w;OU$DkpPG|rX6~B*t|C;iZ2>BuboLbvY6G2_PaZ*F6syw3k;cJfBIQ5L( z^>RbKJRBz*?;R8#V_!1-KyG>y9CTsKm9*ig9`UF0O~MfVI z^}#>lru?oaqcwapq?`YeM(Ql!;h9~fpo|<^j8|yqQSF0^-!Vy8Sd`XKMS1;^>A!Yk zovPyJ>1s$`B;!`?W!D0_^asfDuV*zzB6%e_Rq60;blE1O;LYrg!K`+XzGX;=#ZJMd zWtMV!qD9K3xipq-bI#DKWXI8;My`Qwr6=9ETB&D#jI1ta2h;i!2>l;!TSvm};n-ppl};}zhhgGDg7JrE7_tJBqD*wMhBi8{BR zSePGuit5E5cV=@rO;UraYv#Re+K#y5)5o;KkLOMBvV&ZUkRNi(c#7tSk*r1jLYex3 zs308pb-=`ojxYtPiwz^(^W#cdTkfKL!;W196MI*K6($IPYt^1m1zHxxU41} z_MOSgGQRSq;0~I64%K{OHW5dpJs+YdZ12O;RhB z<7(SIVB-+Mcp;J7RkmRsU?^?r9{9wzHfUQ*cg3f?4-z-hc^DX{8>?C9v4im#_2f60 zPK0a^I8GRX&NLA3N$ugBDav~E>_SAqw+@d&&RrSrM5Eaz`Z(8u;yZ^pUf1WT@Vosx{ zd%;3QjNMOPb!LHlt4GHk*4eeP{qp>!As8`xlB;Ahk_J&Da2zPzN=HQWtcUCIm)nh@ zwyYYP(us1K6ywJSP6hS=TP{tFDJMozg3ll#MSwvHy=du4gL$iT509oul}p# z$c@%z{x9swgwiDz{P~?F>&bCMQB@?DBO)yJLk)G>xlI$uK*-g{JTDUGILtEDf;Vs^ zohD_?(`myRzKIWK*h*`Gvo_=5WIuz)#;ASbI&Lh{!&;9=W@RgVeW1+L{bTl1$H|!s z&cwSvl_cnYcDVV$Yf#KkM`O%jM|)&sWPA@$dB1K*$;ru6Kc086{=*B-dT(T>i7$N= zcL@CFW`K&{KQUv2f&Wv|kq0vUzULT;M6Nl$Be4*pIhteGLMiu{vq+>uC@eO)_4};f=im49`8@CY+|TpA@AD8ckk&i}4WJa6iVewK zis@n`T99P!HZE)Idqs^oQ4O9zx)3f4m_SX7L$Y(yCC1U=oiZEV`pi&xOwlF`hD(n# z*uNzT`np!qIR(hNBsB@&JYPc}l|8e-K~-LKgNWz3nRBT<-Emd95O00DG`BAy>)#0ZfgxrKC(8S9*#X)6BHf+zBW$E zoQhs4qqpF@>dxUJCUnQ?z~y9##Hgi=hyhDpE3|NSxpo-Zy_@uCV=BWiq}qXNhm|j} z$(gF#4*$&z`RaD6VMdwpuGMisYFhQY#Z0&CEt!CoG$=)b6G(Pk4e~Ef1%nEiB^+4) zriMeB1d{q}*cybOsY9D0_vv_q>2jGwHo4xdu30FzRlR0u$N8xfrXrK4{wD^?haYTg z_c=nlvk)|^&o|8=eIRu}^DH#6$kT;4)q%b53~7}=@;`iv?21S(mm^3d6k+fKpdNvK zK+RgGi@$JgZLy~Os;a8rKSlg@dQD7$6AkZpYZzz5O3|Wo3$b4YcmLp+F;u&Y^kV*~nu?Bb%Lr#<-T{VIJgcp8cNv%hruf zWmS_BCPI01-WX2}NwKk(>AhLE^f#7`K2&`i0-!oIHRB4S(_sgD&BtDGurt5;2`onEhRBZ5x-BG>A96SuuiZ8F0yYAG4g=ep?Wdg8F@XUh4Y z6Yo#la))IvLF7f}(B4`0Q#SX_twVX>MQg8TZF|H#zkliAIzo6VX3C|l_;o{tQs0ly zal;Ixg>?|m$lZ=FjSbn|7dCzh@>12=Gm=+8qtvz?#mCmWq#eG2M1DPf>Ixy zc5GsUqkYc;MXV;fG!FI({8oT2y7wu$_AY`M@tfWiwlMGPUy_yoWzGd#P}bbcsrmry zXX@yLZ8F)08yPwSkIUV~-jJ{^#Ve%F-(LWl**ePdZ3u7Ex3CqCKOeXc0X6fJoz@^Q z_G1R29)~*&?$##|xH6}zS5+7~0XkKVN<;>gUq9xzXUS8#BBe{(5Z#|PEuL6Wp%}B% zR3>S!?=XTgCoXrRFfeiXI{rNq^{zP%58pRCeDKr?!wPBwWW-mAw>I1g>_er_0?9?{Y?w1EZ4S|Qmni$4@+SH%~*n*L~yWm9-H;ct{Tqb()p4&ni^*l+x3YA(g9IVQHH$DY!z zB_{2eLoKnLsXXaa_s|P(&|S)RtVBzeGBt92;1hu>8E%yQJzYQQJ=-yrAekk0nsnSG z`m%>d(Qpf|&p)%WTBePGW$9=uMf${;MUl7P{m_CAcy4+pUpQ>OM!A*fY&MlSD2rVpGs{@SFH}KY8+PS*ivym83F8X z8k9YYueDyiT_&=BjXZr!&1G6QHAd|`?J6!Rz9eXjE+d}d_kFUG{vrNLLHkCVN!IsE z{)dFI4@-_rOHkJ5`Z3C1$am{kCPS-FCaQ`AI5_oAM;%pN+a(bE$pGfc_T|Z>zLKu51gNC$zi) zG1t7y&68U$&?L*Ds7`onkPi?VyGp)p@9zO!oXrwuF5(&#?(4#}3`Kd3>}?6%3k9vS zljZd?jyLW80Eey9nm-j9kL!cxMG$=tzX_^ZY4S^`X=s4AP1?dl&comN>%q9si;YII z)p9|@r79V%rFAkqzqgZn+TA3@Qhy~R$bv1Xv9C3Y-zs5Byxzy#c|1H`U8Z%o%Oa+A zdTws+EjvM@=;Q{G0TD_Im-US3f-gzzSSLL%5FFdQuD6DSI$Jc_u-V?XJRwBF$%3_K z1T@Fh-~kj2@u0CE1n$G9@nsm1^$&BWag7C%ir_e7s!?E$S;wU_=gTrrMiG{;1B35R zytkE5Omzu+X^8Z`W6y4R%D3sBlBCLTS zuNrkUB9RbHbJHCJKR(-}+x(eL!7ybm#od)thOW`Py>f?6$YZYBuNQx}}jhGS)|+3o3&!#It93n^B-{uuVy#6OeR)-*^A1j31=%DO&t|J9I!y(X%#(!MoHmC&+qC5=)9RW5 zDx|!^LS|87my-JfHMKq#h%qRj5R1_xu|#WH+Yr#}yg6Rxj*%>;0dQKN`@LPpCmt^T z0@NMkjUKKtSwnWf0~Iy!U+Ep$YB%2>vk^+AZ}DpITxC9WEwtE$M}A&|5_a zR0+3T{AyP@1UJ84zKLyMk5c)(>XqHjZp%e2cVS9sIHg!<7^rws%NTafE$Hc$a^WYJ zI(%5Rsd;OH^8k;y*%QnSEU1bDmXpNKF6W0w9;Ur!0%eNKXYDHuk{d- zuyAE%ga;>%Lrj1^WtEnF*)dfNPmE)1GaI(+)i~hswj}flUy&|-;4L^uzhai%sh5X!o z{X6jHu04(Md7fVAsR;aCIJO0G|GBL{6o)|N3~p-keWK(yJLnQdrqV%;s0)qVY!ynDyH5-$XArA{WY$MC4m> z7OSw;vCLw3IFEm#8Zji=_sgfQrI%0mL;?EYKD&rucX~xdMK!fil;nqCCmo1r0}h`s}nj0+kM&Mc+LYRxm}JWWnL^8$J4B66={yodz<~S2)eCwkColm9wU< z=JG;~5dVJ#67e;mb8Py>GGZyS(UVOf5ll_`b`_E4lI(MV#SC0uij)lo?1)jAw=7DE zD&yp@dteDAMP@P}mc%BeIPoigjT1Lk8eZCy` Z-8hfG3;i&3|0D=_kmeW6YD_#6{s+8jSRw!b literal 0 HcmV?d00001 diff --git a/main.py b/main.py new file mode 100644 index 0000000..fdd9efd --- /dev/null +++ b/main.py @@ -0,0 +1,59 @@ +#pygame - biblioteka do symulacji graficznych +import pygame +#system - klasy związane z pygame +#minesweeper - klasy związane z samym saperem +from classes import system, minesweeper + +#ustalenie wielkości pojedyńczych kawałków mapy, oraz wielkości mapy +TILE_SIZE = 64 +TILES_X = 16 +TILES_Y = 10 + +def main(): + #utworzenie okna do gry + window = system.Window(TILE_SIZE*TILES_X, TILE_SIZE*TILES_Y, "Intelligent Minesweeper", "icon.png") + + #utworzenie objektu mapy, wygenerowanie jej i narysowanie na ekranie + map = minesweeper.Map(window, TILE_SIZE, TILES_X, TILES_Y) + map.generate() + map.draw_tiles() + + #główna pętla + game_loop = True + clock = pygame.time.Clock() + while game_loop: + #ustalenie FPS + clock.tick(60) + + #sprawdzanie różnych interakcji użytkownika + for event in pygame.event.get(): + if event.type == pygame.QUIT: + game_loop = False + pygame.quit() + + #sterowanie + keys = pygame.key.get_pressed() + not_moving = map.minesweeper.offset_x==0 and map.minesweeper.offset_y==0 + if keys[pygame.K_DOWN] and not_moving: + map.minesweeper.move(0) + elif keys[pygame.K_UP] and not_moving: + map.minesweeper.move(1) + elif keys[pygame.K_LEFT] and not_moving: + map.minesweeper.move(2) + elif keys[pygame.K_RIGHT] and not_moving: + map.minesweeper.move(3) + + + + #narysowanie terenu i obiektów + map.draw_tiles() + map.draw_objects() + + #odświeżenie ekranu + pygame.display.update() + + + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..231dd17 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pygame \ No newline at end of file