From 0baab8bec659942f301315ece7caddf5ec35aa31 Mon Sep 17 00:00:00 2001 From: LHY0125 <3364451258@qq.com> Date: Tue, 17 Mar 2026 15:41:48 +0800 Subject: [PATCH] =?UTF-8?q?feat(gui):=20=E6=B7=BB=E5=8A=A0=E4=B8=BB?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E5=92=8C=E6=B8=B8=E6=88=8F=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=E9=80=89=E6=8B=A9=E7=95=8C=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 GUI 主菜单,支持玩家对战、人机对战、复盘模式和设置选项 - 新增游戏设置对话框,可配置棋盘大小、禁手、计时器和 AI 难度 - 重构 GUI 游戏窗口,集成悔棋、保存和返回菜单功能 - 更新 Makefile 以支持 PowerShell 并添加新源文件编译 - 调整窗口尺寸为 1000x800 以提供更好的游戏体验 --- Makefile | 38 +-- bin/gobang_console.exe | Bin 122655 -> 0 bytes bin/gobang_gui.exe | Bin 122655 -> 134755 bytes include/config.h | 4 +- include/globals.h | 1 + include/gui.h | 15 ++ include/gui_menu.h | 19 ++ src/config.c | 9 +- src/globals.c | 1 + src/gui.c | 529 ++++++++++++++++++++++++++++++++--------- src/gui_menu.c | 264 ++++++++++++++++++++ 11 files changed, 740 insertions(+), 140 deletions(-) delete mode 100644 bin/gobang_console.exe create mode 100644 include/gui_menu.h create mode 100644 src/gui_menu.c diff --git a/Makefile b/Makefile index 0e5aa95..bf1122c 100644 --- a/Makefile +++ b/Makefile @@ -3,14 +3,18 @@ # 编译器设置 CC = gcc +# 显式指定 Shell 为 PowerShell +SHELL = D:/PowerShell/PowerShell-7.5.4/PowerShell.exe +.SHELLFLAGS = -NoProfile -Command + CFLAGS = -Wall -Wextra -std=c17 -O2 -Iinclude -finput-charset=UTF-8 -fexec-charset=UTF-8 LDFLAGS = -lws2_32 # IUP路径设置 IUP_PATH = libs/iup-3.31_Win64_dllw6_lib -IUP_INCLUDE = -I$(IUP_PATH)/include +IUP_INCLUDE = "-I$(IUP_PATH)/include" # IUP链接库: iup, gdi32, comdlg32, comctl32, uuid, ole32 -IUP_LIBS = -L$(IUP_PATH) -liup -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32 +IUP_LIBS = "-L$(IUP_PATH)" -liup -lgdi32 -lcomdlg32 -lcomctl32 -luuid -lole32 # 目录设置 SRC_DIR = src @@ -20,7 +24,8 @@ BIN_DIR = bin # 源文件 COMMON_SOURCES = $(SRC_DIR)/main.c $(SRC_DIR)/gobang.c $(SRC_DIR)/ai.c $(SRC_DIR)/config.c \ $(SRC_DIR)/game_mode.c $(SRC_DIR)/globals.c $(SRC_DIR)/init_board.c \ - $(SRC_DIR)/network.c $(SRC_DIR)/record.c $(SRC_DIR)/ui.c $(SRC_DIR)/gui.c + $(SRC_DIR)/network.c $(SRC_DIR)/record.c $(SRC_DIR)/ui.c $(SRC_DIR)/gui.c \ + $(SRC_DIR)/gui_menu.c GUI_SOURCES = $(COMMON_SOURCES) CONSOLE_SOURCES = $(COMMON_SOURCES) @@ -35,10 +40,10 @@ GUI_TARGET = $(BIN_DIR)/gobang_gui.exe # 默认目标 all: directories $(CONSOLE_TARGET) $(GUI_TARGET) -# 创建目录 +# 创建目录 (PowerShell 语法) directories: - -mkdir $(OBJ_DIR) - -mkdir $(BIN_DIR) + if (!(Test-Path "$(OBJ_DIR)")) { New-Item -ItemType Directory -Path "$(OBJ_DIR)" | Out-Null } + if (!(Test-Path "$(BIN_DIR)")) { New-Item -ItemType Directory -Path "$(BIN_DIR)" | Out-Null } # 控制台版本 $(CONSOLE_TARGET): $(COMMON_OBJECTS) @@ -47,18 +52,17 @@ $(CONSOLE_TARGET): $(COMMON_OBJECTS) # GUI版本 $(GUI_TARGET): $(COMMON_OBJECTS) $(CC) $(CFLAGS) $(IUP_INCLUDE) -o $@ $^ $(IUP_LIBS) $(LDFLAGS) - copy $(subst /,\,$(IUP_PATH))\iup.dll $(BIN_DIR) 2>nul || echo Warning: Could not copy iup.dll + Copy-Item -Path "$(subst /,\,$(IUP_PATH))\iup.dll" -Destination "$(BIN_DIR)" -Force # 通用目标文件编译规则 $(OBJ_DIR)/%.o: $(SRC_DIR)/%.c $(CC) $(CFLAGS) $(IUP_INCLUDE) -c -o $@ $< -# 清理规则 +# 清理规则 (PowerShell 语法) clean: - -del /Q $(OBJ_DIR)\*.o $(BIN_DIR)\*.exe $(BIN_DIR)\*.dll - -rmdir $(OBJ_DIR) - -rmdir $(BIN_DIR) - + if (Test-Path "$(OBJ_DIR)") { Remove-Item -Path "$(OBJ_DIR)" -Recurse -Force } + if (Test-Path "$(BIN_DIR)") { Remove-Item -Path "$(BIN_DIR)" -Recurse -Force } + # 只编译控制台版本 console: directories $(CONSOLE_TARGET) @@ -67,17 +71,17 @@ gui: directories $(GUI_TARGET) # 安装规则(可选) install: all - @echo Installing executables... - copy $(CONSOLE_TARGET) C:\Program Files\Gobang\ 2>nul || echo Install directory not found - copy $(GUI_TARGET) C:\Program Files\Gobang\ 2>nul || echo Install directory not found + Write-Host "Installing executables..." + Copy-Item -Path "$(CONSOLE_TARGET)" -Destination "C:\Program Files\Gobang\" -Force + Copy-Item -Path "$(GUI_TARGET)" -Destination "C:\Program Files\Gobang\" -Force # 运行控制台版本 run-console: $(CONSOLE_TARGET) - .\$(CONSOLE_TARGET) + & ".\$(CONSOLE_TARGET)" # 运行GUI版本 run-gui: $(GUI_TARGET) - .\$(GUI_TARGET) + & ".\$(GUI_TARGET)" # 帮助信息 help: diff --git a/bin/gobang_console.exe b/bin/gobang_console.exe deleted file mode 100644 index dd2b48c38b961df23b2d355bb8e1f50861377f9c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 122655 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 diff --git a/bin/gobang_gui.exe b/bin/gobang_gui.exe index e8e67200ccad67840e5f74b63eb391f784891657..be63b0bdd96fff2eb8df795d0d76bf59887d10a4 100644 GIT binary patch literal 134755 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

