From ffb199c0f14c81816b61698e3a4cd6bd88c80dae Mon Sep 17 00:00:00 2001 From: ljr <12210105@mail.sustech.edu.cn> Date: Tue, 13 Dec 2022 13:02:21 +0800 Subject: [PATCH 1/4] 111 --- .idea/codeStyles/codeStyleConfig.xml | 5 + .idea/misc.xml | 34 ++++ .idea/uiDesigner.xml | 9 +- BugChess.iml | 2 + out/production/DarkChess/Main.class | Bin 1147 -> 0 bytes .../ChariotChessComponent.class | Bin 953 -> 0 bytes .../chessComponent/ChessComponent.class | Bin 1839 -> 0 bytes .../chessComponent/EmptySlotComponent.class | Bin 939 -> 0 bytes .../SoldierChessComponent.class | Bin 953 -> 0 bytes .../chessComponent/SquareComponent.class | Bin 3875 -> 0 bytes .../controller/ClickController.class | Bin 2807 -> 0 bytes .../DarkChess/controller/GameController.class | Bin 1194 -> 0 bytes .../DarkChess/model/ChessColor.class | Bin 1510 -> 0 bytes .../DarkChess/model/ChessboardPoint.class | Bin 1091 -> 0 bytes .../DarkChess/view/ChessGameFrame.class | Bin 3854 -> 0 bytes .../DarkChess/view/Chessboard.class | Bin 5384 -> 0 bytes src/Main.java | 1 - ...GameController.java => AppController.java} | 6 +- src/controller/BulletAnim.java | 10 ++ ...troller.java => ChessClickController.java} | 163 +++++++++--------- src/model/OnlineInfo.java | 4 + src/model/RoomFound.java | 4 + src/model/Settings.java | 9 + src/model/Step.java | 8 + src/{controller => model/game}/CheckRule.java | 35 ++-- src/model/{chess => game}/Chess.java | 45 +++-- src/model/{ => game}/ChessColor.java | 50 +++--- src/model/{ => game}/ChessType.java | 2 +- src/model/{ => game}/Chessboard.java | 5 +- src/model/{chess => game}/EmptySlot.java | 4 +- src/model/game/Game.java | 21 +++ src/model/{ => game}/GridPoint.java | 2 +- src/model/game/Msg.java | 7 + src/model/{ => game}/SideStack.java | 3 +- src/model/{chess => game}/Square.java | 14 +- src/network/Client.java | 4 + src/network/Responser.java | 4 + src/network/Searcher.java | 2 + src/network/Server.java | 4 + src/view/ChessGameFrame.java | 12 +- src/view/ChessboardCom.java | 8 +- src/view/SideStackCom.java | 6 +- src/view/SquareCom.java | 16 +- 43 files changed, 307 insertions(+), 192 deletions(-) create mode 100644 .idea/codeStyles/codeStyleConfig.xml delete mode 100644 out/production/DarkChess/Main.class delete mode 100644 out/production/DarkChess/chessComponent/ChariotChessComponent.class delete mode 100644 out/production/DarkChess/chessComponent/ChessComponent.class delete mode 100644 out/production/DarkChess/chessComponent/EmptySlotComponent.class delete mode 100644 out/production/DarkChess/chessComponent/SoldierChessComponent.class delete mode 100644 out/production/DarkChess/chessComponent/SquareComponent.class delete mode 100644 out/production/DarkChess/controller/ClickController.class delete mode 100644 out/production/DarkChess/controller/GameController.class delete mode 100644 out/production/DarkChess/model/ChessColor.class delete mode 100644 out/production/DarkChess/model/ChessboardPoint.class delete mode 100644 out/production/DarkChess/view/ChessGameFrame.class delete mode 100644 out/production/DarkChess/view/Chessboard.class rename src/controller/{GameController.java => AppController.java} (87%) create mode 100644 src/controller/BulletAnim.java rename src/controller/{ClickController.java => ChessClickController.java} (87%) create mode 100644 src/model/OnlineInfo.java create mode 100644 src/model/RoomFound.java create mode 100644 src/model/Settings.java create mode 100644 src/model/Step.java rename src/{controller => model/game}/CheckRule.java (75%) rename src/model/{chess => game}/Chess.java (78%) rename src/model/{ => game}/ChessColor.java (92%) rename src/model/{ => game}/ChessType.java (88%) rename src/model/{ => game}/Chessboard.java (98%) rename src/model/{chess => game}/EmptySlot.java (79%) create mode 100644 src/model/game/Game.java rename src/model/{ => game}/GridPoint.java (97%) create mode 100644 src/model/game/Msg.java rename src/model/{ => game}/SideStack.java (98%) rename src/model/{chess => game}/Square.java (65%) create mode 100644 src/network/Client.java create mode 100644 src/network/Responser.java create mode 100644 src/network/Searcher.java create mode 100644 src/network/Server.java diff --git a/.idea/codeStyles/codeStyleConfig.xml b/.idea/codeStyles/codeStyleConfig.xml new file mode 100644 index 0000000..a55e7a1 --- /dev/null +++ b/.idea/codeStyles/codeStyleConfig.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 3d3ab27..fb4f671 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,5 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml index 2b63946..835ec8c 100644 --- a/.idea/uiDesigner.xml +++ b/.idea/uiDesigner.xml @@ -8,9 +8,6 @@ - - - @@ -26,6 +23,9 @@ + + + @@ -121,4 +121,7 @@ + + \ No newline at end of file diff --git a/BugChess.iml b/BugChess.iml index 5c08890..63a4a82 100644 --- a/BugChess.iml +++ b/BugChess.iml @@ -3,10 +3,12 @@ + + \ No newline at end of file diff --git a/out/production/DarkChess/Main.class b/out/production/DarkChess/Main.class deleted file mode 100644 index 48ceb829c138815436953a04cc6a83c991425356..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1147 zcma)5TTc@~6#k~SrOQ%U%0*C7vFH|+#Vcyj2b)xhizXJEs87>&gn{iY*`0#?EMLT6 z;tw!B_=}8ZN@Lg15R=_AbG~!VH{Y4dkKf1N0X)H)i3E}cQWnz4FywdmK6gCsZ#l1< zJEEl+GHcS8>M29gE;lBqYQ#boCi!94XPCCj?x5&R*Y|nT6BQE{#th^vj3du5r&B&T z(Sao9y0&kX^rVs^Vi=YFey}TCu0+T%V-MpiHw;WL6!)b#aH`uPik|b1sD)%q6fmjv zPcfwJ_4RT?BQqAxVV1#+glfo0k|>6h{azEDr`ZOVq&`&*+Juk0(ig9~ou&vkwS0yN zH)wIM!9%J2KA2M5lJsU=U0k8+PLE{T{t%N~S0S}mDK{w2!!61$4hb`idA!qX^OEK$ ztuSQuq}LF`lslwPTF|Tq-LNHUQcKKg70Y^K>D-N8VCFct~f_iF-feXVEV@S>Oft+n$I@ZV>Et_bR9Rk0JjQ zZXWK5c>4bbPnJBpHhvfT%vJ7rb*V%pj|}a~Jri@dZ(&hicWd4EMOgKC6p6^dLx#mu zn>4In1CJTz&ra3%q_;V^LMtZd;Q&d{6-9>Z1@ask8I9?sBe2gjN#G(`9VQU-WUc=E z5-yXMC8`BNbnz;UIxl++1Ne&30fBzgAan$yF_J8Ds*Iuj%S diff --git a/out/production/DarkChess/chessComponent/ChariotChessComponent.class b/out/production/DarkChess/chessComponent/ChariotChessComponent.class deleted file mode 100644 index 3b3970f6ee2deb36354bf1e15502b73adc6380cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 953 zcma)4$!-%t5PjvXZ8KhQ;)IxlH4e733~)8%GJq7xpa`Q#9NUwT-DEr+jVB=S3H%3e z4iX@N1b4n8hkON4Gd6e$ATHfi)vsT@TE2b%^aa3O+|D9~xIn@{5-Gxp-E#&5OZN}8 z=Xil>O}T{B9p$NDoA9*O>g#>S9U?kf`un?Dc|o)FOg@*Ud=Z!U&wFkrBumI0u8UdPb4-l@4Zw<+{$V80R3&*Xol3hnX|TqaaW; za2_Q>aaI~3{`meqLh0<+H0JsBAU%Udw8hzo>-C;Ltak7{l>R(iE{EIsPO^f9dd7AG)i;tQGSa|qqM}vF$3dR=5v85fC6u25oKPWOPIqdTPqyh z9ujiwGJ8yoE1aGp>l&^{GOCO&F<1Cn#TpWkbpti#t+QQ0><1I11kwTxfenGYz!sAv Lndv4YVz~7aTaWc< diff --git a/out/production/DarkChess/chessComponent/ChessComponent.class b/out/production/DarkChess/chessComponent/ChessComponent.class deleted file mode 100644 index d2e0c5d66d55369d31c6fed5db3531f2f488e236..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1839 zcmah}OHUhD6#gz449+Ehd6kp^X_Lke5;yc6CvJ#&HU?5VaSDCVVLY)XjAxvgfk<6c z-E`MYmf7?_w5p8Mma6OirAk%5J7a7ol_;{9bMN`i>pSP3zyA644*<7u7()+wqlifK zp-LZYwu`I*QS*ow$@ezMmpwUGBLz47R9*41SSPW+m@%^ z1qM8WDKK+^v99o;y^8%BrlYtZ@j7M%F1|uxz)x2NLtaDEO}kn!?5bZA5F0T%n3b5r zJY!W2|B+cyirz#rP`x4Xrcw=3wQiWzny+%cBJmck(%`XaS=&dNB@j()@Gm4IDUni4 z3@$Gf@9nJ>mv)rVg2c7JsN!nRl#$9kBk?wF2*gaUXdD@?r+kTBmDM{E@8UgyA%nHh zsVEDKw-t9a&(s;&IWQu3z5`--h#mDRcbR))RYfh~3yClB6}!r+Lo8i%)g9jPJt*)3 z4fA}Wia^sgwhrt2hWkL1%}wrYhd;B%BEq>*Wn0Fmu-aV9lQS4J+)aE(%O^CZ|I@lM+?- z9xhWxR+C1lhZ46bZ@%Wq zqSVi?Or;mDO-CmBjv;;uP#XWMWe1Gl97eHEDHmd)qrwxdVBj%5DXEHDfR-@v1iiuC z0sTh;sg4;&ji|jDMix0l1Jp?>eT-=OXPj$dl%Fa7QcYa!Q!Ko|O}f6XpnsyYx$qkv?!+G*^f&pU zFD5?t1N>3OJJSu2C4l=dJ9qAxd(J&~{`~#*8^8-ZY{EmW0l$SCs58ut^iX7Bd?<<{ z)|t*3{NB6XHbW<=rlJ5-Xf_bEFpU<&ayq#+I@U@k6ZSuic`jmI#tii>sib+yu)lG> z*g*4q_+Cq8qU0k#;UWKQ!ZN;$P=e;Ubd`nFP9eXNc(%jPOu2fiPsFZf*xEQasA{eZ zIJ!jJ<_Cu0tP_T{>q{|A4@F_5Dq9NrdYq@?wY0`|FAnsXeK=S}o1UcoJWvJ9&^k*| ziaI@Sp#A9alOJGD7yO@Se0Q)pS_6WEz%2rIX!m>q#x2ZKMAxu@MJi=?UEFr)Htygq zYVPbFmf%zVK9)*q?$~+S5VXcC;S` z+VkANv^?b;TfhAFe)BMoEOG*Q0~cTrHs%y{wAWK^FfXjocf)ava}X99&1r$7%sCWM z5-1zEhzg-RFO86V^58z9^842;7Wnns>+>ATTQsnQ%Y>9K2W|w9YxbnyH#=dV{C+!& zS_FUdmO&QxiBPhY?>;^qblu>o?0WGx?MUxX1}gH$!BlvphJ;P~f68t%ZH$}rpRhD7 ze)7QBtj7sMrF|}aeoTb?IAh$tk~2FP!pgtK##Ij0E3S$5358B5o#RLHBrZu{i%^~F z^hA=t4xu=^F9If^_V*28ogIA|IPOCg^|1EGb=ZwKaf2t7;4KGOSG3-IUSaQytqkAw z*4FmUa;lpC1ZsVR_<+JY7_G{sb5!3W*QzYDamK(TR`^_G3Lx6b0;;@7S5d|WDp=*{ z-iVN6*VtofT<7!@TWeU4Wz=JIGLF@;iBxReM1y&oY}b(Z!2}tBtUya(Tc9Yg%Oq)L Ky2XeDZvOJU8mD=G?56^)%EE*;(5g))0z!&+CY4 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 QiW8j=poVX`TZQlb1-am}%>V!Z diff --git a/out/production/DarkChess/controller/GameController.class b/out/production/DarkChess/controller/GameController.class deleted file mode 100644 index f08067944dd821ccefa710663a687b4a77d5ad3a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1194 zcma)5YfsZq7=F$+)@>99L14|3m{KsUVg`AEu_(zVnK}ZhYsl8RWz|gE7Z-YbQKTMx*E21xW_CP6UqMm9 ztct6+CXl^QwLr>pWXo?Ad3%uO(dCAM>!%5^=vUh>KIlfDw{No2LhaI_ zRyncL{5M_a&~KH%{69v~*BF6xun*6rCy5e{<-BqML8OUL9j%pFpCZnZ% zY@e1he}QAQKYESWLqQ+6WV_deblu#urPpS`Iw)0`;o=P_)iR-AbWy|t;!cDOW#mfI^N=SLmV>%m>}RB34FRdl02uG zFLgS$aG#j|vZxQF{hen2FZcj*6+UXQ3rLU8xz P@R;uyR%m|`yq^9AdGjBE diff --git a/out/production/DarkChess/model/ChessColor.class b/out/production/DarkChess/model/ChessColor.class deleted file mode 100644 index b88cc76ed2c52dbe45b127ad9bcc29208e2d8e01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1510 zcmZuwYf}DBKEzQCVB}|jh38Qi9%SxMJ%QC~orhiq~ZE9-z z+>dHH=VdhnU}oQa&pzk&oag-c`~4Sy``A|D5eStluPi%}eq+^Y>55&c1|gv6@WC(O zTg|SdHwBDrCo0LXfQ}%;yiYR^`F=)+&UYoZmCLZC${zutYST>VHhJSMs+20sm6TDb<$+&bNnhJvU+n?(nLP zaa^O89kWa|8{H`wHKAh?Q`{OeOr*D9=DT`Aa-Iyp7eJf|x6R_)AZBn~#SNYUd9|86 z0c#ZSCYLxXu-L1z?ixDN#R>rgIm>OH;8Xy50Cxm}xk`B3Hs4z$f*IV^aZeWge0^gl z!&#Sfk`3{pMkLEMfuU%u$3Tg?V}Oz-c?tAoOOBOml=rOaj=5)(WwJ-*v2JZJrIn&- z7tCsj9bIpw{-#9fgZa|FW7Zp03OLatV0YhC{JvGs$zh!qm^)WeH38&QDEF}hPsmTw z_obrk3d0+X6$Bz}gtLg2y4zSLKP_KrREySHiQDh{zi>BL!>L)~cbN9lpBm-e1L&mX zk|!+{eKA;R@+2(*p)uYqx~qhHfMxPe(QTYg{%K8|{eu4AFh0;tV1=H3`He>*j!~UNTyWS?e`CX+6HNWd?(ttVKX{rO* zMAmiQb(_5ZgM5vs*N8PS{S}ELc%@}dG3J`MB`vD7%=?UmCKjbd`-bEZ&N8R16dG|0 Sn&kol^w#3(336ofVCx?mv?195 diff --git a/out/production/DarkChess/model/ChessboardPoint.class b/out/production/DarkChess/model/ChessboardPoint.class deleted file mode 100644 index a0ef8596da54d8da3660f68e6e0febfcfbd64132..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmaJ>8X9$I-Dp2M*AzN?kPoan@2c(k@D4EIFe=SZ!mJ>l<*P+30>=FCuW)y3Y#M!9V6P@4DgY~92;AQX*GXbE%m ziOrOD^=atI9c78M6eq8w8R|h)EnvNb4Qx8NZ};$kuyHl03eNOM zwi4oGH9NvHIy@(Qs*i0XO-zcu6v4ok(MC_}(dkKhEG=E!SmZC@-ua1~kp5vTKM_EC zd;w{Rj`00mWn{aE24THUThwrM;F_Uyy+2xTRpffU@xa|4(I+CJVqCOD@Ag%kakvjV;z6-#M^`FvtIS_71G<`K~s)@q{;5%4NnV-a+02Ry3XZn%{!Ix_-td3Qwq%CA|H_mc- Wnc#I2?(wOk$zF-Ahj@e*mVN`s73q-x diff --git a/out/production/DarkChess/view/ChessGameFrame.class b/out/production/DarkChess/view/ChessGameFrame.class deleted file mode 100644 index cf9f8f58b7ac7c853c1b1669b95788efe7891e40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3854 zcma)9340UQ6+I(tk1Pgc3osZ62x=Nz1_Y#qfM{A`HZYb3d+=D}jz%^l z-P?5Em$d2Lbl(#KGR583G^P6==`ZNlb7uy71SwzerY`P{9XDNznm2V9 z#9-ReX|Cuxw3_LeXr-1m4edxMXg-%87#~ug1YUSKO+2^*Rl&$6*CqsBplztk*0zYuQ!f z^t|DC;Ze}k9YpU@4M%ZIL90Yhzh>85>JJ(AWg~h;pQitQ)Q)Q;967d5FPA+|Oxe0q z7Rztc@FrP_a;2b88I}n9HDpD&p28u+vh4nv>)I7r8q{#&uBL*mm;DtL~6jzw9 zF}pOo$lSy*4NGjytrkwWrv0M309(U6-s%^mXrT)smqp@{wMrI;$vW&OIEoq*T%55N zlO7@Xbc`4rTuQK+UDa?6Px1r3B(*$hIG1f_&Y-V{!|7aUM43>j8VfApbf34eU{+bs zWUXj^n})aJ9SYi+pT=bcyF<`lQGw9jkq|oADi1q~_p*kBvCDMD_!vIU&fo>#59u}HW1QD`MYqW(hiRur**#tMP(z=~MDa=L z&01z@HfhmZ44=klRD4#$=e)k`X=~iWq|A#3s}jZM8O3~MzUC%Jb$2E?Mr7*SBrRp>CDrVM9XpAv8hIaRC)-7#ez2%Fp)lkDCU>MyH= z&v;4@%XrV0k*z-|c=z<#f9LBgSc-RFbHKnCu_;WYenU zP^a(Wi5Dx{HK%0w>E6(Ilh`ks$cuj4cB`(V&yN`Hj9sqATkz``euLkt_??E|;}0y= zRikEQ!JakJ1V!#JTY7PMBN4Cf~r2UMX8fwX0y;v$grm{SJjB4I9U= z%^Ts*U;UzQ^1*up;(N6aXwK@ERWw~A(}sGy8869+^Jfjq-s~?jyQASI>O3*>6}G&r zrB|y)RmI;G?71&wujIXoe=6AV;7>_CKUCO7ixIZ!W+dcx$5BG=b9}eUC64cioUeSx zezK1d+O*-wbb#5$c|8!;qNj2`uH1oftn-uKA(>v&gUjHp@T>^bG8K=(TOCl zlY5EgARa;nJ9uf?i9vdm$8L=9N_YlcIEy{_0e2^Tr1&9z#2GQ;$MjI~MnB;w!arVz z0?(eJEs4yLW#lFayrbEY=MwUT)G|&^_AX)MCPsV3r?!}^$*Yd>RBs*U&aFc4V7Ne# z3G5@l{W!pz<6%ApQipFMfRrH6pW=A}h{)|L0P?gq0&>f^FqwGE5-z?7{W^47jJGhj zE0zrk+woG{@j5PZxQyw^gxS=#aS5|^R8kZ*0^3T(AQTNp7_mnQ@hIbbj2F3#2Tt>1 zlMBGL;ssm}AW8P+UlVmc&$r^`NB~QwB63R%zI=uwiQ@1woXLc{goQ$H>NXaEI-Zi) zgz{7zLF^2U; z+#t4yTvr2(&jlFAJdE%0F*YJ=$A2COt@k?KSH}l@gyP@_JqK4wu$y%Qj1ub^#(Ioc zi;VO*`pC{4&QbbA2=CYm-XR}vTSS^dfVV{SQgfZx@u9>g>iASD@ysoJVT92f-CM_3 zL)=S{#K7Y;KFN|f&!V~Dnej`ZGcZF{Si&u;j}zd}a2pXCWKRkVW@u27sHPIn-NLt4 zz49}j3n5omRH}i>HTXHVM(_*B|8IrxzasiS;!phfqnA1QE7xK)_c#0l|3c^g01B1R A1poj5 diff --git a/out/production/DarkChess/view/Chessboard.class b/out/production/DarkChess/view/Chessboard.class deleted file mode 100644 index 398ab14e1be90a1556622f0ce89c9be253b1ddf2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5384 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兵,不可 - && ( - dstType.compareTo(srcType) >= 0 //高级 - || ( //兵->炮/将 - srcType == ChessType.SOLDIER - && (dstType == ChessType.CANNON || dstType == ChessType.GENERAL) - ) - ); + && !(srcType == ChessType.GENERAL && dstType == ChessType.SOLDIER) //将->兵,不可 + && (dstType.compareTo(srcType) >= 0 //高级 + || (srcType == ChessType.SOLDIER && dstType == ChessType.GENERAL) //兵->将 + || (srcType != ChessType.SOLDIER && dstType == ChessType.CANNON) //非兵->炮 + ); } else { return (srcType == ChessType.CANNON); } } - + } diff --git a/src/model/chess/Chess.java b/src/model/game/Chess.java similarity index 78% rename from src/model/chess/Chess.java rename to src/model/game/Chess.java index dd35667..3a376b0 100644 --- a/src/model/chess/Chess.java +++ b/src/model/game/Chess.java @@ -1,10 +1,4 @@ -package model.chess; - -import controller.CheckRule; -import model.ChessColor; -import model.ChessType; -import model.Chessboard; -import model.GridPoint; +package model.game; import java.io.Serializable; @@ -17,7 +11,7 @@ public class Chess extends Square implements Serializable, Cloneable { protected boolean alive; //是不是没死 private boolean selected; //是否被选中 private boolean isReversal = false; //是否被翻开 - + /** * gridPoint: 表示8*4棋盘中,当前棋子在棋格对应的位置,如(0, 0), (1, 0)等等 * chessColor: 表示这个棋子的颜色,有红色,黑色,无色三种 @@ -32,39 +26,42 @@ public class Chess extends Square implements Serializable, Cloneable { this.alive = true; this.selected = false; } - + public ChessColor getChessColor() { return chessColor; } - + public ChessType getChessType() { return chessType; } - + public boolean isAlive() { return alive; } - public void kill(){ + + public void kill() { this.alive = false; } - + public boolean isSelected() { return selected; } + public void setSelected(boolean selected) { this.selected = selected; } - + public boolean isReversal() { return isReversal; } + public void setReversal(boolean reversal) { isReversal = reversal; } - + /** * @param handleChess 当前选择的棋子 - * @param dst 目标位置,如(0, 0), (0, 1)等等 + * @param dst 目标位置,如(0, 0), (0, 1)等等 * @return this棋子对象的移动规则和当前位置(chessboardPoint)能否到达目标位置 *
* 这个方法主要是检查移动的合法性,如果合法就返回true,反之是false。 @@ -73,17 +70,15 @@ public class Chess extends Square implements Serializable, Cloneable { Square dstSquare = Chessboard.getInstance().getSquareAtPoint(dst); //此处判断 handleChess 是否翻转 return handleChess.isReversal && - CheckRule.checkPath(handleChess,dstSquare) && - (!(dstSquare instanceof Chess dstChess) || - CheckRule.checkRank(handleChess,dstChess)); + CheckRule.checkPath(handleChess, dstSquare) && + (!(dstSquare instanceof Chess dstChess) || + CheckRule.checkRank(handleChess, dstChess)); } - + + @Override public Chess clone() { - try { - return (Chess) super.clone(); - } catch (CloneNotSupportedException e) { - throw new AssertionError(); - } + Chess clone = (Chess) super.clone(); + return clone; } } diff --git a/src/model/ChessColor.java b/src/model/game/ChessColor.java similarity index 92% rename from src/model/ChessColor.java rename to src/model/game/ChessColor.java index 50f77e0..7ca9384 100644 --- a/src/model/ChessColor.java +++ b/src/model/game/ChessColor.java @@ -1,25 +1,25 @@ -package model; - -import java.awt.*; - -/** - * 颜色,但是是特指阵营颜色 - */ -public enum ChessColor { - BLACK("Black", Color.BLACK), RED("Red", Color.RED), NONE("No Player", Color.WHITE); - - private final String name; - private final Color color; - - ChessColor(String name, Color color) { - this.name = name; - this.color = color; - } - - public String getName() { - return name; - } - public Color getColor() { - return color; - } -} +package model.game; + +import java.awt.*; + +/** + * 颜色,但是是特指阵营颜色 + */ +public enum ChessColor { + BLACK("Black", Color.BLACK), RED("Red", Color.RED), NONE("No Player", Color.WHITE); + + private final String name; + private final Color color; + + ChessColor(String name, Color color) { + this.name = name; + this.color = color; + } + + public String getName() { + return name; + } + public Color getColor() { + return color; + } +} diff --git a/src/model/ChessType.java b/src/model/game/ChessType.java similarity index 88% rename from src/model/ChessType.java rename to src/model/game/ChessType.java index f5a7262..a5933e3 100644 --- a/src/model/ChessType.java +++ b/src/model/game/ChessType.java @@ -1,4 +1,4 @@ -package model; +package model.game; public enum ChessType { CANNON,GENERAL, ADVISOR, MINISTER, CHARIOT, HORSE, SOLDIER diff --git a/src/model/Chessboard.java b/src/model/game/Chessboard.java similarity index 98% rename from src/model/Chessboard.java rename to src/model/game/Chessboard.java index 55366f5..731571b 100644 --- a/src/model/Chessboard.java +++ b/src/model/game/Chessboard.java @@ -1,8 +1,5 @@ -package model; +package model.game; -import model.chess.Chess; -import model.chess.EmptySlot; -import model.chess.Square; import io.vavr.Tuple2; import view.ChessboardCom; diff --git a/src/model/chess/EmptySlot.java b/src/model/game/EmptySlot.java similarity index 79% rename from src/model/chess/EmptySlot.java rename to src/model/game/EmptySlot.java index c33d017..0d4ccb5 100644 --- a/src/model/chess/EmptySlot.java +++ b/src/model/game/EmptySlot.java @@ -1,6 +1,4 @@ -package model.chess; - -import model.GridPoint; +package model.game; /** * 这个类表示棋盘上的空棋子的格子 diff --git a/src/model/game/Game.java b/src/model/game/Game.java new file mode 100644 index 0000000..8f081c9 --- /dev/null +++ b/src/model/game/Game.java @@ -0,0 +1,21 @@ +package model.game; + +import model.Step; + +import java.util.ArrayList; + +public class Game { + + private ArrayList steps = new ArrayList<>(); + + private Chessboard initialChessboard; + + public Game() { + this.initialChessboard = Chessboard.getInstance().clone(); + } + + public void Step(Chess chess1, Square square2){ + steps.add(new Step(chess1.getGridPoint(), chess1.clone(), square2.getGridPoint(), square2.clone())); + } + +} \ No newline at end of file diff --git a/src/model/GridPoint.java b/src/model/game/GridPoint.java similarity index 97% rename from src/model/GridPoint.java rename to src/model/game/GridPoint.java index 725d3f4..bae5986 100644 --- a/src/model/GridPoint.java +++ b/src/model/game/GridPoint.java @@ -1,4 +1,4 @@ -package model; +package model.game; /** * 这个类表示网格中的整数坐标,可以表示棋盘的位置,也可以表示亡子堆的位置 diff --git a/src/model/game/Msg.java b/src/model/game/Msg.java new file mode 100644 index 0000000..fc13f85 --- /dev/null +++ b/src/model/game/Msg.java @@ -0,0 +1,7 @@ +package model.game; + +public class Msg { + +} + +联机 AI 评论 弹幕 \ No newline at end of file diff --git a/src/model/SideStack.java b/src/model/game/SideStack.java similarity index 98% rename from src/model/SideStack.java rename to src/model/game/SideStack.java index 872cead..fa1e7fc 100644 --- a/src/model/SideStack.java +++ b/src/model/game/SideStack.java @@ -1,6 +1,5 @@ -package model; +package model.game; -import model.chess.Chess; import view.ChessboardCom; import java.io.Serializable; diff --git a/src/model/chess/Square.java b/src/model/game/Square.java similarity index 65% rename from src/model/chess/Square.java rename to src/model/game/Square.java index 8807eb4..291d332 100644 --- a/src/model/chess/Square.java +++ b/src/model/game/Square.java @@ -1,6 +1,4 @@ -package model.chess; - -import model.GridPoint; +package model.game; import java.io.Serializable; @@ -10,7 +8,7 @@ import java.io.Serializable; * 1. EmptySlot: 空方格 * 2. Chess: 带棋子的方格 */ -public class Square implements Serializable { +public class Square implements Serializable, Cloneable { private GridPoint gridPoint; protected Square(GridPoint gridPoint) { @@ -25,4 +23,12 @@ public class Square implements Serializable { this.gridPoint = gridPoint; } + @Override + public Square clone() { + try { + return (Square) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } } diff --git a/src/network/Client.java b/src/network/Client.java new file mode 100644 index 0000000..6191a1a --- /dev/null +++ b/src/network/Client.java @@ -0,0 +1,4 @@ +package network; + +public class Client { +} diff --git a/src/network/Responser.java b/src/network/Responser.java new file mode 100644 index 0000000..75543d4 --- /dev/null +++ b/src/network/Responser.java @@ -0,0 +1,4 @@ +package network; + +public class Responser { +} diff --git a/src/network/Searcher.java b/src/network/Searcher.java new file mode 100644 index 0000000..1ff1b3a --- /dev/null +++ b/src/network/Searcher.java @@ -0,0 +1,2 @@ +package network;public class Searcher { +} diff --git a/src/network/Server.java b/src/network/Server.java new file mode 100644 index 0000000..140688f --- /dev/null +++ b/src/network/Server.java @@ -0,0 +1,4 @@ +package network; + +public class Server { +} diff --git a/src/view/ChessGameFrame.java b/src/view/ChessGameFrame.java index fd9159d..5b74f0c 100644 --- a/src/view/ChessGameFrame.java +++ b/src/view/ChessGameFrame.java @@ -1,7 +1,7 @@ package view; -import controller.GameController; -import model.Chessboard; +import controller.AppController; +import model.game.Chessboard; import javax.swing.*; import java.awt.*; @@ -16,7 +16,7 @@ public class ChessGameFrame extends JFrame { private final int WIDTH; private final int HEIGHT; public final int CHESSBOARD_SIZE; - private GameController gameController; + private AppController appController; private static JLabel statusLabel; public ChessGameFrame(int width, int height) { @@ -36,6 +36,8 @@ public class ChessGameFrame extends JFrame { addLabel(); addHelloButton(); addLoadButton(); + appController = new AppController(Chessboard.getInstance()); + appController.loadGameFromFile("res/save.txt"); } @@ -44,7 +46,7 @@ public class ChessGameFrame extends JFrame { */ private void addChessboard() { ChessboardCom.setInstance(new ChessboardCom(CHESSBOARD_SIZE / 2 + 6, CHESSBOARD_SIZE / 3, CHESSBOARD_SIZE + 6)); - gameController = new GameController(Chessboard.getInstance()); + appController = new AppController(Chessboard.getInstance()); ChessboardCom.getInstance().setLocation(HEIGHT / 10, HEIGHT / 10); add(ChessboardCom.getInstance()); } @@ -88,7 +90,7 @@ public class ChessGameFrame extends JFrame { button.addActionListener(e -> { System.out.println("Click load"); String path = JOptionPane.showInputDialog(this, "Input Path here"); - gameController.loadGameFromFile(path); + appController.loadGameFromFile(path); }); } diff --git a/src/view/ChessboardCom.java b/src/view/ChessboardCom.java index 8c16435..1796751 100644 --- a/src/view/ChessboardCom.java +++ b/src/view/ChessboardCom.java @@ -1,10 +1,10 @@ package view; -import model.ChessColor; -import model.Chessboard; -import model.GridPoint; -import model.SideStack; +import model.game.ChessColor; +import model.game.Chessboard; +import model.game.GridPoint; +import model.game.SideStack; import javax.swing.*; import java.awt.*; diff --git a/src/view/SideStackCom.java b/src/view/SideStackCom.java index 9c19209..cd54e5b 100644 --- a/src/view/SideStackCom.java +++ b/src/view/SideStackCom.java @@ -1,8 +1,8 @@ package view; -import model.GridPoint; -import model.SideStack; -import model.ChessColor; +import model.game.GridPoint; +import model.game.SideStack; +import model.game.ChessColor; import javax.swing.*; import java.awt.*; diff --git a/src/view/SquareCom.java b/src/view/SquareCom.java index 8d2ee9e..5c3dcd5 100644 --- a/src/view/SquareCom.java +++ b/src/view/SquareCom.java @@ -1,12 +1,12 @@ package view; -import controller.ClickController; -import model.ChessColor; -import model.ChessType; -import model.Chessboard; -import model.GridPoint; -import model.chess.Chess; -import model.chess.Square; +import controller.ChessClickController; +import model.game.ChessColor; +import model.game.ChessType; +import model.game.Chessboard; +import model.game.GridPoint; +import model.game.Chess; +import model.game.Square; import javax.swing.*; import java.awt.*; @@ -129,7 +129,7 @@ public class SquareCom extends JComponent { super.processMouseEvent(e); if (e.getID() == MouseEvent.MOUSE_PRESSED) { System.out.printf("Click [%d,%d]\n", gridPoint.getX(), gridPoint.getY()); - ClickController.INSTANCE.onClick(this); + ChessClickController.INSTANCE.onClick(this); } } -- GitLab From 61cdd812849d0c47eca98efaac98c850d4fb60a4 Mon Sep 17 00:00:00 2001 From: ljr <12210105@mail.sustech.edu.cn> Date: Tue, 13 Dec 2022 16:23:04 +0800 Subject: [PATCH 2/4] (undone-2)feat(model interfaces) --- src/controller/ChessClickController.java | 7 ++-- src/model/History.java | 20 ++++++++++++ src/model/Step.java | 25 +++++++++++++-- src/model/game/Chessboard.java | 28 ++++++++++------ src/model/game/Game.java | 41 ++++++++++++++++++++---- src/model/game/Msg.java | 4 +-- 6 files changed, 99 insertions(+), 26 deletions(-) diff --git a/src/controller/ChessClickController.java b/src/controller/ChessClickController.java index 1be1cec..db48a86 100644 --- a/src/controller/ChessClickController.java +++ b/src/controller/ChessClickController.java @@ -1,10 +1,7 @@ package controller; -import model.game.ChessColor; -import model.game.Chessboard; -import model.game.Chess; -import model.game.Square; +import model.game.*; import view.ChessGameFrame; import view.ChessboardCom; import view.SquareCom; @@ -69,7 +66,7 @@ public enum ChessClickController { ChessClickController.INSTANCE.swapPlayer(); return false; } - return chess.getChessColor() == Chessboard.getInstance().getCurrentColor(); + return chess.getChessColor() == Game.instance.getCurrentColor(); } public void swapPlayer() { diff --git a/src/model/History.java b/src/model/History.java index 3f9c8e1..c31fc9d 100644 --- a/src/model/History.java +++ b/src/model/History.java @@ -1,4 +1,24 @@ package model; +import model.game.Chessboard; +import model.game.Game; + +import java.util.ArrayList; + public class History { + + public static History instance; + + public ArrayList getSteps() { + return steps; + } + + private ArrayList steps = new ArrayList<>(); + + private Game initialState; + + public History(Game initialState) { + this.initialState = initialState.clone(); + } + } diff --git a/src/model/Step.java b/src/model/Step.java index 44ed63b..d772bf5 100644 --- a/src/model/Step.java +++ b/src/model/Step.java @@ -1,8 +1,29 @@ package model; import model.game.Chess; +import model.game.Chessboard; import model.game.GridPoint; import model.game.Square; -public record Step (GridPoint src, Chess srcChess, GridPoint dst, Square dstSquare){ -} +/** + * 记录一步操作 + * 有两种类型:吃子和行棋 + * 第一种,src吃掉dst,dst被“安葬”到SideStack里面的bury的空位上,bury移到src原来的位置上,三轮换 + * 第二种,src和dst互换,burySquareId写-1,这个-1是区分这一步表示行子还是吃棋的判据 + * + * @param srcChessId 源棋子id + * @param dstSquareId 目标空格/棋子id + * @param burySquareId SideStack里面的空格id + */ +public record Step(int srcChessId, int dstSquareId, int burySquareId) { + public Step { + if (srcChessId >= Chessboard.ID_DIVISION + || (burySquareId >= 0 && burySquareId < Chessboard.ID_DIVISION) + || (burySquareId < 0 && dstSquareId < Chessboard.ID_DIVISION) + || (burySquareId >= 0 && dstSquareId >= Chessboard.ID_DIVISION)) { + throw new IllegalArgumentException(String.format( + "Illegal Step:{ srcChessId: %d, dstChessId: %d, burySquareId: %d }", + srcChessId, dstSquareId, burySquareId)); + } + } +} \ No newline at end of file diff --git a/src/model/game/Chessboard.java b/src/model/game/Chessboard.java index 731571b..be9c4c9 100644 --- a/src/model/game/Chessboard.java +++ b/src/model/game/Chessboard.java @@ -19,6 +19,8 @@ public class Chessboard implements Serializable, Cloneable { public static final int ROW_SIZE = 8; //行数 public static final int COL_SIZE = 4; //列数 + public static final int ID_DIVISION = ROW_SIZE * COL_SIZE; + private Square[][] squares = new Square[ROW_SIZE][COL_SIZE]; //方格子列表 //两个亡子堆->亡子堆组 @@ -27,8 +29,6 @@ public class Chessboard implements Serializable, Cloneable { new SideStack(ChessColor.RED) }; - private ChessColor currentColor = ChessColor.RED; //执棋颜色 - /** * 初始化整个棋盘,包括所有棋子和亡子堆 */ @@ -83,6 +83,23 @@ public class Chessboard implements Serializable, Cloneable { return squares[gridPoint.getY()][gridPoint.getX()]; } + /** + * TODO getSquareById + * 获取某一id对应的方格对象 + * @param id 方格id + */ + Square getSquareById(int id){ + } + + /** + * TODO getChessById + * 获取某一id对应的棋子对象 + * @param id 棋子id + */ + Chess getChessById(int id){ + + } + /** * 获取亡子堆组 */ @@ -102,13 +119,6 @@ public class Chessboard implements Serializable, Cloneable { throw new NoSuchElementException(); } - public ChessColor getCurrentColor() { - return currentColor; - } - public void setCurrentColor(ChessColor currentColor) { - this.currentColor = currentColor; - } - /** * 根据Square存储的位置数据,将Square放置在棋盘的数组上 */ diff --git a/src/model/game/Game.java b/src/model/game/Game.java index 8f081c9..935db39 100644 --- a/src/model/game/Game.java +++ b/src/model/game/Game.java @@ -3,19 +3,46 @@ package model.game; import model.Step; import java.util.ArrayList; +import java.util.List; -public class Game { +public class Game implements Cloneable{ - private ArrayList steps = new ArrayList<>(); + public static Game instance; - private Chessboard initialChessboard; + private Chessboard chessboard; - public Game() { - this.initialChessboard = Chessboard.getInstance().clone(); + private List msgList = new ArrayList<>(); + + private int[] scoreboard = {0, 0}; + + private ChessColor currentColor = ChessColor.RED; //执棋颜色 + + public Chessboard getChessboard() { + return chessboard; + } + + public List getMsgList() { + return msgList; } - public void Step(Chess chess1, Square square2){ - steps.add(new Step(chess1.getGridPoint(), chess1.clone(), square2.getGridPoint(), square2.clone())); + public int[] getScoreboard() { + return scoreboard; } + public ChessColor getCurrentColor() { + return currentColor; + } + + public boolean resolveStep(Step step){ + //TODO resolveStep + } + + @Override + public Game clone() { + try { + return (Game) super.clone(); + } catch (CloneNotSupportedException e) { + throw new AssertionError(); + } + } } \ No newline at end of file diff --git a/src/model/game/Msg.java b/src/model/game/Msg.java index fc13f85..a8eca4e 100644 --- a/src/model/game/Msg.java +++ b/src/model/game/Msg.java @@ -2,6 +2,4 @@ package model.game; public class Msg { -} - -联机 AI 评论 弹幕 \ No newline at end of file +} \ No newline at end of file -- GitLab From 20601f325e348960a7cc3ede63d30d370069ec64 Mon Sep 17 00:00:00 2001 From: ljr <12210105@mail.sustech.edu.cn> Date: Tue, 13 Dec 2022 18:09:57 +0800 Subject: [PATCH 3/4] (undone-3)feat(model interfaces) --- .idea/misc.xml | 2 +- src/controller/BulletAnim.java | 23 +++++++++++++++++++---- src/model/game/Chessboard.java | 24 +++++++++++++----------- src/model/game/Game.java | 2 +- src/view/ChessboardCom.java | 2 +- src/view/SideStackCom.java | 2 +- src/view/SquareCom.java | 16 ++++++++-------- 7 files changed, 44 insertions(+), 27 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index fb4f671..d251f7d 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -34,7 +34,7 @@ - + \ No newline at end of file diff --git a/src/controller/BulletAnim.java b/src/controller/BulletAnim.java index 530b013..a2dfd06 100644 --- a/src/controller/BulletAnim.java +++ b/src/controller/BulletAnim.java @@ -1,10 +1,25 @@ package controller; +import model.game.Game; import model.game.Msg; -public class BulletAnim { - - public void draw(Msg msg){ - +public class BulletAnim extends Thread{ + @Override + public void run() { + super.run(); + while (true){ + for (Msg msg: Game.instance.getMsgList()){ + drawBullet(msg); + } + try { + sleep(50); + } catch (InterruptedException ignored) { + break; + } + } + } + + public void drawBullet(Msg msg){ + //TODO: drawBullet } } diff --git a/src/model/game/Chessboard.java b/src/model/game/Chessboard.java index be9c4c9..6c3f212 100644 --- a/src/model/game/Chessboard.java +++ b/src/model/game/Chessboard.java @@ -10,6 +10,8 @@ import java.util.*; * 这个类表示棋盘组建,其包含: * Square[][]: 4*8个方块格子组件 */ + +//TODO: Refactor into id mode public class Chessboard implements Serializable, Cloneable { /** * 不彻底的单例 @@ -21,7 +23,7 @@ public class Chessboard implements Serializable, Cloneable { public static final int ID_DIVISION = ROW_SIZE * COL_SIZE; - private Square[][] squares = new Square[ROW_SIZE][COL_SIZE]; //方格子列表 + private Square[][] idGrid = new Square[ROW_SIZE][COL_SIZE]; //方格子列表 //两个亡子堆->亡子堆组 private SideStack[] sideStacks = new SideStack[]{ @@ -52,9 +54,9 @@ public class Chessboard implements Serializable, Cloneable { Collections.shuffle(paramsList); //每个棋子初始化的时候,从末尾拿元组作为参数,并移除那个元组,如同出栈 - for (int i = 0; i < squares.length; i++) { - squares[i] = new Square[COL_SIZE]; - for (int j = 0; j < squares[i].length; j++) { + for (int i = 0; i < idGrid.length; i++) { + idGrid[i] = new Square[COL_SIZE]; + for (int j = 0; j < idGrid[i].length; j++) { Chess chess; Tuple2 params = paramsList.get(paramsList.size() - 1); chess = new Chess(new GridPoint(i, j), params._1, params._2); @@ -71,8 +73,8 @@ public class Chessboard implements Serializable, Cloneable { instance = instance1; } - public Square[][] getSquares() { - return squares; + public Square[][] getIdGrid() { + return idGrid; } /** @@ -80,7 +82,7 @@ public class Chessboard implements Serializable, Cloneable { * @param gridPoint 棋盘坐标 */ public Square getSquareAtPoint(GridPoint gridPoint) { - return squares[gridPoint.getY()][gridPoint.getX()]; + return idGrid[gridPoint.getY()][gridPoint.getX()]; } /** @@ -124,7 +126,7 @@ public class Chessboard implements Serializable, Cloneable { */ public void putChessOnBoard(Square square) { int row = square.getGridPoint().getY(), col = square.getGridPoint().getX(); - squares[row][col] = square; + idGrid[row][col] = square; } /** @@ -146,9 +148,9 @@ public class Chessboard implements Serializable, Cloneable { //Set squares' references int row1 = chess1.getGridPoint().getY(), col1 = chess1.getGridPoint().getX(); - squares[row1][col1] = chess1; + idGrid[row1][col1] = chess1; int row2 = square2.getGridPoint().getY(), col2 = square2.getGridPoint().getX(); - squares[row2][col2] = square2; + idGrid[row2][col2] = square2; //重绘 ChessboardCom.getInstance().getSquareComAtPoint(chess1.getGridPoint()).repaint(); @@ -167,7 +169,7 @@ public class Chessboard implements Serializable, Cloneable { public Chessboard clone() { try { Chessboard clone = (Chessboard) super.clone(); - clone.squares = this.squares.clone(); + clone.idGrid = this.idGrid.clone(); clone.sideStacks = this.sideStacks.clone(); return clone; } catch (CloneNotSupportedException e) { diff --git a/src/model/game/Game.java b/src/model/game/Game.java index 935db39..be76dfc 100644 --- a/src/model/game/Game.java +++ b/src/model/game/Game.java @@ -34,7 +34,7 @@ public class Game implements Cloneable{ } public boolean resolveStep(Step step){ - //TODO resolveStep + //TODO resolveStep of every level } @Override diff --git a/src/view/ChessboardCom.java b/src/view/ChessboardCom.java index 1796751..fbb87ad 100644 --- a/src/view/ChessboardCom.java +++ b/src/view/ChessboardCom.java @@ -45,7 +45,7 @@ public class ChessboardCom extends JComponent { for (int j = 0; j < Chessboard.COL_SIZE; j++) { GridPoint gridPoint = new GridPoint(i, j); putChessOnBoard(new SquareCom( - gridPoint, evalPoint(gridPoint), SQUARE_SIZE, spacingLength, true + gridPoint, evalPoint(gridPoint), SQUARE_SIZE, spacingLength, ChessColor.NONE )); } } diff --git a/src/view/SideStackCom.java b/src/view/SideStackCom.java index cd54e5b..3b21c8e 100644 --- a/src/view/SideStackCom.java +++ b/src/view/SideStackCom.java @@ -30,7 +30,7 @@ public class SideStackCom extends JComponent { this.getHeight() * i / SideStack.ROW_SIZE ); SquareCom squareCom = new SquareCom( - new GridPoint(i, j), location, size,size / 12,false); + new GridPoint(i, j), location, size,size / 12, this.chessColor); squareCom.setSideStackColor(this.chessColor); add(squareComs[i][j] = squareCom); squareCom.repaint(); diff --git a/src/view/SquareCom.java b/src/view/SquareCom.java index 5c3dcd5..8bc92e2 100644 --- a/src/view/SquareCom.java +++ b/src/view/SquareCom.java @@ -28,15 +28,15 @@ public class SquareCom extends JComponent { protected static Font DEAD_CHESS_FONT; - private boolean alive; //这个alive决定了该元素是反映chessboard的square,还是SideStack的square + private ChessColor hostGrid; //这个alive决定了该元素是反映chessboard的square,还是SideStack的square private ChessColor sideStackColor; //如果反映SideStack, 指示反映哪个SideStack private GridPoint gridPoint; - public SquareCom(GridPoint gridPoint, Point location, int size, int spacingLength, boolean alive) { + public SquareCom(GridPoint gridPoint, Point location, int size, int spacingLength, ChessColor hostGrid) { this.gridPoint = gridPoint; - this.alive = alive; + this.hostGrid = hostGrid; this.spacingLength = spacingLength; setLayout(null); @@ -69,15 +69,15 @@ public class SquareCom extends JComponent { this.sideStackColor = sideStackColor; } - public boolean isAlive() { - return alive; + public ChessColor getHostGrid() { + return hostGrid; } /** * 根据自身存储的棋盘坐标和存活状态,来获取所反映的Square */ public Square getBackSquare() { - return this.isAlive() ? + return this.getHostGrid() == ChessColor.NONE ? Chessboard.getInstance().getSquareAtPoint(this.gridPoint) : Chessboard.getInstance().getSideStack(this.sideStackColor).getChessAtPoint(this.gridPoint); } @@ -138,7 +138,7 @@ public class SquareCom extends JComponent { super.paintComponents(g); System.out.printf("repaint chess [%d,%d]\n", gridPoint.getX(), gridPoint.getY()); //填方格颜色 - if(this.alive) { + if(this.hostGrid == ChessColor.NONE) { g.setColor(squareColor); g.fillRect(1, 1, this.getWidth() - 2, this.getHeight() - 2); } @@ -157,7 +157,7 @@ public class SquareCom extends JComponent { if (chess.isReversal()) { //绘制棋子文字 g.setColor(chess.getChessColor().getColor()); - Font font = this.alive ? ALIVE_CHESS_FONT : DEAD_CHESS_FONT; + Font font = this.hostGrid == ChessColor.NONE ? ALIVE_CHESS_FONT : DEAD_CHESS_FONT; g.setFont(font); g.drawString(this.deduceChessName(), this.getWidth() / 2 - (int)(font.getSize() / 2 * 0.9), -- GitLab From b247e5acacb95b8e686e59e0be2007b9bf660187 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E5=AE=B6=E8=8D=A3?= <12210105@mail.sustech.edu.cn> Date: Tue, 13 Dec 2022 19:56:24 +0800 Subject: [PATCH 4/4] feat(Backend Interfaces) --- src/controller/AppController.java | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/controller/AppController.java b/src/controller/AppController.java index b7381a6..49cf9bf 100644 --- a/src/controller/AppController.java +++ b/src/controller/AppController.java @@ -8,17 +8,26 @@ import java.nio.file.Path; import java.util.List; /** - * 这个类主要完成由窗体上组件触发的动作。 - * 例如点击button等 - * ChessGameFrame中组件调用本类的对象,在本类中的方法里完成逻辑运算,将运算的结果传递至chessboard中绘制 + * 负责全局工作,切换界面时引导相关Model初始化,也负责读写文存档 */ public class AppController { - private Chessboard chessboard; + + private History savedHistory; + + private Game savedGame; public AppController(Chessboard chessboard) { this.chessboard = chessboard; } + public History getSavedHistory(){ + return savedHistory; + } + + public History getSavedGame(){ + return savedGame; + } + public List loadGameFromFile(String path) { try { List chessData = Files.readAllLines(Path.of(path)); -- GitLab