Y4giuc+Rjse)NoCSG951hqMl$1 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 literal 122655 zcmeFa33wF67C+jPWFSPw4obX;0;437C`*E%42x!9Mmso>2&kYaU?74ZAj}}jmM{}Y z(+osq6%bTVTv!x^BnV~!Lck@&jl~5ulk_kui(U+%&ikFJ?wLtI@4esqzW06ay?-?6 zT27sF>eQ)Ir%qKjnGY2T(Sjhv;5Qf)gd#lYC!PKM=RdiqzOqBfmBM>1KE9#I;Q084 zq2tC+Gf$a1`SGcvpEPHWo-}E))BM<2^HkR)^Y}?-+n^!lCnt{?+tp->OVm(j*#%+D z{CMH9!kyy) z69jc>6#6v^88a)^+9J)7=ntyYN;q7qL6~wCPqM!!zyk1vet>diD069|v`P??FD(|# zJq^ME67=8vbajrM;Y8hunfOBtQQsr!B5MXKUB`@ejz&73x?6}}8n}7*jrd6ygwn24 zIpC37QL!GsJ@7jpzY#y_kY(2?9FFzz1S(_kTY}$+pLBwo!Qm2#r_=Z)xN`hP{G=1y zW7DQl(Wn&q3-Mp(Cztpe&+#!?L*_zj03K`%oKEMp=NPet&xj9Qr$U;^b_B zj}69%!JW7Su75X@1AemT&lC;r2g-zh(gmS^w=@eYc&!y4xqu^`sAWZ=Kj{Q_YZ}YH zPk+~I_|CDS(4TaI>(P_tH_+d08e9V_3jIkZxSqGOyhMLXHMk3`DD)?t;BHT4`B&+0 zwFdVGD+>KdC%9gmzXpH^Cp5UfLLe+baE(j;PwxLO5~#?@=_+>cu_fNx$NX^DRE-8YfOo^40c87KgNcQWSWDo*Z!a3@6|A4TX+rpi2ZKSegAM#NqrCb}4l!Vw4z_~{ zS&0TBQbkO8O*MZ7gOVJjUNr-7Ns|fAI0sc}Rh0s@MRqQ-q0GF<%)VWMkdxOd^C8zA zQg&8f$xxlwiV3v|mu4~;zG$dC}kGClWWF^w7?C9LGvO-Wf z4_vb8o?isPrU-TjG=C)M7c>4Jc^b?WL0I7XWiX&zCC97ldHyLqKkhLIr&KKXjdR@s z_}slf{~4eF{^2Yi6g>~Id_oG^K_*w>p_+i7C}K4u&`BtBc#V}mBj-&xz#gV5JQP8; zB{~4n5)d{eR`OC7WoC7ti%`sX){&jG4vUMN4!+W(P;mqsR4<4)yi*Jg z`HXs)x=%>U2FkWS8(e#fY3)+yIU(&ru+&#=4hRJa|KUG_L5@GIR9X=2A0NsWV{8QV zFQE0Wfg%j_+I%GApRrU*m8il)F?~uoxl8F!06h*+_1jUTS=7{@090ZJp$I;f!0;AB z^@3_kkoK=2)ly9H5WL!F915nRz&*oxr8vJOQZ}VfMJv*Q8t8z(0jP>QphVq+wNWlp zpPmR`fb)$xn+&mkQLJmCdh;K_U|}I9K{6B{lY!O0&+36fP~#fa`>z1sh2bA4K0GqP zU&|&+x=<0WVyU!Jt9;PfqGm>dLoux@5(LX(t6XgpGt2B2!(2lJjcj&}n+v^% z&?JaSiJ1pIT3X5`V}uO~TOVas;wY^QJmfpn5-k{tmN(NE@BFF1JfU?<)b+_TV`Vdx=Rf5tF!CpM%h$huX%*M)EBmE`)$?!HVY~co+Bs{BPiC~XS`Nt{TgA)(@|K^(CFdX= zn|#=oQYIFBh_pjVSh*8LDF;FMQBZbdAG0bq+vRfW@5eH;YX*5+KR?LZ`FT6U#tJeG zUpTT4Q*lO_FN&U-hGX}7uYV!X7UO04VotKv(#O@A*i1Q?X$XMQjNw+f#`=4Wwd`aE z3z%8A*Y5e;^||~hY-WqEX0)O)IE*oXIETN~IR3 z!$z?J%EQ+Hvq z7t$4^?1K)a%WcpCDf^;5?HttUJj9K`{xC!S6l)ICvICjkvF6H{c{Jd5B{N1oD<8Eh zcA*jmh|1Jum_qIbqqt-i;griHxm+sqLpCRq-3`&s40l6}E7nux%(A-o8#3JcVlyp1 z*ZV{THmQIU%yk$V+V-^61Ag(L5y8kkW>&jbH`|p70_s4VCzXQa!{9bYoCHvt9J4YuL`irk0o2D zDsR!+S2>-$E%~pkx|ph4vTDp%w9iGF(@$mqD+z#19PA`$U(eeg02NmK3{`)`s-f?U z?<`g^iYm7AcDzkzonJdu5nc`-#o$w^(2YM$*4)Uf(m(bVYiwA5n%Gy#q4aC9o#wya zk$uu8SHjJx!Z^Yo+YGxGaLB(%Fp6w1Nr_(Q1Q}B-sbdmT9R}5=^vJ_R&$BCoG%MO% zo&~iU+Q8G)Y%eh%D8`cS0RyK$r3u3&B5)=ds+aV$vslVM~V! z=`JWr?=R|oNRPCVeA{TY7Ln6SOS<|5mRc(_!?X&^mFjR5pxIJM~YS_n{c3H`pG@XJ_1J zw;Y5!R2qoa+q=tQPmei!$%lVGT;}g!wbY>ch66Tpsk1hNeAAPbEJrJz!GK1A})U__HloelQe!a1kY%qM0Oz&i~Bl~+=2$Y0ul-lHqd%Q6l9CDo` ze=1>l?ZsAL!vV~wd2B{qkk8na=JE*4sHlHyGm7kS(;0<{^a_f}H@P2^$T^IrN2cXZ zS1}QQ6Y(1aWRuS_{Lz@lx)(viV72VGig)dYuObermM^ECuyZxe7*CaJiaq}v8!MY= zJFU?W^Y4SM29`59TlW}&k!sxgu;=s#c6Ip@~)g+TAO5&Q4E|a(Eox&ajDRkpI#ys3)0zlbi`&K4XQ7PsgH5NiItH2Y6VW z)zP#PE2bwllLN)oA9`;fy~l`kwz`AHrxWb*`GMI(y@F&o8T7)^9Dnmgpv?O**VA6e3y=|#+$T<}%SWT#{iCFmy$Njg)kW9R6OOW_S`zQArr^+(MBCeXF!ns|*`uOpz?7IotGKMxea0Z}sItPVlQaLY zdNYG^WXgXTs{N1xfM=z+2cnc2;O zB{O?aj8%?Fv?-5_QtW@gxwK&*9dg+qFP2*QAU1@#nTC(=mal&ks*;KoHkmwJo08dJ zQ|!N~%VCV+!zo4+n)R=YA&*8NX5Fg6?m0)O#r&r*_+V$yG0S)2po^B@#U)e{xP{FJ z`6xHZHu-{jT~5pJ9bm6ld!%JrGDj}#-r+t(Agn$LIa)mmo2 zEO`PI)VU9i_e3*CHk6rTWGa^LQUH$WyR; zHH{;_X6O>Tk@&h9d?{C8HZL|Kg}wAFpu>haQ$FU9t6@l)v5D9!D{X9ue8B|fA9r?? z+@&#A%K_I(@~Sf2r*ztpWw#-mgNo+X1U zqPNF5U^)Qv~bbM?3Za$7!V0CuGk2Kl`***1H(82Hg7rtA2I1Rxj7#5ZCMk!pn#EFZFqna6CFZ|B@#S6~G# z7e!Al$k_9byF|O8Jk#(eqMlawF9z2ETS}=-u0nLtkzM`!QN$}L2+2Zwt)F+Ke2;J> zg7Z<^JQ zb33Qhktm_O7s~hBV$6bM>EoOuS#A+Mn;{B^rK9MnWeJqrLT!rfwGVx8(BOMUN*2Ue zXudWndXg1cGe+7n?z$_3pz@z3pRMSwi~;vMh7Rv1Sq3x{^K+;S2P0io2hF+%nZR;E zO30hpJmVpIKQZ5>f!v~|0K}Vh(S4z{xS$J_Dhb!TjF}td?+|V$6=m3L_IpQW4g!T( zG5=0f<;{$Lz&-@Hx+6p6dZ^!^t2ioAj2obZ;xfViH8YXe;^obZ9SqQT4fJO9U6PiP zpa2l0-qYYD_|)T|?ieA*bd1m;>XW(^uVlq6#m^WWCMyQtj(?kyBBr}HiZFM`_z6fXfs8Lu#oZbT02Z4nLkp!->S z^n0$>K2<#n&M?@EFTjwY)vdhMPsnL;%JVoNYQnjH_rq}BFNw!OE2rYv1byC$HtGxj zF@>xUJrmLI47to&)E1ottBX2T2)Z}Tc$$MyG#gP^xZ!My0Dd2k&wONHKu=ehHR)t+(8kS=Lor?`YK0N&5g0kYmbJYP zZ7T(~J5Y@8gVKH!E5=<&Re~RuSIYc41*p)=?@8Ufrnacg?S-9+{WEnd2T0}sr5u0` z=oFfy1mWcn%>Y4rV^=!pWRTi;O$;txoxmZ6^1@g~Tz!BFy{4;?aX`hA=sv? zgsZmcDC*RYq8QxINW%w~%jIa!z+QmU_-XiziHwPM`)Dk^3H)I?hE}?4UO}@Toj}Fh6BLu_ZquB2OX2OBKavXR)fpYBTa3bsf zc&ILSujzLbv%+ByQlW>~6WA?`WHkDTklleAcrTB0P5Ko@$~CGC9N212<%QI1`G;34~FY9<34brN6{C_vS91a=b#yBle3h>{1F3+YPJawAoirlaaCaj_-=GV0&bDAT5^|}O9pjb^M}j9p^F_T53kvXnawau+ z8<--`$JlvP;QKKAaZm{$?yAWL(nxucF+O4{NrO~x#*n6}_bBSr`@jOoOhuZjUNiMx zKn6U_ZeTRf#V*($@_FDj$&jS_(fwF|N3uoFw2BILQNg_^;EsxRPo@_FeDY^FqoVz9 zXWpN804~8n_YY=tH?r(Wbs@6u27{|bpd;Y=#yMN4q>p`ru3y2O2T)e|w0ul`7jS_h zoWXUr9GUgC<@DSmYBvVwqS8hOmXyQ#^;&&*$`UB*JDe()^8FB+H(Ko4EvKa5qXT%-0#GBkF zzUw;;}@H?73!xyQnbq178vOkA_k=$XsWSS5s%C( zL(MZpYa^(j$cFA;M*ev}jl+ZzQ{GFY8;qE%i)jp$p1)&yYD00QwvWH;csxE8BnCtF z7!OkA(0H^T#6%!^`Vs!nm^d@~4iWS7P%IiFBtGuS(B%w-mHSi$(HuO5gf&4PyRB0QI)KQ*HSJ4WSHA>;P+Q`Vl?Aq#O##sdvU>iruNt z_n4=Mn?98vA?koNNSW1sB@1rJg2gX-%BqqDhBkr*s^<+of zeuGs$g0qTbZ&nbu0y?YmcRXhM4j15!G?ec{8Ep#oy{2sNfr$|Vq0#L=Cr;;Z&Y{*q zz7p;cAQnj3eaPmB$p^H+x19#`fVf~WLkS|(C|MnZEi#lQ|8ew)MJHj@()q4IKaU~6 zRCPYk`MUy&?89iz!Mse2MrorK7$5cFE5R5jpi|UWbv5gab3Gb9%Nu5}hJk&$9{8VP zJ?hSjw=|y5Jj{(=8M`m1RfZNj-I$~UA9o#9AHr6_nD263wL9oRXJ!I|N0_iFnu83kZ>m}Z9$}7o zN>;2Q#i&ES()l-L*7x-o$P?D0iq+U}i8sZ&aFD8sBI91z50=7!(%lXJcKF?7k1+mbbw0+%-<-xDH&Tv5 zrNN@+3Sy>EL^vi-WAv?WhzXY!ObR-aeXzxT6O-FN11R`B1_##=2VWEBCsB-olT%P| zhzdsVf+8v?p@Ms;K7sj0*CD;kaP>n03Yg<6VIOvx62 z!!A$hGU_>q=XTWsdkV4PS}yb#mzI=&kzA{t4$Ij&E!`Il;?fFn$8iJ(5zzipy@Ej_ zUg|YHN$gz*_V{JRytY~jB7|=<@)7^!8%Tz^#3#USCGejdFa#0zg{=1%6{J7|*acwq z4hfJcdjWhifF?n-i{^9dZ?{EB?qxxh6#e)*&%pSK1-hhtpf z>~+q=TE@HTCGXP25riarKb>4nC>fM9*L_;ckc$ zJ!wdwdN4M-6se%@bDLv*g!v!iiQZmdx}=urqv_hosNX=mdp}5|jxc``o;1oSd@DC# z9m5HodIHk4{OYR3DsDm@EE2k&NWD_uzZ=r4i7a^)$HDofb2_n3@)-yvVd7fK#kFc6 zl&>R{Pooz_e9WQ|)8vx+1eZ%2lr@%19h!#Z;s@%&2+xXrz&8c!k!aw{7VOeTWw zqL%mj2BP;imF;0=x#$RJn~qLG`BEx>jg_ZI`lGbpQg}f zE2-k&P!-Uk$icwwpc}daukJz?=T)W7&($eNg33>Us&G9JJVglJWBO;>j5J5{Ye#0E z!uMCDyq`uvvphBOr&jq3(Q}rhqqKXNc%cY-eibX|@`M+mL?x*s$^&;{JsX7-CMHOJwm{t_$N1V76Q-u1ZPZ8^* zSeny8kCypgpvL~>NP7rA9v~zhAc0%=F#upUA6P<FAV+Z&lA+FsH|tKui$J2bMGyyaRSu}>U`o)7nDVvra05Fbw@Sdis!j()I z>1rq5l~BdwOa!jS_!8^?9qW38f4h@NY=EBGWz|pHb9ATYlPD`hnZJ@3yhjCdQ4l~p z)3l#*Pf_j=a>EHhHsy9BcMa9uPfZu`rfF1Qqw1GXeGxhIrNEZhOF>B&>H70`kO3p*?Qi&ND$cW2D|HvXiM>k5nJC8S(AMfEKI^BDc#?n$sOMAqTAqG|(k7(2H>W$P z+o<@iQ*>sCMUX|Xuw0}@jHjOoa!7cqhMCnb*fY zEMutX`JB`Zt7vQJC)|Q&)2C-(c{3bAW9G+*JK}I_tJ<1-zQyzwx#zoz`R`H-oR&$J za@Y51HIYH}i16nK6QxPjMSSJWdd2p*-r(&=(ZcjYm4IJzo>jBkxaBJLgCK8yF_) z8{UT?d-fh$N8Z0fxql+c*Pxv2lj=r-?GycPV7f)jchg2tCz&2jZ#0$PB&Ih1%y;H4 zw6Qh{-&IicVpffCg)0s^F$yY-pg2f>!cp3Ad8D)Y4DiAbb*ACSME?R003wanh9Do* z1}G*Lt@MZeceEq*h>Q}xO>mtU8M(sM0#q&(09_lPc%Q0101DvU*PNLOCyJjZ#x@dW z#rQ2?9bRMc6HHJWP@`nEl)T2bQQ*E{aESI&_1K+&AB!PTOX<(U+}lkDrp+i-9|or4 zXsRj0gyyN8hz+Pe7$NaH_y9%`%``x&odL>L9JJ4(((6zfs0p1SYVk_N7(E}%U^$KSbK;%>%0yhVq3n}4qO#cBy>#Lc^{^9D@Q1KUiNzve83)*P_?cz$YWyP*= zyayu@1-F9m&|3nL_K(Hqy{3IYqAz=D0ow7U2vm=whDG_$Vt^6hPpeVKalB_x0DnKq zbp`c~h79x9S_Do)JNEs=n}vhF0`Li?eZdJq>-LcL`@DyErAGb)Zw#>B$)BNTrPTUj zpC%TTdRFJ>_SN<+iwd!h;ZiHK637m~gce6dk({tS4<=;%!rV+d^z0=ljZ~Q)3l`~# z#hN|a(6ch#Ob@(mh9L-6rYF)#6pxbR?IoO=A7&a4w&ZekDmsdINT?1{#*cnp(}O4} zkj(j@(-chj=4ZkjO_+lTn~>Q*patnVdut_p+@fTU&w&rwIwR71$Dr zo?XN%g5hQs*${VrLf6Z|F?=6HmCTe&rd%)~kDB2EHjLMe!GxK}0S7XP{01Gy_&Zo0 z1jWf{u3_RP!C)84c853f2F|gV)Q_T*MFM02&>Yzs3z1%gG$eOfYe|0QC;2HHXIUH6 zk^NBSHIni|KWdr|dAsBRLEc2fC!gn~Awul_^;fp5a|^%~R@t7m#^Ah{f* zg!#$r{kw$s-L&-gZ;>G%go~dfDRD#uW6>6uX{<$U&;^HF6HM@;X+O&0jVq>?x0Pz(~d(gX$7coU@)>An6Q1VMa>{q zWc!xTf`IWc$FT8f1q2Xe6ev2du4I80T|49Y6ik>G0E>=Jg5Z1uP+!jju-CK<20!ii z{`3}tx)6F8DAeHrQp`a{gh3t$i2n(wUQXeIG~I^L2rBIg0hl|ph2Xk5LQ`)Axsay* zbyCyRyuH-s;gPUkh&iT}7I$PC@|A@CB>yVCr3`3^4yBSEgJ$(m?NB2^O^9VrVmcZ- z*D?vdNxP%ukO+ebaUkfQ3Ff%H#rtM?eC#lA%_Vp5AnuEX*8^@ZSd=6i(d$q6S7f?Nnfzi!^po53n5RvV7EmH%@v56Aq~W(2duZgo#Uyu>-EvRez&eK zUQ-d(|3(~A4}Yv@?bmAcZ2n2;a9Sze@~dL=2noEwJ1fylH{kL5%VP&IqnKu)24Ih& zI}^*q6j%)PCz7m^@WmWL&x3ws=P*|~g^k?xY~_oXW3PdUkeSQdOY||9$zJmLMDr6P zFc(U<_gW^UcybA#@rBb zKI3dcV}4G}CVsfBA^C(1jX7H9;A@QP|3G?eT_Zv0q{I8iM)H`<=rc()5`;bx$@noj zJn+A9@vqBsamjd`nnnF*^x+sqj0C-JOvH&1BSgVACXADhdj3!H@cJ$*kC1y`hCNB}oBbU2=s6h=rFo?t9ASZLMt>>r`6iyw+2>GePpds^ z6XT8jo@8f~{pgt?e<{hIY4_;WnfqxscM322?!|i-6)ov-2d{DLXRj|cQ<~c>C*}+z z0Q^>+MM!NgAP$@rA1%WxnaYq@<(?RN#~C%l0g`+gCqciv-cS?&2`$b52=ClY`K5Ea z!u0H%N!t;qr649#my=nSlc~$$Z(Z=XTdg&a9-23fWWvN$jK1r;NUX(u-bvqV*SPqFILT4v_}ho;-D=I zd^QzW6l35SoxHfXnuu$?oc0*ZeFFJB%-%=RuYQ8CwIW9VQ6#`M=3*5PD|p=j()XHb zSvBWkC2QB1i-`dCpTi0nw*PZUzFe@sAi~Y*1Jz!jQu{LG$Q__uSLBfXl+xvZMSrdf z_h(5e*q^aPc}eM8<)ZQ@`tv|C$N`D5U|0^F!OzQ!9V6~O+@ z3<_z);%z?HEvgxz0aDNIHrcOELpYBPU|Cf01BtaB=R)+lskLZt3u24jk%soBs<)FCDaI*`8TN^l#XU&n zlrB%A2sQ$0zuiSTiDN8#j9so{)*$=-SiG?VbH88m#^g#e&gAegRO2-y+(mbI(nZfp zK!YsQ|7V_p{*R6VYTQc#qiN^VU0uO1&Ijh;>kl?oF#;7hDuau#4t0HQofTmF_q3qe ziRq(+5OFGE2UFSp!fQ$;_)3F4Er@##6A2xTGv;0wNZ0DypC|6| z*+bDi&o4AN5jCI~?HLG^Ak-9q0&MP4Eo`uVjJgGS(WlR>=OLtfo(2I#!-F=W5o4_)<4yj|@ur!;GA<;rUNSTD;JB+md z9V#eE3kwd1<#RaD-2_xZK#Leq_eMYyInYA{w2XirM}ao)3ks;wlUrASnfs~}1-NZmw7hQ3o4zfJ@JjB0So$Q$0I{y1koDYN>ZhGremSX{zfe9hs! ziti&5*ZI#AZX8=fW@Hz&I2ZhxGF;RNE&nh@^Pr)8{U>+Kp+5Hk-#4{@700qlpZjp| z7aFiWJ6q7&oc}Y1klYo~gKY!^%4aSnAxSbc{PKWi{t7^nJp^atpom4$P1p*rKW~i0 zFgiH*o&=^ev=j513aO$GDrobUf03)Un+op&MgY7>>E1m3Dy6&fG`&Bl-pJF@qmaG^ zX|_S}|G?Nv7ufsgkz!&Wnz>CX(v8pl0kNbXenwX7C+rXPGc*^dpX`83tA_=n`jC;4 z2N?akz;?v>1q&bc!q~`k(sdIt_Y6i;UjtFroyy+-f&~nn@nDgld59VIAG?=TOyl8O z(BhP=&eO7~Y+hiRTn_|z#Xx;VuR!c6pO#L%CypI0R+t3>$<*L{jOJM?X#Pb4yDyo9 z$_tW+iF8(A8cylYfy_S{nh_c|4%iYps{V@uN|b(!0Pg}|$d6#{mojEdUcyyCApD{N zjpA@>=G5vbJ&x)r_6Ysa?8P|DVs>8=PjvAC7(dqC3>i+31Gb{}CSpEeD%$gcXhMiU zFufo;*FdF<*lo)UxsnVobW#43GUzK(rA@Qp?r{_`#K48Xq zST^ngkXzk)Fsun`Y%kFFD)1irmq^KWNSD6MwvvQ^i&IkBi74nqbSw*;Q7VQ~W{02CfsRnujWOypzjG`WQ)^7_k$cXi&Cvox4tR-Vo7epF;Ep zFp6Zay{5YewGC|pujcUgIhd`oP;nO&lM7Dge-1{6uFULYZF2?up!~*A`8rmf9vNR` z=M4;B2f{ZS5QHz)eKE>OySCdxjUPi5JHP!`sAy0lI;Y4baufaABg!eB?lql9ooYrg z(#?rbYo2aJ=~$k=j?#b7=y9Ia(>&do%4>PLJEf2CGzoy|!U5z%@oTTC2g?14jD>Un zfWC|`KbdZzrhneZ&ybU)V3M_lr5S%Fs?6nh6DjTF>7JAx$J0+zdIV3;rgRohzf5Tx zPk%w_UOau4(w%wQNSbNp=^H5Bny2lQj^*jml>UQM$jj~WX`U{o@>-t$n$kyj`V6H% z;^}s3B<>{f6PUY$GluqPnh0<+!dM%|}^7Px37I?aZ(!X_Na`=eSDo=k& z>92YEJEYmze}sIbg(`x@!V8Dj1#w^yU6E5*X01h((emSQXo)(+wUglgBPQL*f|$i zb|UY#-~$K-jvwPAjk99a4b*ZoT7oWsi~w@pEETJ}xA+RS z`FDj_S;Ja`Gzy;sBShL5aO;rutN07zKruB0$ysKQ{s%CqQVDNMod6%0w;)#zF%ActBfN?rQ8G+T4*4|-QR#%LI=Eb3cooZN%{|#ts5&cD_806ZPz zdK1iOKqLhGs5dtz!B)x#IEl7^<0P6PrKVGffAf*Km&JacgACa24hj@ZbsjphpFR) zy=3$%TOg|#tHA`=9tXjp7D6Gc?gr6?1I>wv6L&|WoW2J$YQoR$=}zn@o7dITy|3GZ z==OFxB0GasGsc_MlN=n}^zF)B`h1vPGV@JU6jH1 zi)`K*ZT!Ep3VMeY34X*uLqa)>&>UL(=*UY|uA@$cG++`fd^=;Q%s7#N$d5~SoJwCt zDQ)T`tL&#YY0e;~h)7ZB#L~bacNK_e!t+*@NU@CC zOrpa?P|&uK2qq9u?=@#47>~4eh{o-S8{RE_z;lc;BGG}2)Sf<^MDdIXN7`G94=`cV zU!p`$P-+#T)V?t#15p|XO5O=~q012Y`4Oze?|7(bsE|*F6x!xhZiFrn-Zz0)?TzZj zf_?+7^bV@quWi(+<%IFOW~@`M5)n48OQ^I8rT;*uhBtDB8cnB0OHm416tNB3y!Si= ze8|#O-Jo~E80Z^*h?l##2=1XaxoCrFb`)zNEni}O*C43#PgI6;+U-KLTTtl$ zls27EIx9L&&Wbt;piR{oGC;pyhm_Rfe>Ljw8Y=U}fK4Ug+tI9ph?(JAV%iX~A*9~v zLpF&R|C}0N7S`ffNL#O5lyY|?Z!fJvkuh`Jl1O+OWT?SvYDhy8S`Ds34fOzx1oisH z%ms&|OhOar{+~z#18_A^X?H@T7zZ#hLDT%Tm}EL;9UnJrXtJ4_e0WWxp1(q60a$H7 zvtGh*fq>rEkOY`+0Y^E(9|yeuC6MC#PxnbUQRUM3Qtm{lWd4j|Ls9)_f~h|Z+Z>?^9gD*}Zu^d}RxA4pn?F&k4i@_uGVtS*0hKXduNh+z1BW;3=FneHTNyXuOH>I#OYz0Vr~}R9F~Hn!2CLf=Q2Q z&%xTWzxM2|J#W;WS82~E?Rj<|Z~ue#tkIt3+VfrQ`HJ>@UVF~do>R5wW7>0|_Ux@a zZ`Ph|wP&36ys($kJ*hp9Y0rb&vqXEosXbrRo(r|-v)c0s?fH=Q9LS!b{SMO?;}`8n zx)i{4-pJ0Sg4NK=52@6PZ(1qo2*@RDqb$_oM^c8lqff@PL??>P(6Gl z9Pjeta&x(qf=jE;@&?+U2d|dgfmjKzq5T_5JO^tCA;XssqSv$dE3W;7FPk7fMDMrY zA5L)hEysmKe2+S?v2nd(EZI)F>TCv0vtdpdUqc=`F8D_Sd0|><<9{&#clU7*vBue4 z2$Lsi`^_4<+d~v7kmuz z3Iv?+_5Gln9WxI{y}=VnjxRT zrE@qFI5&hrWnP6Dc!vS6`fw|#AzkxGr;sY+02e(*p))gJhzikv3+T|-S#^2P_do*k z!};OJ`=?s2k&{@6NTURz@?am8K2fI<*(pHxBK@t3jH6IS5Y-uVi-`yfOPk6iM{$)wV5ZRFZzBkyqON zL64NZmBy>ljDARUaCTz60(pmgLQ28Kb`*YDd@b|eIZ`VpGhu;xYI6J^G=k4 zcus!lGtDFuZkq-jDb)_c0eE*3z9#BwBlROkL|pO+;qNEl6Yt`p`;c~cXE!)--DC`+ zc~*94=#Vc^!9DSu5zwCYtPRJvHsxx%%O&op&M;hXUodAXariK>Mf4m6VR1f9F!zOY zF~1(nW#FKhGoUfXm}mjz6lMBAkVcg{s-DErowW$tWQdDVJ`7P)j~CMTE5@vXEes3eyB4>71*RATQQ5-wzGl8UL2#zbmyps|RrchDD!|3tNf z?}7#AG9b$Vaq&qM>0L>i$i#a;Z$^U9Bb1@ zXzz_=myWu70u_x-wV%FMhv~RC3oKOH8$b>F8+=WO9UG$JI4Uw_mH>Ueg$4)pe-X z4XyTs|2GU{=zAMz@^L}1^=Hl`tQwxgTp*-)6Z7fW>71B?BUvmKHr$!6rk9zAAs#Ks zrZ>>mzX3{5D49PeDXo+!SXQ|#?|VqkoOgb}fV<72X9;ljTP_HtPv6~7!DISpBi4yK z-3=|Co&aN>OMPjwuBFu!lWMBh13yHKivf2)vZToQ{F=0JAZOia*S$gspL+_u&)Uxj zI-+MIa6El$KTNn>*CFOXgMYkiQh2U^3}!uDgAS<7-j(tS-TwCj^-|}@{o3K-dJf#g z5I2iqgE%*9kR@(BQ-Ok22CMOT>kxgN{}FnN{B!`aOXj>|15m-=MPTy+@DyHDJ8SR= zG86XJgqacN|)`dsGk!LroUGNzra~|@GA*s-2|r*ukzvA zx_pKl%ZKC9%JnsUTA8HI4g_&vC7~@}kIjnlE#Su6Q}}HCm)bsr04qw`pws+?+wtHP z!oVkdoVQ}@6bm1WuF}fAh)TjC>`$P`BZx%=3FLNzS!w{*xD%)fyv_GbuSfWP#5ec< z6k}&j{*dcRw&|jG?zms)?U}++1{20H5~lNS5Fb^}+tX?S*EK>1f0QwJ(0Lu462)LS zA}Q8*S3rUTir94jc$MD&X6!nED}oXVjV}Xl;G0GWweQox85KS6LJ&{m-klR4h@Asa zQVaM8@PH>GN9Km@)wueG>@)mdSG{7)WDT6(sMo`6;NNx$=_kG`!>U|4iZK}}OflC^ z40UUyX{g)iejS_!jHCKf3s&wr1rrlbFqKB%CeX%DrSV5C6-?-fZJU20bWNRrnh3_! z)v$em7ef32O%+-N6KLLo;+Vzc>Kr4{y+8?c^3RL zc%qbjAO0D$WZgd4l=PMkOF2HRJ~cKP-{G|!oQjv+N|PP+77n+2GRkIh>8wIquob z;OC4mwsG!FI|orh@AwLi&%co)+8l(i8F>T1&9oKRvVZE=f#r~wlJLeoq(=y^Uihs_ZXx6bRrnSx zW;N6KtKs}r*}eUPgTUXt-l2{88wmamWXcDowy=RghouyoE5=}r>j&(lp2JM#eG@uuH!M!5Q=Ow^;#*<&vI_O zde?=eSnbpGQc9VG!ePTB+7cGN9$^D<2n&$|-=K9V++bTgBVl|H86rki~! zsxboIKAqlCnW7`HB~GF3>kMkzOC1P=v;(g!g|UOXrXx+JBLp+)qPl=%Pp1Vi+%=Z^ z&-gE3DfnmnlDjHOz3%cfG<$`8+S~jeBGCk~h~*#zNHNQ_uvdpoNXz zkHI?!O!)4jLA4w5>Q(rItIN&RRwN3<8s%mxJE@>#w1jZR6eU(&gi75HB0UKvE!;{w z34MJHCJko!zkgoXLh!+)|Modhga3c_8Sc-(&79x=^c<|g{kPADGEF#O_9L7S zOxT7NT5>ItfVdkF!2|&usE5|EeZ4y52%Oz5xK>S9t+8n&uw+6sa1&jPjujUGy2&Sr z;kT(Xx5FPU3;Dz9J(PbZoWJ-Q@-K(;hqfXATsVIZ_BDaLa6YgV-x-{QX^bMmziTt{ zk4EHQW_{ey8g(P#i?hkcKD&?${si?3&}W~z1phA)P;USsy^+#$@UbUVpSqd5nE72PUw(o5@}mC<)&DDjVJ_KT zk2BwJCw&pV=te~5zm}!E#b*H-L z1z-Ngx=kt&l3OAE%m!zuiv$~YuBzqY#cN2bB;x`%fB>MW-^6F#- zc)$C4|yyK8yvZn_ToWA3~r#W#b&c>Jd0Hx<9tD8p+$g>(@$IcZF1bJCcU zIH73?Oc#Hh?S{+N`B%Q{+fsl!{&Shu{*}AxHosE$-mcmr`Jdo?yI;W@XTD8&sypvL z!~JJ`b!&2KcW>tc`A2*k7SNzE!G++a3Xe~IZ1kkZM`ll+lr#SEuHz?-XC3tClYHxz zFR0zMqqfNF+q}}ZX49z;7V(ky?^>yD*}!3hI6?pScJL3=2%&#*NBiey=wFy&h4k;R z4DKiB|N0L8@fSh=*K*ju?-I)C|6mJ7i2pM={9ncqI62?K_3G~3^a3B2s;8O4ZC_UV z;aYGQ$+NB&9nDR&G!h7d+0l%(tA6!L--g$H+m@J<)kSXK>i2p>MY=F8iRfC=7{JGM zG;@_yU-$S5R+*Di`}y*>`&Vr4Y)Y9#Z^v{QHF zgB~YoPOjVfR{iVGgP7h-9~^4QMagBa4Tx{&yZ!~FIkiQ&G##NNTr>ig74g}Re$2kz zFZg6H_Z>JoGpi6HM}Ak#oBRkp=E?rs6sE{{biuM zvvC6Bpy?kWPUAH~U05s5SlC=H-v;y7n0@p&vH(I-x9s6Uia?x$RetSci~>PRS1Bt#m8CL+58f2jWNkw+{K5z49SCa8ySfHWU_ z7>~aloJP=WI_V0+hpmxn@Nu|wJXt>?D=#y&O@^s4l14hxbdWT|A40&JM$Q&(vUE24 zc9p1Gwxp$|rgot}scbZu`f>24sLi_Kh1R&b7reE**I>=s0q{lIxP^YKz!{`d_cSg3wwC20vOD41R#$xAD6OzlkU#I!V)nq%nAEYd?Dz10xse zc5P8^ZPA;xyOi3J#WXE_&o81!ZLtCqMT)=dy}D)Fur4>1mx_ga-cp(d0NT6}K*_!( zi|Upa`wHPK)tt(jGX<8?af;hoI`g1i2LD+Tg%&XtE%D1%`0wQ-w;H`KKO(_PB z4%Tm$eS7jbpl|g{zLKR3T+m7i7s2t;#q;-4WCP>d@Q(T(iIwz#x35#4uiv${wq$-J zd16=7{tsWOTfDJu`DSP$HNsCMAlG&pJ=PC;@1AjZ`TmB<*X~~5RN_J$fAgHYw~#J! zkB*OKGIpD0U%?7cOPhn08&8Os>%rh|Q$r#c(rp?SI)(M{6T-`x#pGqYa!-({SQEI$ zoM~OV1YF=;ajnq2*9G3X<=Z$%B!Mtx_K6CO7COf%=o3CUZBEaW&StJh>W+nQROs&q zCDg<1n`n5MQu8WnMqTb&HP_88Ez11MJ_P2J-a5Gur$U?#s~HgFbs2D3Hv)~w@Q?wp z@`cjOSMT~=FVwAFr>)-FCSt_Rq}TO}x7F_2SX-p{HhAG_ai6j`%uLtN>IQqGZ#N== z>OWZSTe34bja;$F0Zj!y>eh|K z+w0V4-)r;gURqPXMxjkZ!8Q)VC0qAuZr!?#kh^c;%XRA+!;56=MCUC-M?dB(SWxGE zMZiMfTTs%3=4JWdZ0n-IxN+=5Y>r!fB`!CvifR1%{cn`58@Ew_#1>U zL9lv}8u5S6*q9k{{D}i*KFv7(Cgw(42RJdTF?D%c!*-FiWyXTF&BL6Iu>QP_K6G_U zcR>6hry!DhQcjI5+YP5IFav;`9TzxCV{=q&IC&o8w|bT0_{^&eL>I0bCg;zZ!{a)ZvcH5kxP2S^NY zms!UEpovFY<$MKe@e%%yB7cHIt;@zcjStt(ce)$j!C3Op_eg$pH3^%`x;0+ROYBNBvbe#+){(`3I?>18JMo#RQ`P-L|I$_J)~$S+ zVBgnheWPX=FYYQatsuC@7KmmgeLo&2q#9Lj%yhgI_0dfH8X0c|!*|pHAyL?xQy;vT zX6fEF?Y3TB)4Iah4hdEVYl08f%C{)rSNPVg@CNJW6=Qk%dqkXa1kI2(BQC}LM%FKy zXqz`=WHs?0(cMUyaM?w4NR#(vhfE){kTQgZ2Ww_;ES+7uhBmOA2i+8EdevC7^+id0 zHO9N$w{1S{9$r^S5uovyfx3eQwv(nIe2)bdKD^dq^?I)Ed|=evMSQvc+i~+Pd6PCM zOw^hS{QM#=Z`~3Tqj#jgxQc#?@8oPZXiu#Zco@P-mZrS^OR@1dvsp;$K8AkH!VI(U z!wSVLlgD3PEerKh%dj*{O2oX0K%Lx^Tu*KGfk-5}l-_Jdq?@{?`*<_F9MoY8-$mPc z@E%0Mhjz)A0S@cc)+OX+7t&mb+;5}JoZC{h;F0FcfCSoc)51p_+YJDkb0$wUXH6Xa z%-E?g(w)uS8yAGF0PYJ8u?}&Lp6YZ>G3SgPKXL3B3TVU$+}8LuuE73)c3ez5wN27x zClohP|ETV~GBgo%oJ_YbZK&DsrVA5SW7@SW-NBVvNb7!k*HrwMCe-5-0b5?=6H-IZ z&8n7xyu#!oJt4jfZ$VslCt7o6Xl9X*wx&e4McjNu8fq>q8tKd9jj-t)l*GAYh1Odx zRG&^3UF8*=4q+7pIxo`a3#Iui*B)t5)#sqsDO$dJGCqC4^41JJ0D}b%pHNe`BHB4$ z^X>^R$K%_x0>#7{HcsC4bz7Gr-L-p8QWC|`|EZR@4>9mhphT`IgZ~8Il(ojJXmJT_ zoqC(Kr~>PRZ|wriSS%ojQmwDsz6_JCe#;8psixuzQ-={|5rUB9BCFyuAIPGyFem$8 znUDEJ4iChIXlk5BdEtj3>sz?GZrLJj%fRP5f+gCfV$Iw10lTeB)%RE5d6{W1)b3iW zZrSGBy^K5m*vs)91RpS%-a0StSA^rOY-7P&B-iEQz=9$%SVdvC_~?Q;7W$-(Fi4Y~ ze`$?2@Vu|w|0AUM(SSoic5HK?@!TtdTRALg47Zyab^-RECi^7k*s1);3cFWCzQ8ig>bN`2b$Oe8 z%jr`lks_fX#3q`5aS}j!n#wtx{v|oc?GhZJxe(rJYq}LF@Jri;R4?2v?#?^4;rrX; z{Wz{)d>IFWdUvry!{&`^5A{_)4%9ue7y0bq_Fb#2U%dqi2v?8xr@qDOe5=<(quB5X z@Pq5#eYtLp?3=%eyxg^JoMX^Y+t!`FZEMx7%dnNN$5bnv?|W{gTJl!yuHEW~h2g6M z@Q-owR=*;@ZtL^v?yWeD;>Tf{xhv&=R#A|tcR1j|MYF2k{_3gnLNS~8w1io`4 zd~uCwtqa`{_k5Z-=Kc=%vpaLu^gSFSaX+&dZ;IalG`hetA6!+SlDo~VV{vbc4D3U0(?`hi15B(G3#Cm-AZZ1 zw|4Zz*1_K9NX;~N(gwDZnGdw?bwcmB($sHKd?iaX_bPuUG*sQO-M3*Kypu>(MOdZ& z)jWi)>fb2AK2C?v2QWkVpZQs{i7TSHQ_{3f`lgUYrGOwL*AQQt*0SRsFh!q2+J!ZL z;iddWvZ;5k@whgYj|R_3!!xAF+|qS?UWb~KKd8y)(q2PLcD+oXQzLb?b5air9U6p` zURM=7PiX%9Y3(^YoqTrs(Se$nYp#{ras%6e7$v)YAixgr3CPz%n%|M8UFd;*G!L3_ z_@1yk>^lIOLAWiHXXm!U?SRkUj`fB^3B8bS90U_mVR~3RN&{i6HvK~j8ry)F%XbRq zA66`(KZ>B86|&V8bBR1+cGAiF(3=4^Em8Er3mIi?)d(B*$Q30VhSk>K$o_^U7-_>a zS&%H*wF-WYs+E$()X!42A_!I6_OaUlS}8=U2dA|XNUF)kp4+cR!VYn}@}H)D zgT_2RRA=pI={UV^@fJP4ym||^Q=xSQUIaoKymPfh3(4^~Zdlca5ED+Cazf-=-10ckr;lQtr1()?)xX)Lzgowyi7MGx?m4!C0RqKkr(e+PXU)Ig;%lh`SFRvSU zLF>Nm8dqLl+-2qWea^po&pngLpT&N5e;?+Pn{)1SpY!}X&w0+Dd+xmt(tzt8ELnVL zE&0^^L-*Yw8T{l+x1o(G2B5z=_{;-;O553p)ca{W8wQ7B;D$v)po=k!(1+vCKlHJW z1jVX>22K*H_@42Xr7t)=!g{}9aKbsSnbx#t+Bk5EF1AoTd;T|sPu!Jk0KMOwE*%;8&K zo;|_u#qo_Y(jA1{&!F6MfBeVzD^u>d5BwPrta7-~0bO-Dq4#s|e;j%vhEs<{)`RcP zKZN1QiF<-#Rxj?PD(R*Dp83G%2}9j9dO%cZ@QU6mf}n-I1#$eIV{(DfsQ-Jv5fnie z6opHR#{Asm-PG0bZ7Om`#YgQzZ}`pqGJKJ#?!l5g-{f-l2cEm<&m_91b1l)h+?FN{ zqXzLj#_7?p5J?6Hj_GM(xJmNU&(T~!qk9MQ3_^YuMx*-MRmjCFHXU0D=|Ioc( z3yS;E@G??j;_&GSyl4A^QXZ84T=4X5_x<#XU;EkZM}K|t z*%Hr=0C)bOyC#D_d-$v9wXy#BvxmO~yy0RoSGZ>D)}d5!cyxdew{~^h7(&6VyZPp& z&AVeG$+hemG#|RT@!8v`ZpS}|qGaFshaR~<_>)ikIR>Zdz72(i`;PtOF3hqX`03|9 zB5tiyQ{?C${S3_v^)y5FKtd6Y01>^N54D3Yj6e6#LjZ1l_RsGnHNXB*P3~i#l!I|G zLVNba-J+)w%zSN1h((v4x#tVyggPb*PZfne2KWbI-3Oli>W4%O6oXWG^-c`0X}%6) z|MY7Qt%XrP0dMx~+@l$Z>oR6eR+vm$dz){Fbl%j44j$bY{un`8db)agS$k(!7e9?e zZ|rJgk!Wwv^+-}99my27L)G(Z?LFO5v-4wOhcJ_`S@bp&);XH%$t5##Es5RO7GZm% z?TveSTH9DGUQA^(PJDnhw?sR8y4kM1(P&S%)3S?Q?=*Mc2oc91UvG0H+Sbcu?(V_r za=5v>m1&noRPWpy7H*6kR8h#?+s2WF!oER(Ui;Vg^=eW4N`^I4+5!2qC#KLT(Yodb zzb5KI41#6PK$EIS3-&!4;|MJ-#U^1V_+FxyJ&z|Pa?kkzTTu5bxM$@r;s(2_^ z8|mDQYy8)9AekRbXAcJR*hH9A#e4R(^|p8Q+;AleV{I@MO9#{0LLrzP3>H#Dnbcq^ z9?Qg&!P;GRFpwy1b?To~V!%(&si*q`?15blZa%o9KA0cP6jLKf?z*G-q*(4{&4~mgDg-aj z1&3pWU?v+(jl_nMn+r+q&1kUuQdm8WrQb1{%pa0|&zD=#+6E34lZ9Zc7>sEus`_-f za6VfEEmiU$Vq`F$O(cV%vCGG(KU2Er3dzw#7A8t(<1uPU!5oTaF@ttq*olp4mpY)v{_MK1p z&ci->LErhL?|km}O?w1K&GV2CpS|9+SCh}a9lrCa<0ic>W|nXD;YWSv{XYD#?|O&t zdaLie$$vg+$}{P^KIJ>_^YOdOcYVTl&V2NDx3u7X|5)P=XGi_!T(*!JLns>FoKGGI zT^-ytnnGM1I21%w+kL}kI!zQPOuQQr=E~r%q=!9Tp~Ss20ws<%`;Ym^!s>ztqS>Br2mNH66EKRz6y^UUQ0Mg zFTim#@w3r;raLJ&a=>`6;BKOBs6+c}njN zGFJUd&_~*|5%MBWX%ilrYot8V3`U<}he-&fH$WI~Nz8UYwA{?YY#{Sz$?@DWst~#-2c)(rdOeb`tp}q<@3s zDdgvn_BLQ{fqXyG@9kvldE{r2ZhSLz`Dc_xy8A7RZ9qPZboI52Z9={VY3yx`)gzxn zdN+;^CWAtfqWCv z`VQzzd8GH^c#QCoZsFYt8aF9;pm`9${ zySo^B0r^R!Z`uR<{R;RH9J-G@3uz8`7-O{i1KBi;LZs5{Cd{m8o* zdlLCcq__7&FUljmB*xg!kq;uJFMvIdd=1if;HY{YWs!ar$9m*vkk-br7aw{0VBfVk zEa(_(;338NU|!Fw#v);1WL4FpfroBW)c*dCDXGeg@~r&mz4h3mV8bA?>^c zZIf`2z8^;p`AMXIfn$vDk^VJ~apdQa{usv{$j>AFC5{Q?vF^_TIPOBe25B#jN#w^1 zc%?6n!^qDdtt+A)kZ(fj;CKxAexz|6)5s%svG?ORj{GFj%2D_a@-;}$$MJ3CG45j< z4xo)t9_b(8m_vRX=`#mmXXNLR-v0aW8RRFC{s2eK|Aj6{pT@BPd5kC7C*KR(B0q(+ z<_};;-oe4{pPC;sS+$CJoY`e_`eke^2SJdS4x z=Y#MU9P@;Ov=7IN$oC^1#=(9K9gzM$jwnS1Z;`?)K!Km`UAN@RTZlWRrXip0^tSm7n19OwaE)AYrZ8p%&eJRHCH(gIv1>M09`Qj)m3E@?yFBzRsAd-gwyk+}iM2uzEnrq*5j8xo5F+ z16SMi?XOS5&%;0bdU*L(SF-BBd7|DGpS7#lTEK*)&~;4(TN8M*>u-MDRXN4)tSWX^ z;7trxq;J>4H;LXGJ@jCQzmay}xK|2Xj#umAE%zKR(7a@#id{HX$TsJ|hg`lZNWT66uj9*ceUE!x=}xw<^VGGfE0rodvWLq1 zQ*~_sI2W&H7Z1ay0_WR4PIy$Ow@Y10(IFgl_+{|=gThfXmG9H}g=et~CswnXu~lr{ za1~qqjO0h(;v$8S(*M?ri%aS zYfRZ{eCHc{=e6>@PNvuTu3sn5Z<1+3rfDDE0pIyuzVj)0e!>U;mOP)8>5pW3TBa3m z5&G1~bc0NPh}D<*tU{nhk3p| zl`jKSQ@(|{G|VHWmhtGzyh;# zRz;G#B-Oyph>wCL5|T_=dD%)y3?_%PPFS*(~%(fr48a*mVC97yG} zSWCW~IV1ZMDd@II=jxbKD8`CA>Qme6u-b~VWYNha4>}{*f5KkFU}o$!VeGYRFrQ2^ zb}^%^Is{pZHE#aCvEpz(8B5TPlys7yL}Ij%%*)+5xbFm5i&MxYYg+qm6azxZfj3iBE2b{stOq^8+U9lgM8=O^&^FeV| zg|k92k;=l>^%xI2o+Tjds$8F9xd7g5`DmpeIQmez-I~zcZAZfYUg=~C3 zg#RpqYiAH%*rTNDaJEn!IFvz+LvDG_&%VTli)iia%Pf^ayP+*!>?2Y z%|qXB&{J6O)Ne9uZ3Dl*Kw2bjS(4&AOfp8jV*6xE3~p9HO;TReMg!$rlTbX1_QK$u zbdKnh9b(t;d_H!tIgi%E*jv>3uH;Y(ysuT~ZN!LTwg93T!{3QM zXhsnrf%73chebOx^vBpVop)ukxkwSQ3f~i?bK3Ta{2b*Y$zpS{m`@FilFP84N>~e` z$3QH;A0XTs6nMMS*a3`o@~Qxx4`&bd-NZSfPXqP&yatOOa-h%L@d6e}YzA_Z8j1pB?Yw_WX7E@_# z$2HK{2H^dBj~gO&j`I4eLGR@_QlmN5jHoHS@_WSsuUOzef(0hguR)Ifhi4z2dwBj~ zhI=1u2K%*;OnrXl^Cv$)`}tF!pMQ)!Uh{bH@zCQOvGB3} zW4UAF$0mD~P?+v!p zZI>IugPTW+qnYGe@!t4k9Zq8T`0!gZc(5cB3vM1#e?7RQj=@ZJb1Fek9c>;QpiSm{ ze3Tj(ipK%LMJy}C_iv`>Q!uN*g39YEcVAdZTamalHzTbGtmbpait07#ES??V|3))3 zZB8ceI8TvPRIhTca6rYH!Z7B0K@+WN6~9;|utk22iBeO=DJ8O_1DM}b1giCADMOXI zR8@tCp<+c=U5$HO?5v6^A)Uq-a;y?^&`D*A_TrQMu-=eJ#ghg0bEx;Gz?0{|?0vWv z-P_&fL|Qu9TKD2%H4iM@+#Bs|?s9tDb~~+Y;Wj+()ZKC;3wTOJ+METjDi+3S4?8VA z-FSj48u8MtT)0Fj^ePvtixI)4NVuyrO3FmoYWIo~ zzrCw@H`g>0ZN^iFYg~*yJ^T8wEkv7YPurfJ-W#1gosm7w(UuNJ6gbO8Xs5Tcx9kby znZZ_PS8sDSkg$NYwmb$_71ouE z=i-EW@$~2Jy=~6k2wjH!ZP@yuNwkGKt;?@=FO%`R+L}@30v8zG8|fhJP;u-+7fkfK z;KI1dE^@)GJ$rX4@CFyGuzSMnH7-;k1NvGQ8g6cNA{{-w@XNj3E&OTHi_NROZPC5G z-4S+)3vTb(+v{An7oOAAxu-MAUgutF?!qIHPPB7(N7U)+=?O>hT#~j393y%|b1xL> zZEJ6XPmVCx=7xnczIRM!TXEz;c4&aO6LEnU%8 zw%LU3in1*(L?~nivR!*R+1BzX(VJTE2z01C(yp!u+vY)Oy>2gp=H70!wJuiYUg$w* z(AmxdG%7#R&9=MOq`}+K4YaX(7cQQGcA9rZSc3~CJ9Kn%Cu#45>35iyBA!b-%}ed= zy=`q_*62dp`l3!_XnW&M5)1*iI~rkcb}#RSulI_cD&mM(PmhjY<6;nSZ?~$)t{yl% z9JO-~TE|-!!h$EDO)0c%O|)=x%k}UG>0e|ijrmp+GkRmVt*b2p!H8ajz0JH#vV@#n zH#*@yJo5f__aZg4UI>j&i~KI)M0=clXp2o{P}+NY_Hd-;l1QQ-jo{h#2;1dih@R1C zNS;2LwYZp6r;q`PI9`m_k{GJjW^L|e-q^#Dj=k->Si1`ro>jl=M)V8RE<5{RsNL>$ z;=8*!+5v;qQI8$L2k6ZP*U}s%bIGfn=2cm=UKG8~ycm&1<<;xWtFmaLDB5LSR7K_0 zJ?>SZ(6+k9_C3u`O9!5HkFak4<+_F)p36P{%Xo8z=W^J+ysxgc9TBT_FYj1H)bDjV z5Lm;l>>Vy1IXzsbr3F1{n}aT`yLBJyb+0$?>w^djwTnm@M6+o`Elkf?Yp-z;7SZiw zpK*mGQElx8>x!@^T+a!&_3mMP1_BJ_9o^k%TqL?YZc`KMY-@pI-DDvMeO!!p8W=?1 zN8)A+!B67%ER5(4-X7y!?sYkYxS=!J;h++k<6dg+x}o{T2nM$pc{>89-JF`JELuE(7nj5wr88Oud~@fbQ^N7boWs26K?M8ZH8mAVfTs}k<+w8 zjIC4lMKP8`BcO2>AF;pNgCrGs2k&Coe)~#CCyHX!nRYKpt;xo0#03ja?&^^P(Fn`9 z*QizXwRG&>#j++4YKK_Pg^{u%Z1NY4+~Qu*eoY}2BQ1IlN#4CIXAcO8t(~H=V{C_M zQ?&Vd)OKNUMB*%vi!QRT3wI|r>Vj4Mze5`5fP0CD?MSqR9du!&eQ!%I8*@Qja1nM$ z&N*qCZp=A<5{O_0j$=3XVopSZHS;`7)|3-WiNZmRyD%xHc+Y`-)JDW?k)Q91+|V3m zVm`J;HXH_=I?=Y_3iqrQ>VCZ-M zamK*8tmdL~1LvJndG^I;Uw-!at4K6F)=+)PIxMnmV(ZquZCxc+hbpTAmDO*%Y|XmM zsyffV=CZ(BR=xSM)!6TkdJS~a#(%b|9;L3itl}-}-hA1)o#(&(HP^ld+cE0dZlG5Z z`r6L(EAVvhnsWn}SD(LbGO+HWcrf77i!ZIY2#bm5fKw-^oOJ=a0_E0TNW|8G7Kg68 z3}UUnjCG#B6=J>ed-*KT2U2*706Qj7?}5O-p8YCHXeAH_GMDnjVF%|G$e&YjH(lZX zu)3wz3M-#yfsGr7ZVZiHKQt72YuCn&6?i%;&wKNNrE_dBuxt>@Ca2vA>R!S!pZr=+#%z5xAH6|4IJ&1cu#UeSE^hVjbG z*)=oGXIFnq;JxzyKc@v+uGz|0;PcsRacdzT--7oBamUT^ zLqpj5vL(V=uDMy4yLn8!PG(y}UC8rJnNivxlP@|4wr%I{mk|YSb{VL0czf375!?be zxV`RX!IRM)hUQ4HZcDv#y#Ji${SPno@34~-@GtoY^KW*9?2t0iT%M0@_QiIRY^OS6@<>tfrxZF)aCVB zKqeQFun9QxW#l2s!@!wY1m~l`nOy|utH7CC1n0-V2`z&2B5^-H(%7$`ILLmgA%t@y&gMCUN&yEq*Ym~aHI68Sc^MiQ z90GLYR(Mv!A-ohq0__N*AK_F6F2J?7^KQtv& z##}-)8?6lV9{^zuzEwkA=Bcs<*+5uB zMKl*pSz{O=VGVlSs~P19LM0||l|EL&8cO#jZjA+M*{vMzr{z4MtnPW25Gnw6eh~l9 zA`y+>eYhxOCLBDd%Pujl)5)iRL%J_yL&Et2aL8MP4c8+_T+QDMK=WJ0mC8Vic@byI z&i5iO>?}Wn5jRo)8|VldqJ0^5=G_)Y{vq+gL<|Y^qI!1`Mf(>mduEZiu?h-J^7``g z%4?xskLx)&A&)IC8(bgLIMf1WwC<(li2!GQ5qZ+UnO;+h7hc39e`COzT!h!Xz?oVE z=W|2{qS|_mD^~0az?mwNOJ|9b&kwxJB4Fs9N z`W@NOj0yK^nsdOJl{jX*IIMC05jf$qOVtI%2l4w?;LI)Jhp&h6rb^QJ6Get?22SXl zQoN=#&Rc*pSyKwCh-+_jEba~3W+b0e8_$|$F95}O!#FkG0XL=EwF9IjH2+m&tr)d$K zere1f0o|I8SPv8-T+u zD@ErA8YcmqsggM44dPb-P6(lCF`pN8NW63El%UX(f2E`q>Ws9g{$`TX1xe7**Bs>I;Si?j>8N{)r!REo~L zrgIT+YA}wn{pX)G&K1C+xt@*lyvErHoXL_nzt%Xrfiqna=U+5Vl;l}NuPkuFz_I0d zQPa5-ICFKSa8OMC9t2Kk5nf*f&eZmjbT}2&rwIQcfBvKM8H;Ehg!FQ^uNt&q5$DI( zOI38D+SgN%K(wzX^fi@H?dvY!i1tNegDcc!ol^S>ZBx8jG+brW*ya+@k?o5=aa!=S zE@hv&9b`kYk1Fk^wtf07EHyiBLNT~L=-gomtjBDxRx$^HY5z#C@g?Ym*Ca{3=y7*v zAREgkJgTwp!#9Lp{<%X?%l|{*H0>0K)!$}Yke%NFoDLdU^c(sTcIHMI@mB*(uVS7OTf7bIP)cO+!qO5 z1Dwz`rRu_ciB1>sdP^ysCaq%(IMXF@c4?eLz?p>U?0DF!aqc2{-dYN$UE@3qoN!5; z4vljZICy1130~J}oF{-&(^LwlOXGYOI8!BYx;4%z;Dnk>(Ftpup8{vPBu=l!`3=$8 zRf-OD!B4ddQSapQ?U>ER#YOr5Wos95jMQ|Yic!;APQ_5Qomt&>j;KpIRc$As+YaGe zrLU_DwTmG7K_t+tMS*pyV)z}9LbMCCfe<*sB!)q za3;G;;RwBzj|m%6U3}|R^mYgD?`88bxk`-Jr^?t{^s?c38!iMBy_n~U#+^z@g` zr9KKAwn(&j6gab(0YMqmPU#5wByh$Tq4N(U&kd!t_>z|AdE)i1Qr_|vj>E^aL!+rC zY+$n^+t)Y_-h4za%web1NRK7bL);?s8bYU4Sd|RNO40ecmZt_dlO=Kfi^h39aAr&5 zd{g6G1)RB(IDesW8h|rj66ZS_rx`eGpp?wt(>T4rp|4cf_Tfg*BM0G8RHqve)&Hxw zDF3gl#ceQX(1~hIjcC(iMBQ)W$a{a(T0~Tz1kNS{Pet`$t@6Wht*;l6Xw+<1I3-$~ zywlgu?L&B5Qglyh)6T?sxMK=Z8qz=`IRjE(0~HL&j;GGn5J`F1qTFv$p0z0BCCxs{ zCoRf3i}KAD<&zd=GP^1B35)WWMY+$SJY!LQ0hMJ^e#D|YZc&a}luuZc=Pk;U7Uc4xix%a>7Ud3$@{~pSltnpVQJ%6Ww_21BTa;%l z%2A8*5sNb2^)TwaVbY>}(xTjCQJ%IaUu#jOv75oGe#W94vM8UhC^uS^$1TbyEXqNP z@{C2f-l9BaQJ%Ia*I1NKT9iW;<(x(Nh(#GMic=Po5oy+Y+*rGgTQGOo1gsclm z`IJSu)}q{RQ9f)@e%7KqXHni{QSP%SPg;~uS(Hy(l!F%Kutj;oqWq*qdETWgw>k8q zkE#%TirObrD_5U%zf)szZ?d?LS=?zJX4b_EE8@Q1;@)U+&sp4$Tij{kfjVULp3Bg^ z+TtFvxDQ+0AG5euuZVk<#l6(Bj@_aeu(#zF|e&Up&{( zeS^h4Y;nKa;vQTP_ZKYgH5T^{i~H>sclzGi^1bePi+i=jy~*N!tHqtZ^0s{L^A>kz zac{J^r!DS{E8_lhi~9?3Lcn!g5E8>32;y!C}ueP{vvbYbg zi2G9(_mdWPW^q5y;+|U(_gRbkjK%$hN?#k?QRQ-%`}x0&frMBi8jS5vdgr{@2g%<* zjPE9DI)laG(ae6VKDoT)m~C8XL7~g{v-<8*IR24LDI77UuG@fX5CAI-xDkf2f%hlp z-Sw`_64Kz2S?d1nGPQ`BQ6y zr?l>P3dG*x%N!IHy8G|v3VJ#Dfp2##O7L4yYKD6PN^!(L1SGgw)KaNcKF1NeiJKB~ zWr>%XBEf6*nAY;KzsF_r0QYD67!1YxQ4fygV=%byr&g8@;}VuQ;A16LpXACCjbw;I zWndHjW1-#iQ+A%ycFx3#d`G=|H%a+ee?s>7rF>qFd+AONSyb52!w6ZmAD~8AEMRSg z(EE)~Yk3aheR^@@F8*@l8Q1cdve225hgQ|ZJ#n&<`BV1!wU!4j&!!jcyXN6W>a2HN8U@ChC0GGO6Vnhqlim%wUXC`DU;Iuw_11l8UnqI z-&J1el}jw{8_UzHgv>G?Zi1MiFDRx91-ytEE!q2f46RbgQ@Sn)_iMnJC?^*iQI-MbkF4q3QlOlawiZtCl5J)!jCG2CqQTLezabU7S(ziH}9@Zr2V z@ZYC9r_*|qwjt-`lUd+2Ys)W)({8n?3UmeSc4_mn2s@hJFdkgVWRNZtrz7einJdRzf<%!eHB;(1*ms_5GEsv{@$_f8z zxoNUoUGREuX`WaVr}HM-?eBWZN#^rzT@ghL0gA(biux)Y zTWlM?fRYqi+~0EQw5$!)-rcK|?oIF@-*`jz1t)b(Sa_W9h>i)=FOxOhpXv+fp09|# zW5r?m(2d7LTKB=_^aT`!%%AF)%jz!c>t-zvf8yR5PNs87JR3|Dmm?4D4iMuOQx;A~ zj>lYiO2{nb8P)RS3dzw#7Hhux_e7~uNdi>Xv#iMY5P!= zpfR!gQxV`J+CF2&v0~}b;2hVKc)8_OZaI2QDjNo<*36%h=aX6H* zdVEmn)s!Pmm)b5$_`K|if*4U#>nv4YN}eaRJoF7V=U^URc2hm0_$nLv0xnPKc0n3` z47D@0S$I~-RS`)jtmsf7_BhpYnNqej@Q@epeR*;IPu21i%(Ym*T-F+L{6o(fis)D4 zGLbnI{c3?gHWzCtrK8{f)K)O z%WaK>wnhmblPd#F+8PVTmjA7-K?0vdy}LhE%QlWt)C3@t8e-ep%}RM{kjIl{f`RYhR7;}1Vipl)!z;B7#Y|H!25cc3%Ey*x!xFJq_V3|x?NpBI zc4~R(#dP{>s9YZPX;dLk=~!pWjO7uZAF6tvhE*2ph0Dq;W6NP3Tc~EupNcIfbZp_Z zZy>31$i>H1l5dKgzhm8> z(7IEEF@MVEpI(CQS)cCog=01Ll%FnU?7-snE^tWqFoeNy!t;B%+xwGR_l4X0=_Tm? zUQ>6k%QJC;HLE4)E^tWq$nRYDQ%lhO`6cN7VN>@(Z>$q1c$#tvx(giAy%oCuZe!iE zOVFLVeW(U`7LN0u@agWYc=h#fc5n$k&vDL-?(<8~o!+srnC?fk?$kivK*K=ew+4`K z8Qt+Q?G$~FTlZgjlp;!zHL5|;>>}(4Kse@4t{GP_`-GNY zpZ}rl!^g(4k;0Ip*1VtuJ5IWnv5(SS;E?V#XEf_fwUoJkukLcaclK&k7w3_P#!szP zR%`o|Xq9r^=GrCLht`e7+??3_C9Glo{tF;8OR$f?A^YHgMBhA4*=PRWYaiKmYP9YP zkE1%u=`QEF!7<^*?p}TB49VjG@%yUU&$jc3wU3eB_(!uz{lr}TX*4ARvg1W`Z4x49 zZU3SzzwkarmyX)U=;0-`2q`Vh2Fa^YSzhZ^3dgT$DIB?vu?p9?7G?G^x-zRBfF7Bp z?wb($7FrQfE$$5JRZnk`6?&CuO>!UO2_P(jv-2_K8-b17{@#CM~n zKWvy#@+e6CjM73ucARv*PI^nD@|I-*CCh z_C8joy{lN~dasIg9uJq^JFc`S6~|uYSoic2Vx23qigg~DrS88dqq~X;XHc*D6RN%z zj$;kus+JeV*%?*75xC43>D(Ej)@xbOW)8!62*C9CxnUNgcLP#it+ddw?omuaC64r# z3FR%z;{L3~{glPM#^U~j#eH%`+)rEF=Pd3UEbdQQ+z+pa`_C=zr!DS5i~HYM+^1H= zecs|eZ*i}+xIb@kKe8h3&s*GIu(*dT?q|EPPI}$+inzaEaVKXseZJA+UTbkbu_Ep- zTHLEG?oAf=T^9G56>(=OlBl-aP-AiLu()?w+)u8EdzHm~gT*~;ao=ZgpIs66YKwc& z;@)R*f0xDm)QY&Tx473@-1{x=gBJI>6>+Ceg@T(@+LA~n7RedcyYHH|EwY)IS&P$YU1cI=X`BNiCt=F=~ zHse;D4_kfQ1Qt9Yq}wWYdHHXD#kEE8;$3aqqXd zAGWyv$l|_XMcnVQxDQ+0r!4NLE$+b;ai?!~7*=h_S={Meiw4e)3TtFlyCUxQS=`4g z?(`)ylRLd(P(q~Ft&IC&i~G36{e;DRgT+0xBHbUfxKCKzXDsg5Slk;|#C^)*K5213 zX>q^K;@-3(?vGg94_n;nt;lA*@3Xjftcd#&i~E$to!%i}a!**?!z<$cn8p2w#eL4= z{sD`7--@_TTimBD?(`hJsr%h86Zhj5_Y)TPd5in~7We)Y>3+iEK4Woz!QwvUa+jlv z+fizv(S;gWxqYP?S$Xi#EXbXOygGpJWR z1|w3hh406mRJB}YWc7sdjlf28ScNl7uVsyGqKdMf!!{~;6r?_9d!5z4k120i7WY1j zdy~a|%;J8+}u`>0peBRYU`MgI{>GR`Ci!`9v_5Df<1=(?z<#m5m#`4PR zTsq3@JiMgWO`buoyK4zv=gO?S&Lgw*x@XJiuDtFH>Qz6i>T6+-Y6z)XUKnR*z4DDR zcS5yZ%ksKvMOk@N!v-afg4BnV77DV1-U2U2JJRz1T*mUs>s&g@>pZ-q*G-*4uftN) zqW!xov+_ER%u@GDV2XvtHp=VHpkDQTs=gNXsD_}b<%Mx}u2;TM=AM++Ygt}*3j5xS z(Q*Ur<~1PowMq-^b=SFGC%xr}@|I#algspKD{FDa~5}|>OyH+-)M19 zSlmyni2Jh^_iBrKlf^yla+f}TRT-aG?cJ?G)!sd|ENgH^X>kU|Hi;#)cUNZB-aRr) z-S?EyUA6Z!s8@Z5s;`CHazl-(<%Mx}o>sn5rkBxrEvv;nq9`j5Z((Wb`YUT1NiT@m-kEbem__YD^JYhCWr>)u($>r{(#ZKztD z$IjA*b4rUd(Bi^NXmPI0s>OL^mb&N4=&oAa8PuyjsOoFs*3>}HTX7#-7-#3S@{Pdd zu$1|;^jenBk15KkH8spAc@(7n1$cnb3U+L;yzURmSYCOZOGkN~hnMua`7`Ks_}rhg zJU!ct#SYI;`k1Y|*FMtg=&MbOjqA>!UiEAVUUyQ}av86CkMfPc8$Fg0S><(FuVr~% zSW#9!)-bK)QIPu6meLM-(3M%m zI*-iK>%Lq@cU3!QP_KG=u0-gy@M_@+Rm)|(E~#kOmm5(({DR~s6 z{*=-}L3XURyzbj&EU&!IrK7yg!%KQy%^CDMig1g0oh!5QI*-iK>;9&U?#k=VpkDQJ zs=gNXsD>k|mKVm^8B)Fx2-;pJb#H}Zi#YE-;TQK{{}?p%Gnjg1dwJHNwnLG~{aMdI zmD0lRQMz5wcol!NuRuO=(68QQp*(!&2Bo`#G)yXsDM-ai6fb@3Xk~t%&>c7WWQ|`?$rOz9ua#CSzUy zinz~P+?y=!V;1)v7Wd&5asRo+z0u;Hv$$`vxaU^H{j|kBWN{z1xNoqykFALNvljPS zi+jJtonEeH*8BL1xYOII%oZ24xc6DyPoq1QrQ{f(SC0V}eqPw6qsD$7UebFfl@{RX z|EcGNb>CeI$KRWm!jaDl6Me2lnHh&Gvl{z(WR|-3m(g8~{m!6X^|PwJN{xu*^Mi*~ zEia6-^Agn;1n9kF=1;xhioT*K#(wcbL-fM2&3MUIGDAzn{5KC8v%gPcw_xd6NeHJ3_kV`*vNE6o z2Zr+Tk{(rewW=>QhHO~EmksMTs2bFz=D@;e%R7hhiUt9}Hz4Bl4G8rfdm8&Pb}l4T zUlOcfxzS>LIF@H(2YV3X<3ceX&tc`MkMAlc2>mvq)M=0<$^t_7SNo-=0ulj)?n=W% z5@!gIBRF+S6#x-mL{*gE2Z-`ILFbPFIc$`A9FQ5QyTF+Ngno1;Ab$nOm?6)P0O>bM z{SuH#lyD`a=T2s}i24$A)?)AT6mVRb-wepCL8l#%kc?WQ)BqqSWnBo!C?IM)R>AVg zINpPV?>5ARM^vzQHj}|?Kv|Q9(DmC<>Sp)`(GYY#0?3Sf7m9!!1LOrmo+kjA(-w0^ z_9s$#l#=U*qSRjkNA0r`kRK6cqfUPT$kbM^HU13{`jIDBu+Gt3PcE5Z;tRh)DItBS zvc|CCn*b4eCJ6_An5M6jsBc>c?$-fFeDPD!q3;ii@53sH1Bm+Wq$u@nK-5@EKn?<8 z`r(HG$!Uu@aq)JQ8g30m`3P`^jrux4bYS_HUSd+OSwI;4!-f0|kf33o-vXkZxfb$V zeLg(Fu<9;A=;wM}A0R3Mh*E=q)Ee^K!b=4`+&>Hms@((m93ZAuzY0iD`v$i>;;P;LTb(y)9K zknsW0I|#}NK-Bjy1mpl9{kmP;Qpo0u;1@I^(rv(L1=O|b#{ro$+RkSIaqTlWlq?od zLOi9VJmJg05l_r1$X^1Y-af>Az9pS4B*k}c70z?Op`WnNNOFY7OtE*4a0asYEEFN& z_0g_`^C+dpnL<-`0p8zhSnPFxs1+E2(*=n7zMg>G3<&kYZj8zj#PGWJ0y3prCE`4( z&cw4qN{hRJqrRsgC?BU%wO*P35|E(gRX9{ACPz>^MxFj0aQZdQNGy%-O2F$hjzce` z-Vt_$M+D?rALQX4KpDZ}!0 zfXo;&?*@d_bnCqrka>f00+4aT&W8Y*H8i~wkP`;wDL|TZsX{isKUoCj0o7ZP%wHrN zq@sx@ReO3Z84~V#{7?e2w2FSD#H!j=&I)RR?(M&h19H-Ud>4>D9U-9#`!OJm2ISX((1@C-3d(C=0|^a_T@1*SQK}Y@ z#xbwO8mQDE1u3X8vW{%T{W{>xYx~3oM63(*Qp$$=fzzaMsMN;+Q6okn;b#DGHAO4U zQG=ht0f&)Vdt6wxH9YfG^h$AKRPY8siiW0d0YvS3#Yj)a!y{S?;+_Uh zpP}g?KxPds?gM1zO0Pfv2_Q$fk15~yG9Yff6XlbDgbm7n3&<1r8_4QsM z;fH|}G+N5X0a4%O6gbBKnKb12E+AddLil_nolNF%rdFgysafDmYdbsQ(`QNbg))Kj zW8kRowhPG50a2?E0`eO`)YHlWvifzfyx|EK0%BTY6Cl+_?Q8=?y~j+@=?CNm1E&bc zyy3kQfY1oTt*_&RV{ktS2>o1~X8<`e;BAAy0z};h;bZj_%^9bRnE4WLrVM$`#<->l zl-<}81SDs0Zv?~~*L46gXSB)`l``Zx0Lb(?UYQ>SWZdw>ZvrxDw1OuAVY*I{Xa4|* zT2&KPU4>U7b=4}F3#p+@ER8m3w8|Rbj2o1LfNapEi1JQACJg&@0y1aVCkn{0q1U?r znK4?*en4mdDQXAv?o50n$8rYu_X5ZCpSu77iY!I){5c>w)ESJA*2L+c(-|}9e4FSP zmVXwI6NWs$1mtOh@})u8*|2;aATWl9dkm0SgYxZwgft|bLSK|Y+cDbm{lHPr!id`W z9w5Vp4W9x;?X(m)KL%t{*Rr#JU^s=o-~`uHMK*RB<5_psc0M3sqwQ=5WCP44EDwBk zJwbF`5agYJ)EJQcfYch^awi~RZFws72q4qis)JdYEyF%WT^u7E?HdkeCGlY(X*!rq z;7cu_Y?S&MN}U9nEAweUrVI)H6_7pyvUa0buX3$%DIjnY`r`*)gn=o~<)CWFqMfCLT5VL&z*zVRtQnBjHD0qFox za3{(q0qNIv=JQ*Ee|NCXzjv` zW9I`WWO%|xK*kKpTL76cw73qCIRo-8K+M+tK0wrcG#-uP#NCWG_W`F?>rOKNDIks7 ze+cpoKtgd96A1EsKspS_4*{W}jO!b}0K^~H@EI|gmecTrS zQFp0?C(IBXqXz#PkbWIo$TH6WGG@^EB_O8^O{*@4M;VX{0a3ff1h4A>2^;l31jx8y zpD{p~A-Y!t*(}ssX1)L^>*Bl@i(o$z6TgpEY z9mA@>0YvRb5_(MJldK1b=LzAGIvB-{a< zMs35vgL%B<8or@${AX812S%S-R}W1yIOH4nG1l>&uwuZHXy@A zdY3w40%{sYlQsAta1O8W(s>k+8AH>r0Mc*R@V^rTeUD3L4v-o{_g@1tp*1DRDseru z#>?wmK$@z(kk*rPV{v^=-wa6L(wvBjbNH`B1 z^|Y7JEBGeZ2i_n&a~saKB$5N8LryFo%M2w8>NJ%Z%&L5BU?877pw7~%Oj6|s^RW?q z0+&&6!g1)_am2@-Qkes>bSe=Bmyu*KneT{Y66qveFOI}g87#dN~(n=waumzz|HBesV;;^+|$KEBA+cfgV}r> zrt}M{%qI{b^-}N(quGV%eDuRq1oNvgV0xS`(=7~=1M>MTZuGvBU*2 z{1S>K;`nefzTY{R%HS4taWpT5L9>mIrqR%0bd)c|v-u?MSdZjl`6OpkU`a%sQNqY& zJtw6^NF)c78K@J_CI?}KR1&g4|4cHL2l;FUkuib56)!sY1aLA|WJAeJGEb!O9jOFu zUQs-SIR#b$Ul#EgG@XqloFPO&u*nRjhWy%+J!wp41uOzO>C^~T5_~?INfr-g^ZTJ7 zZa*$?jY?-ni>yE{;$_djw(1nK4z!PrrV$B+Scz1DYRid_=JPOw0*k8-_Zp{=x|OU= zYFIuX!9o>zA_Y}NM5rAh>i9Pba~5H%VsZ#BlFHytAVW369MWsNAg!`+C~;|+cPI*- zoP^~^GfphU74}<(`wBV-=%TWc~nL zmhK#>%c#>r0UZr(DM?cAtz=bjco_VG_LitiqO}Rb$V<}VX5^Oo7z`YmoRfsm4Nn}y0w~V5TF(8E;rY7)Zxg^TzdN4VoQ7z*pM zGUWIwT%gn$D5^nmvrEd-!E*U*98&ukA=n|lpebM&=C)f{oA2$Dj>Ip(#98!cZfqIM zXGa8@VoSY|Xl4o`BELElVu_Ad!Gr)zox*L3aN&X=L*9V6hzh|RAs3VVfNZ#`2&XC< zi~{jC!>CD+i|ckVFj_>2b>ahlD+o6w@A4U0MJ5>@K+%sO#u3^hV!TTu7D8%rT-p6e z&n6nuuE_(4O9eP@2Hqo@cp@J=C=2kc>JtbIb&}~M#WEQhlpEsaWmXPuoCL<91&nuH z2#rjwdUu?bXiu-x)ftImWssU+3Ipd`(G*Zr4qAzn=ai8A+N;eB7+$I;wNzA3$?x+DQT5Mj%TYSH(9L%au1VI04T`=*$YsXS&Vh>5XcOia2ES|D1hCwhtkkz}z29eg&OYzgDWqi3ceRv1Jt z;0z}*HrL|Bav04OXv*Qx$DvVU2WaS#-sWs`Lb%%@WfAK_;IKC%x{gGfS|eyrr6IRO zgwjCT&8NA{5XhLEsU;6{((kSg2(A<=uyxI24ly3yqK;@PE7Z=@uG^Lvt`;aq72JmX5<()rr3lfW zD^@5XUh}?-Y+B&qN(!K5gHPM50fG=wMsJuM0%6(}M4Q6VuP5^ec&T`SI{-~foa`WJ zg()MgPGEtDIvt^$8i(@flE?jg^)2RGva$__gf)Gth|0n|0aF79Q$|R}gg2!yUgl@q zary3QhtHc_0ci$?(K8o)B=+ts234a2V*jFpVNZejX71PIh1j92DoYro6~m5VvITv2 z3QnQJx@afm>q}d-3j?tTT7@=|IRe?2!m3;>{f^OO{*c$@$iogWIWy#w-2{&{NveN% zcyqCsPhng~&6YPItluc%VZ(@A?JG4{7NQwpPEio|OJPJFhxyu5#yKFrSgz_=me)bg z^>V2I^@4o6tX9aRC%+23uzO&Bf__2;1L+^OXHdA3tzj1eFNG@tq5H|uPFyXo8nI|V z*#N8hU~7?4P?uX7#0hc7bSIzna1-9a_nUhs8PRkBj*T(HXp(tChU4JDC0%pMv@Py( zkqQ9flDN$y^6IgTvK@vP6H<+Iqeno{Og6(zsud$B)54H!#EQGGwnTR-jcYVcZBWn3 zpCsartTDhqP&%mk6dJ~ZR{0Pte7r@C*#u3#1g}`S>t1C7nx`QM68^SRVw!_Sgki3p z*DUO$3`yj40Dl6$q&(uVRcJ&@U&4d3Ob=X!vACx`K{$szsPBK<>%%hMvymsA@K4 z2e`(7NB2x>v_vsSjlX3R>7u)Uq8j9bCFQ3DeqCfAOO%BdgIL&G!e?&ZnyUeHI=ocj67yOSw38h4E)I&`lU;F5e33RcGK zur8hdKs=ttFca&i()oo4#-(%V_G$K;ZqI=_L+2nTK%NTrjk{@aQ;vR>zOwZw4&*RK z_lGd2?o6tX;hVo;T)JPnYU$8Mvmo>k$uVHXXrP_S4mg9O8R`Ulv{Xw_>f_wg1@TSd zq$=(g^xY_V%BPWp8%bA?j$o|y`RdST88NtaJI79Tfm^O1}z^g+;IJo&!`x&O5*KkiL8IjPhFL2POceM z1-dc5)GZiM=kh69ae{DDW>LnwOym#G6q!9^VUkrmqoHIewZx^ad8brZjcV&^zR~I2 z6YjyYg{_^vZM3+5qgJ!bkd+1_#&S0Fk;_xP|)Z|c*sHn6}k$y;}2we?}UnSG#H{Sw&Kh?0~HYYAQid2oW)urd7qV3HSkFz z-MU3tvYa_nyoda>j5kWnnijH9?WCt~f93o}`9e7?Y!O>S7jf646DY z&|cc}q2%<|DYPFue;$4ZP%P9Csz&(UCfsX({a#o;yI(BgC?CPs^_EoRO?<&qx)b))N;Z zXpFrSJ)g>OWByc(5?2mLq+?k_3K3{iv=Pggu+be{tf&sAW4O(#o0c?%bRMyeq!^W6 zJ;S=_{z7p-)~`_|zVVA33&HzL_eUty>`A3B61UCjvcm;|nfQifewwl(2#{ zZ(yoE)o4n_5IgQdYdMxuR6OhDUZ3Y-NIW~Q%zGOMx~c<6}eI+q<#yCTQ;8ihfk=_ zr7cE?XM_yS#+q+RtaPjP!D|Bo@^^s7eN#iVT3tsn$l*srjB|V gEPEGyKM7Ra0gmEpb~_8TbKm${Ya)iNdN}a^0lyx3@&Et; diff --git a/include/config.h b/include/config.h index 28af3ca..c3f52e9 100644 --- a/include/config.h +++ b/include/config.h @@ -118,8 +118,8 @@ //---------- GUI界面参数 ----------// // 窗口和棋盘配置 -#define WINDOW_WIDTH 800 -#define WINDOW_HEIGHT 600 +#define WINDOW_WIDTH 1000 +#define WINDOW_HEIGHT 800 #define BOARD_OFFSET_X 50 #define BOARD_OFFSET_Y 50 #define CELL_SIZE 30 diff --git a/include/globals.h b/include/globals.h index e7d52cf..4a389ed 100644 --- a/include/globals.h +++ b/include/globals.h @@ -27,6 +27,7 @@ extern int network_timeout; // 网络超时时间 // ==================== AI相关变量 ==================== extern double defense_coefficient; // 防守系数 +extern int ai_difficulty; // AI难度 (1-5) // ==================== 网络相关变量 ==================== extern NetworkGameState network_state; // 网络游戏状态 diff --git a/include/gui.h b/include/gui.h index 2eb9d68..81a3507 100644 --- a/include/gui.h +++ b/include/gui.h @@ -66,4 +66,19 @@ int screen_to_board(int screen_x, int screen_y, int *board_x, int *board_y); */ void show_message(const char *message); +/** + * @brief 启动玩家对战模式 + */ +void start_pvp_game_gui(); + +/** + * @brief 启动人机对战模式 + */ +void start_pve_game_gui(); + +/** + * @brief 启动复盘模式 + */ +void start_replay_gui(); + #endif // GUI_H \ No newline at end of file diff --git a/include/gui_menu.h b/include/gui_menu.h new file mode 100644 index 0000000..833ed90 --- /dev/null +++ b/include/gui_menu.h @@ -0,0 +1,19 @@ +#ifndef GUI_MENU_H +#define GUI_MENU_H + +/** + * @brief 创建并显示主菜单 + */ +void create_main_menu(); + +/** + * @brief 显示主菜单 + */ +void show_main_menu(); + +/** + * @brief 隐藏主菜单 + */ +void hide_main_menu(); + +#endif // GUI_MENU_H diff --git a/src/config.c b/src/config.c index f95f8d9..1c0ee95 100644 --- a/src/config.c +++ b/src/config.c @@ -73,8 +73,8 @@ void load_game_config() int difficulty = atoi(line + 14); if (difficulty >= 1 && difficulty <= 5) { - // 根据难度设置AI搜索深度 - // 这里可以添加AI难度相关的配置 + ai_difficulty = difficulty; + defense_coefficient = DEFAULT_DEFENSE_COEFFICIENT + (ai_difficulty - 1) * 0.1; } } } @@ -109,6 +109,9 @@ void save_game_config() fprintf(file, "\n# 网络超时时间 (毫秒)\n"); fprintf(file, "NETWORK_TIMEOUT=%d\n", network_timeout); + fprintf(file, "\n# AI难度 (1-5)\n"); + fprintf(file, "AI_DIFFICULTY=%d\n", ai_difficulty); + fclose(file); printf("配置保存完成\n"); } @@ -124,6 +127,8 @@ void reset_to_default_config() time_limit = DEFAULT_TIME_LIMIT; network_port = DEFAULT_NETWORK_PORT; network_timeout = NETWORK_TIMEOUT_MS; + ai_difficulty = 3; // 默认AI难度 + defense_coefficient = DEFAULT_DEFENSE_COEFFICIENT + (ai_difficulty - 1) * 0.1; printf("已重置为默认配置\n"); } diff --git a/src/globals.c b/src/globals.c index 56daa14..b4d495f 100644 --- a/src/globals.c +++ b/src/globals.c @@ -24,6 +24,7 @@ int network_timeout = NETWORK_TIMEOUT_MS; // 网络超时时间 // ==================== AI相关变量定义 ==================== double defense_coefficient = DEFAULT_DEFENSE_COEFFICIENT; // 防守系数 +int ai_difficulty = 3; // AI难度 (1-5) // ==================== 网络相关变量定义 ==================== NetworkGameState network_state = {0}; // 网络游戏状态 diff --git a/src/gui.c b/src/gui.c index 022ea6f..f844253 100644 --- a/src/gui.c +++ b/src/gui.c @@ -13,13 +13,26 @@ #include "globals.h" #include "init_board.h" #include "gobang.h" +#include "gui_menu.h" +#include "ai.h" +#include "record.h" #include #include #include static Ihandle *dlg = NULL; -static Ihandle *canvas = NULL; +static Ihandle *board_canvas = NULL; // 重命名为 board_canvas +static Ihandle *lbl_player = NULL; +static Ihandle *lbl_status = NULL; static int gui_loop_running = 0; +static int gui_game_mode = 0; // 0: PvP, 1: PvE, 2: Replay +static int replay_total_steps = 0; // For Replay Mode + +// 回调函数 +static int action_cb(Ihandle *ih); +static int button_cb(Ihandle *ih, int button, int pressed, int x, int y, char *status); +static int k_any_cb(Ihandle *ih, int c); +void create_game_window(); // 移除前向声明 // 辅助函数:设置绘图颜色 static void set_draw_color(Ihandle *ih, unsigned char r, unsigned char g, unsigned char b) @@ -88,14 +101,14 @@ static void draw_stones_iup(Ihandle *ih) int cy = BOARD_OFFSET_Y + i * CELL_SIZE; // i是y坐标(行) if (board[i][j] == PLAYER) - { + { // 黑子 set_draw_color(ih, 0, 0, 0); IupSetAttribute(ih, "DRAWSTYLE", "FILL"); IupDrawArc(ih, cx - STONE_RADIUS, cy - STONE_RADIUS, cx + STONE_RADIUS, cy + STONE_RADIUS, 0.0, 360.0); } else - { + { // 白子 set_draw_color(ih, 255, 255, 255); IupSetAttribute(ih, "DRAWSTYLE", "FILL"); @@ -108,64 +121,23 @@ static void draw_stones_iup(Ihandle *ih) } } } -} -// 绘制UI元素 -static void draw_ui_iup(Ihandle *ih) -{ - int infoX = BOARD_OFFSET_X + BOARD_SIZE * CELL_SIZE + 20; - int infoY = BOARD_OFFSET_Y; - int infoW = 220; - int infoH = 120; - - // 背景 - set_draw_color(ih, 200, 200, 200); // Light Gray - IupSetAttribute(ih, "DRAWSTYLE", "FILL"); - IupDrawRectangle(ih, infoX, infoY, infoX + infoW, infoY + infoH); - - // 边框 - set_draw_color(ih, 0, 0, 0); - IupSetAttribute(ih, "DRAWSTYLE", "STROKE"); - IupDrawRectangle(ih, infoX, infoY, infoX + infoW, infoY + infoH); - - // 文本 - // 注意:IUP使用系统字体,不支持直接加载TTF文件像Raylib那样方便 - // 我们可以尝试设置字体属性 - IupSetAttribute(ih, "DRAWFONT", "SimHei, 14"); - - IupDrawText(ih, "当前玩家:", -1, infoX + 20, infoY + 20, -1, -1); - - int indicatorX = infoX + 30; - int indicatorY = infoY + 30; - - if (!game_over) - { - if (current_player_gui == PLAYER) - { - IupDrawText(ih, "黑子", -1, indicatorX + 20, indicatorY + 10, -1, -1); - set_draw_color(ih, 0, 0, 0); - IupSetAttribute(ih, "DRAWSTYLE", "FILL"); - IupDrawArc(ih, indicatorX, indicatorY + 20 - 5, indicatorX + 10, indicatorY + 20 + 5, 0, 360); - } - else - { - IupDrawText(ih, "白子", -1, indicatorX + 20, indicatorY + 10, -1, -1); - set_draw_color(ih, 255, 255, 255); - IupSetAttribute(ih, "DRAWSTYLE", "FILL"); - IupDrawArc(ih, indicatorX, indicatorY + 20 - 5, indicatorX + 10, indicatorY + 20 + 5, 0, 360); - set_draw_color(ih, 0, 0, 0); - IupSetAttribute(ih, "DRAWSTYLE", "STROKE"); - IupDrawArc(ih, indicatorX, indicatorY + 20 - 5, indicatorX + 10, indicatorY + 20 + 5, 0, 360); - } - } - else + // 标记最后落子位置 (红色小点) + if (step_count > 0) { + // 绘制最后一步的标记 + // 最后一步的坐标是 steps[step_count-1] + // 所以 step_count-1 是最后一步的索引 + // 所以 steps[step_count-1] 是最后一步 + + Step last = steps[step_count - 1]; + int cx = BOARD_OFFSET_X + last.y * CELL_SIZE; + int cy = BOARD_OFFSET_Y + last.x * CELL_SIZE; + set_draw_color(ih, 255, 0, 0); - IupDrawText(ih, "游戏结束", -1, indicatorX, indicatorY + 10, -1, -1); + IupSetAttribute(ih, "DRAWSTYLE", "FILL"); + IupDrawRectangle(ih, cx - 3, cy - 3, cx + 3, cy + 3); } - - set_draw_color(ih, 0, 0, 0); - IupDrawText(ih, status_message, -1, infoX + 10, infoY + 60, -1, -1); } // 屏幕坐标转棋盘坐标 @@ -181,6 +153,32 @@ int screen_to_board(int screen_x, int screen_y, int *board_x, int *board_y) *board_y >= 0 && *board_y < BOARD_SIZE); } +// 更新UI标签状态 +static void update_ui_labels() +{ + if (lbl_player) + { + if (gui_game_mode == 2) // Replay + { + char buffer[64]; + sprintf(buffer, "进度: %d / %d", step_count, replay_total_steps); + IupSetAttribute(lbl_player, "TITLE", buffer); + } + else + { + if (current_player_gui == PLAYER) + IupSetAttribute(lbl_player, "TITLE", "当前玩家: 黑子 (玩家)"); + else + IupSetAttribute(lbl_player, "TITLE", "当前玩家: 白子 (AI/玩家2)"); + } + } + + if (lbl_status) + { + IupSetAttribute(lbl_status, "TITLE", status_message); + } +} + // ACTION 回调:负责重绘 static int action_cb(Ihandle *ih) { @@ -189,21 +187,144 @@ static int action_cb(Ihandle *ih) int w, h; IupGetIntInt(ih, "DRAWSIZE", &w, &h); - set_draw_color(ih, 245, 245, 245); // Background (Raylib RAYWHITE approx) + set_draw_color(ih, 240, 217, 181); // 棋盘背景色 (木纹色近似) IupSetAttribute(ih, "DRAWSTYLE", "FILL"); IupDrawRectangle(ih, 0, 0, w, h); draw_board_iup(ih); draw_stones_iup(ih); - draw_ui_iup(ih); IupDrawEnd(ih); return IUP_DEFAULT; } +// 悔棋按钮回调 +static int btn_undo_cb(Ihandle *ih) +{ + (void)ih; + if (game_over) + return IUP_DEFAULT; + + int steps_to_undo = 1; + if (gui_game_mode == 1) // PvE + { + steps_to_undo = 2; // 悔棋两步(玩家+AI) + } + + if (step_count >= steps_to_undo) + { + return_move(steps_to_undo); + + // 更新当前玩家 + if (step_count % 2 == 0) + current_player_gui = PLAYER; + else + current_player_gui = AI; // or PLAYER2 + + sprintf(status_message, "已悔棋"); + update_ui_labels(); + IupUpdate(board_canvas); + } + else + { + sprintf(status_message, "无法悔棋"); + update_ui_labels(); + } + return IUP_DEFAULT; +} + +// 保存按钮回调 +static int btn_save_cb(Ihandle *ih) +{ + (void)ih; + + Ihandle *file_dlg = IupFileDlg(); + IupSetAttribute(file_dlg, "DIALOGTYPE", "SAVE"); + IupSetAttribute(file_dlg, "TITLE", "保存游戏记录"); + IupSetAttribute(file_dlg, "FILTER", "*.csv"); + IupSetAttribute(file_dlg, "FILTERINFO", "CSV Files"); + + IupPopup(file_dlg, IUP_CENTER, IUP_CENTER); + + if (IupGetInt(file_dlg, "STATUS") != -1) + { + char *filename = IupGetAttribute(file_dlg, "VALUE"); + + char *base_name = strrchr(filename, '\\'); + if (!base_name) + base_name = strrchr(filename, '/'); + if (base_name) + base_name++; + else + base_name = filename; + + int mode = (gui_game_mode == 0) ? GAME_MODE_PVP : GAME_MODE_AI; + if (save_game_to_file(base_name, mode) == 0) + { + sprintf(status_message, "保存成功: %s", base_name); + } + else + { + sprintf(status_message, "保存失败"); + } + update_ui_labels(); + } + + IupDestroy(file_dlg); + return IUP_DEFAULT; +} + +// Replay Prev Callback +static int btn_replay_prev_cb(Ihandle *ih) +{ + (void)ih; + if (step_count > 0) + { + step_count--; + Step s = steps[step_count]; + board[s.x][s.y] = EMPTY; + sprintf(status_message, "回退一步"); + update_ui_labels(); + IupUpdate(board_canvas); + } + return IUP_DEFAULT; +} + +// Replay Next Callback +static int btn_replay_next_cb(Ihandle *ih) +{ + (void)ih; + if (step_count < replay_total_steps) + { + Step s = steps[step_count]; + board[s.x][s.y] = s.player; + step_count++; + sprintf(status_message, "前进一步"); + update_ui_labels(); + IupUpdate(board_canvas); + } + return IUP_DEFAULT; +} + +// 返回菜单回调 +static int btn_back_cb(Ihandle *ih) +{ + (void)ih; + if (dlg) + { + IupHide(dlg); + show_main_menu(); + } + return IUP_DEFAULT; +} + // 鼠标点击回调 static int button_cb(Ihandle *ih, int button, int pressed, int x, int y, char *status) { + (void)status; // Unused + if (gui_game_mode == 2) + return IUP_DEFAULT; // Replay mode: disable clicks + if (button == IUP_BUTTON1 && pressed) { // 左键按下 if (game_over) @@ -224,32 +345,57 @@ static int button_cb(Ihandle *ih, int button, int pressed, int x, int y, char *s if (current_player_gui == PLAYER) { sprintf(status_message, "黑子获胜!"); + IupMessage("游戏结束", "黑子获胜!"); } else { sprintf(status_message, "白子获胜!"); + IupMessage("游戏结束", "白子获胜!"); } } else { - // 切换玩家 - current_player_gui = (current_player_gui == PLAYER) ? AI : PLAYER; - if (current_player_gui == PLAYER) + if (gui_game_mode == 0) // PvP { - sprintf(status_message, "轮到黑子"); + current_player_gui = (current_player_gui == PLAYER) ? AI : PLAYER; // AI here means Player 2 + if (current_player_gui == PLAYER) + sprintf(status_message, "轮到黑子"); + else + sprintf(status_message, "轮到白子"); } - else + else // PvE { - sprintf(status_message, "轮到白子"); + current_player_gui = AI; + sprintf(status_message, "AI思考中..."); + update_ui_labels(); + IupUpdate(ih); // 立即更新显示 + IupFlush(); // 强制刷新事件队列 + + // AI 回合 + ai_move(ai_difficulty); + + Step last_step = steps[step_count - 1]; + if (check_win(last_step.x, last_step.y, AI)) + { + game_over = 1; + sprintf(status_message, "AI获胜!"); + IupMessage("游戏结束", "AI获胜!"); + } + else + { + current_player_gui = PLAYER; + sprintf(status_message, "轮到玩家"); + } } } + update_ui_labels(); IupUpdate(ih); // 请求重绘 } } else { sprintf(status_message, "无效位置!"); - IupUpdate(ih); + update_ui_labels(); } } } @@ -259,14 +405,204 @@ static int button_cb(Ihandle *ih, int button, int pressed, int x, int y, char *s // 键盘回调 static int k_any_cb(Ihandle *ih, int c) { + (void)ih; if (c == K_ESC) { - gui_loop_running = 0; - return IUP_CLOSE; + if (dlg && IupGetInt(dlg, "VISIBLE")) + { + IupHide(dlg); + show_main_menu(); + return IUP_DEFAULT; + } } return IUP_DEFAULT; } +// 创建游戏窗口 +void create_game_window() +{ + if (dlg) + { + IupDestroy(dlg); // 销毁旧窗口 + dlg = NULL; + } + + // 创建Canvas (Board) + board_canvas = IupCanvas(NULL); + IupSetAttribute(board_canvas, "ACTION", "action_cb"); + IupSetCallback(board_canvas, "ACTION", (Icallback)action_cb); + IupSetCallback(board_canvas, "BUTTON_CB", (Icallback)button_cb); + IupSetCallback(board_canvas, "K_ANY", (Icallback)k_any_cb); + + // + int board_pixel_size = BOARD_SIZE * CELL_SIZE + BOARD_OFFSET_X * 2; + char size[32]; + sprintf(size, "%dx%d", board_pixel_size, board_pixel_size); + IupSetAttribute(board_canvas, "RASTERSIZE", size); + IupSetAttribute(board_canvas, "EXPAND", "NO"); + + // 创建标签 (玩家信息和游戏状态) + lbl_player = IupLabel("当前玩家: 黑子"); + IupSetAttribute(lbl_player, "FONT", "SimHei, 14"); + + lbl_status = IupLabel("准备开始"); + IupSetAttribute(lbl_status, "FONT", "SimHei, 12"); + + Ihandle *vbox_controls; + + if (gui_game_mode == 2) // Replay + { + Ihandle *btn_prev = IupButton("上一步 (Prev)", NULL); + IupSetCallback(btn_prev, "ACTION", (Icallback)btn_replay_prev_cb); + IupSetAttribute(btn_prev, "SIZE", "100x30"); + + Ihandle *btn_next = IupButton("下一步 (Next)", NULL); + IupSetCallback(btn_next, "ACTION", (Icallback)btn_replay_next_cb); + IupSetAttribute(btn_next, "SIZE", "100x30"); + + Ihandle *btn_back = IupButton("返回菜单", NULL); + IupSetCallback(btn_back, "ACTION", (Icallback)btn_back_cb); + IupSetAttribute(btn_back, "SIZE", "100x30"); + + vbox_controls = IupVbox( + lbl_player, + lbl_status, + IupLabel(NULL), // Spacer + btn_prev, + btn_next, + IupLabel(NULL), // Spacer + btn_back, + NULL); + } + else // Game Mode + { + Ihandle *btn_undo = IupButton("悔棋 (Undo)", NULL); + IupSetCallback(btn_undo, "ACTION", (Icallback)btn_undo_cb); + IupSetAttribute(btn_undo, "SIZE", "100x30"); + + Ihandle *btn_save = IupButton("保存 (Save)", NULL); + IupSetCallback(btn_save, "ACTION", (Icallback)btn_save_cb); + IupSetAttribute(btn_save, "SIZE", "100x30"); + + Ihandle *btn_back = IupButton("返回菜单", NULL); + IupSetCallback(btn_back, "ACTION", (Icallback)btn_back_cb); + IupSetAttribute(btn_back, "SIZE", "100x30"); + + vbox_controls = IupVbox( + lbl_player, + lbl_status, + IupLabel(NULL), // Spacer + btn_undo, + btn_save, + IupLabel(NULL), // Spacer + btn_back, + NULL); + } + + IupSetAttribute(vbox_controls, "GAP", "15"); + IupSetAttribute(vbox_controls, "MARGIN", "10x10"); + IupSetAttribute(vbox_controls, "ALIGNMENT", "ACENTER"); + + Ihandle *hbox_main = IupHbox(board_canvas, vbox_controls, NULL); + IupSetAttribute(hbox_main, "MARGIN", "10x10"); + IupSetAttribute(hbox_main, "GAP", "10"); + + // 创建Dialog + dlg = IupDialog(hbox_main); + IupSetAttribute(dlg, "TITLE", "五子棋 - IUP版本"); + IupSetAttribute(dlg, "RESIZE", "NO"); + + IupMap(dlg); +} + +void start_pvp_game_gui() +{ + gui_game_mode = 0; + empty_board(); + current_player_gui = PLAYER; + game_over = 0; + + create_game_window(); + + IupShowXY(dlg, IUP_CENTER, IUP_CENTER); + sprintf(status_message, "玩家对战模式 - 黑方先行"); + update_ui_labels(); + if (board_canvas) + IupUpdate(board_canvas); +} + +void start_pve_game_gui() +{ + gui_game_mode = 1; + // ai_difficulty is global + empty_board(); + current_player_gui = PLAYER; + game_over = 0; + + create_game_window(); + + IupShowXY(dlg, IUP_CENTER, IUP_CENTER); + sprintf(status_message, "人机对战模式 - 玩家执黑先行"); + update_ui_labels(); + if (board_canvas) + IupUpdate(board_canvas); +} + +void start_replay_gui() +{ + // Open file dialog + Ihandle *file_dlg = IupFileDlg(); + IupSetAttribute(file_dlg, "DIALOGTYPE", "OPEN"); + IupSetAttribute(file_dlg, "TITLE", "选择复盘文件"); + IupSetAttribute(file_dlg, "FILTER", "*.csv"); + IupSetAttribute(file_dlg, "FILTERINFO", "CSV Files"); + + IupPopup(file_dlg, IUP_CENTER, IUP_CENTER); + + if (IupGetInt(file_dlg, "STATUS") != -1) + { + char *filename = IupGetAttribute(file_dlg, "VALUE"); + + char *base_name = strrchr(filename, '\\'); + if (!base_name) + base_name = strrchr(filename, '/'); + if (base_name) + base_name++; + else + base_name = filename; + + if (load_game_from_file(base_name)) // returns game_mode (non-zero) on success + { + replay_total_steps = step_count; + step_count = 0; + // load_game_from_file already cleared board when reading steps, but steps were read into array + // wait, load_game_from_file calls empty_board() then reads steps. + // But it doesn't set board array. + // So board is empty. + + gui_game_mode = 2; // Replay + create_game_window(); + + IupShowXY(dlg, IUP_CENTER, IUP_CENTER); + sprintf(status_message, "复盘模式 - %s", base_name); + update_ui_labels(); + if (board_canvas) + IupUpdate(board_canvas); + } + else + { + IupMessage("错误", "无法加载复盘文件"); + show_main_menu(); + } + } + else + { + show_main_menu(); + } + + IupDestroy(file_dlg); +} + /** * @brief 初始化GUI */ @@ -281,43 +617,12 @@ int init_gui() // 启用UTF-8模式,确保中文正常显示 IupSetGlobal("UTF8MODE", "YES"); - // 创建Canvas - canvas = IupCanvas(NULL); - IupSetAttribute(canvas, "ACTION", "action_cb"); - IupSetCallback(canvas, "ACTION", (Icallback)action_cb); - IupSetCallback(canvas, "BUTTON_CB", (Icallback)button_cb); - IupSetCallback(canvas, "K_ANY", (Icallback)k_any_cb); + create_main_menu(); + show_main_menu(); - // 设置Canvas大小 - char size[32]; - sprintf(size, "%dx%d", WINDOW_WIDTH, WINDOW_HEIGHT); - IupSetAttribute(canvas, "RASTERSIZE", size); - IupSetAttribute(canvas, "EXPAND", "NO"); - - // 创建Dialog - dlg = IupDialog(canvas); - IupSetAttribute(dlg, "TITLE", "五子棋 - IUP版本"); - IupSetAttribute(dlg, "RESIZE", "NO"); - - IupShowXY(dlg, IUP_CENTER, IUP_CENTER); - - // 初始化游戏状态 - for (int i = 0; i < BOARD_SIZE; i++) - { - for (int j = 0; j < BOARD_SIZE; j++) - { - board[i][j] = EMPTY; - } - } - current_player_gui = PLAYER; - game_over = 0; gui_loop_running = 1; - sprintf(status_message, "游戏开始"); printf("图形化界面初始化成功!(IUP)\n"); - printf("使用鼠标点击棋盘进行落子\n"); - printf("按ESC键退出游戏\n"); - return 0; } @@ -343,7 +648,6 @@ int handle_events() if (!gui_loop_running) return 0; - // 执行一次IUP循环迭代 int ret = IupLoopStep(); if (ret == IUP_CLOSE) { @@ -351,9 +655,6 @@ int handle_events() return 0; } - // 如果窗口被关闭(点X) - // 注意:IupLoopStep会自动处理窗口关闭并返回IUP_CLOSE,除非定义了CLOSE_CB - return 1; } @@ -362,20 +663,11 @@ int handle_events() */ void render_game() { - // 主动刷新Canvas - // 注意:频繁调用IupUpdate可能会导致闪烁或高CPU占用,但在单线程循环模型中通常是必要的 - // 以确保动画或状态更新能及时反映。 - // 在我们的例子中,主要依靠 button_cb 触发 IupUpdate。 - // 但为了兼容原来的循环结构,我们可以保持这个函数。 - // IupUpdate(canvas); - // 实际上不需要每一帧都 Update,只有状态变了才需要。 - // 原来的Raylib代码是每帧都重绘。为了性能,这里我们什么都不做,让事件驱动。 - // 除非有外部事件改变了游戏状态(比如网络消息),那时应该调用 IupUpdate。 - // 鉴于目前是本地PVP/AI,所有状态改变都在 button_cb 里,那里已经调用了 IupUpdate。 + // 事件驱动,不需要手动渲染 } /** - * @brief 绘制棋盘 (保留空函数以兼容接口,实际绘图在 action_cb 中) + * @brief 绘制棋盘 (保留空函数以兼容接口) */ void draw_board() { @@ -405,7 +697,6 @@ void show_message(const char *message) { strncpy(status_message, message, sizeof(status_message) - 1); status_message[sizeof(status_message) - 1] = '\0'; - if (canvas) - IupUpdate(canvas); + update_ui_labels(); printf("%s\n", message); -} \ No newline at end of file +} diff --git a/src/gui_menu.c b/src/gui_menu.c new file mode 100644 index 0000000..51507ff --- /dev/null +++ b/src/gui_menu.c @@ -0,0 +1,264 @@ +#include +#include +#include +#include "gui_menu.h" +#include "gui.h" +#include "globals.h" +#include "config.h" + +static Ihandle *menu_dlg = NULL; + +static int btn_pvp_cb(Ihandle *ih) +{ + (void)ih; + hide_main_menu(); + start_pvp_game_gui(); + return IUP_DEFAULT; +} + +static int btn_pve_cb(Ihandle *ih) +{ + (void)ih; + hide_main_menu(); + start_pve_game_gui(); + return IUP_DEFAULT; +} + +static int btn_replay_cb(Ihandle *ih) +{ + (void)ih; + hide_main_menu(); + start_replay_gui(); + return IUP_DEFAULT; +} + +static int btn_save_settings_cb(Ihandle *ih) +{ + Ihandle *dlg = IupGetDialog(ih); + + // Get values + Ihandle *txt_board_size = IupGetDialogChild(dlg, "BOARD_SIZE"); + Ihandle *tgl_forbidden = IupGetDialogChild(dlg, "FORBIDDEN"); + Ihandle *tgl_timer = IupGetDialogChild(dlg, "TIMER"); + Ihandle *txt_time_limit = IupGetDialogChild(dlg, "TIME_LIMIT"); + Ihandle *lst_ai = IupGetDialogChild(dlg, "AI_DIFFICULTY"); + + // Update globals + int new_size = IupGetInt(txt_board_size, "VALUE"); + if (new_size < MIN_BOARD_SIZE) new_size = MIN_BOARD_SIZE; + if (new_size > MAX_BOARD_SIZE) new_size = MAX_BOARD_SIZE; + BOARD_SIZE = new_size; + + use_forbidden_moves = IupGetInt(tgl_forbidden, "VALUE"); + + use_timer = IupGetInt(tgl_timer, "VALUE"); + if (use_timer) { + int minutes = IupGetInt(txt_time_limit, "VALUE"); + if (minutes < 1) minutes = 1; + time_limit = minutes * 60; + } + + int ai_level = IupGetInt(lst_ai, "VALUE"); + if (ai_level < 1) ai_level = 1; + if (ai_level > 5) ai_level = 5; + ai_difficulty = ai_level; + defense_coefficient = DEFAULT_DEFENSE_COEFFICIENT + (ai_difficulty - 1) * 0.1; + + // Save config + save_game_config(); + + IupHide(dlg); + return IUP_DEFAULT; +} + +static int btn_cancel_settings_cb(Ihandle *ih) +{ + Ihandle *dlg = IupGetDialog(ih); + IupHide(dlg); + return IUP_DEFAULT; +} + +static int tgl_timer_cb(Ihandle *ih, int state) +{ + Ihandle *dlg = IupGetDialog(ih); + Ihandle *txt_time_limit = IupGetDialogChild(dlg, "TIME_LIMIT"); + IupSetAttribute(txt_time_limit, "ACTIVE", state ? "YES" : "NO"); + return IUP_DEFAULT; +} + +static int btn_settings_cb(Ihandle *ih) +{ + (void)ih; + + // 1. Board Size + Ihandle *lbl_board_size = IupLabel("棋盘大小 (5-25):"); + Ihandle *txt_board_size = IupText(NULL); + IupSetAttribute(txt_board_size, "NAME", "BOARD_SIZE"); + IupSetAttribute(txt_board_size, "SPIN", "YES"); + IupSetAttribute(txt_board_size, "SPINMIN", "5"); + IupSetAttribute(txt_board_size, "SPINMAX", "25"); + IupSetInt(txt_board_size, "VALUE", BOARD_SIZE); + IupSetAttribute(txt_board_size, "SIZE", "50x"); + + // 2. Forbidden Moves + Ihandle *tgl_forbidden = IupToggle("启用禁手规则", NULL); + IupSetAttribute(tgl_forbidden, "NAME", "FORBIDDEN"); + IupSetInt(tgl_forbidden, "VALUE", use_forbidden_moves); + + // 3. Timer + Ihandle *tgl_timer = IupToggle("启用计时器", NULL); + IupSetAttribute(tgl_timer, "NAME", "TIMER"); + IupSetInt(tgl_timer, "VALUE", use_timer); + IupSetCallback(tgl_timer, "ACTION", (Icallback)tgl_timer_cb); + + // 4. Time Limit + Ihandle *lbl_time_limit = IupLabel("时间限制 (分钟):"); + Ihandle *txt_time_limit = IupText(NULL); + IupSetAttribute(txt_time_limit, "NAME", "TIME_LIMIT"); + IupSetAttribute(txt_time_limit, "SPIN", "YES"); + IupSetAttribute(txt_time_limit, "SPINMIN", "1"); + IupSetAttribute(txt_time_limit, "SPINMAX", "60"); + IupSetInt(txt_time_limit, "VALUE", time_limit / 60); + IupSetAttribute(txt_time_limit, "ACTIVE", use_timer ? "YES" : "NO"); + IupSetAttribute(txt_time_limit, "SIZE", "50x"); + + // 5. AI Difficulty + Ihandle *lbl_ai = IupLabel("AI 难度 (1-5):"); + Ihandle *lst_ai = IupList(NULL); + IupSetAttribute(lst_ai, "NAME", "AI_DIFFICULTY"); + IupSetAttribute(lst_ai, "DROPDOWN", "YES"); + IupSetAttribute(lst_ai, "1", "1 (简单)"); + IupSetAttribute(lst_ai, "2", "2 (普通)"); + IupSetAttribute(lst_ai, "3", "3 (中等)"); + IupSetAttribute(lst_ai, "4", "4 (困难)"); + IupSetAttribute(lst_ai, "5", "5 (专家)"); + IupSetInt(lst_ai, "VALUE", ai_difficulty); + IupSetAttribute(lst_ai, "SIZE", "80x"); + + // Buttons + Ihandle *btn_save = IupButton("保存", NULL); + IupSetCallback(btn_save, "ACTION", (Icallback)btn_save_settings_cb); + IupSetAttribute(btn_save, "SIZE", "60x"); + + Ihandle *btn_cancel = IupButton("取消", NULL); + IupSetCallback(btn_cancel, "ACTION", (Icallback)btn_cancel_settings_cb); + IupSetAttribute(btn_cancel, "SIZE", "60x"); + + // Layout + Ihandle *hbox_board = IupHbox(lbl_board_size, txt_board_size, NULL); + IupSetAttribute(hbox_board, "ALIGNMENT", "ACENTER"); + IupSetAttribute(hbox_board, "GAP", "10"); + + Ihandle *hbox_time = IupHbox(lbl_time_limit, txt_time_limit, NULL); + IupSetAttribute(hbox_time, "ALIGNMENT", "ACENTER"); + IupSetAttribute(hbox_time, "GAP", "10"); + + Ihandle *hbox_ai = IupHbox(lbl_ai, lst_ai, NULL); + IupSetAttribute(hbox_ai, "ALIGNMENT", "ACENTER"); + IupSetAttribute(hbox_ai, "GAP", "10"); + + Ihandle *hbox_btns = IupHbox(btn_save, btn_cancel, NULL); + IupSetAttribute(hbox_btns, "GAP", "20"); + IupSetAttribute(hbox_btns, "MARGIN", "10x0"); + IupSetAttribute(hbox_btns, "ALIGNMENT", "ACENTER"); + + Ihandle *vbox = IupVbox( + hbox_board, + tgl_forbidden, + tgl_timer, + hbox_time, + hbox_ai, + IupLabel(NULL), // Spacer + hbox_btns, + NULL); + + IupSetAttribute(vbox, "GAP", "15"); + IupSetAttribute(vbox, "MARGIN", "30x30"); + + Ihandle *dlg = IupDialog(vbox); + IupSetAttribute(dlg, "TITLE", "游戏设置"); + IupSetAttribute(dlg, "RESIZE", "NO"); + IupSetAttribute(dlg, "MINBOX", "NO"); + IupSetAttribute(dlg, "MAXBOX", "NO"); + + IupPopup(dlg, IUP_CENTER, IUP_CENTER); + IupDestroy(dlg); + + return IUP_DEFAULT; +} + +static int btn_exit_cb(Ihandle *ih) +{ + (void)ih; + cleanup_gui(); // 清理GUI资源 + exit(0); + return IUP_DEFAULT; +} + +void create_main_menu() +{ + if (menu_dlg) return; + + Ihandle *lbl_title = IupLabel("五子棋 (Gobang)"); + IupSetAttribute(lbl_title, "FONT", "SimHei, 24"); + IupSetAttribute(lbl_title, "ALIGNMENT", "ACENTER"); + + Ihandle *btn_pvp = IupButton("玩家对战 (PvP)", NULL); + IupSetCallback(btn_pvp, "ACTION", (Icallback)btn_pvp_cb); + IupSetAttribute(btn_pvp, "SIZE", "120x30"); + IupSetAttribute(btn_pvp, "FONT", "SimHei, 12"); + + Ihandle *btn_pve = IupButton("人机对战 (PvE)", NULL); + IupSetCallback(btn_pve, "ACTION", (Icallback)btn_pve_cb); + IupSetAttribute(btn_pve, "SIZE", "120x30"); + IupSetAttribute(btn_pve, "FONT", "SimHei, 12"); + + Ihandle *btn_replay = IupButton("复盘模式", NULL); + IupSetCallback(btn_replay, "ACTION", (Icallback)btn_replay_cb); + IupSetAttribute(btn_replay, "SIZE", "120x30"); + IupSetAttribute(btn_replay, "FONT", "SimHei, 12"); + + Ihandle *btn_settings = IupButton("设置", NULL); + IupSetCallback(btn_settings, "ACTION", (Icallback)btn_settings_cb); + IupSetAttribute(btn_settings, "SIZE", "120x30"); + IupSetAttribute(btn_settings, "FONT", "SimHei, 12"); + + Ihandle *btn_exit = IupButton("退出", NULL); + IupSetCallback(btn_exit, "ACTION", (Icallback)btn_exit_cb); + IupSetAttribute(btn_exit, "SIZE", "120x30"); + IupSetAttribute(btn_exit, "FONT", "SimHei, 12"); + + Ihandle *vbox = IupVbox( + lbl_title, + btn_pvp, + btn_pve, + btn_replay, + btn_settings, + btn_exit, + NULL); + IupSetAttribute(vbox, "ALIGNMENT", "ACENTER"); + IupSetAttribute(vbox, "GAP", "15"); + IupSetAttribute(vbox, "MARGIN", "40x40"); + + menu_dlg = IupDialog(vbox); + IupSetAttribute(menu_dlg, "TITLE", "五子棋 - 主菜单"); + IupSetAttribute(menu_dlg, "RESIZE", "NO"); + IupSetAttribute(menu_dlg, "MINBOX", "NO"); + IupSetAttribute(menu_dlg, "MAXBOX", "NO"); + + // 设置对话框关闭回调 (点X关闭程序) + IupSetCallback(menu_dlg, "CLOSE_CB", (Icallback)btn_exit_cb); +} + +void show_main_menu() +{ + if (!menu_dlg) + create_main_menu(); + IupShowXY(menu_dlg, IUP_CENTER, IUP_CENTER); +} + +void hide_main_menu() +{ + if (menu_dlg) + IupHide(menu_dlg); +} \ No newline at end of file