From 9e163d4f542dd57cfa8a846baf9905fd048519eb Mon Sep 17 00:00:00 2001 From: Zening Li <zeningl@student.unimelb.edu.au> Date: Wed, 26 May 2021 17:48:41 +1000 Subject: [PATCH] v0.7 --- Cribbage/.idea/vcs.xml | 6 ++ Cribbage/cribbage.log | 16 +++++ Cribbage/cribbage.properties | 2 +- .../Cribbage/cribbage/Cribbage$1.class | Bin 812 -> 812 bytes .../cribbage/Cribbage$MyCardValues.class | Bin 1919 -> 1919 bytes .../Cribbage/cribbage/Cribbage$Rank.class | Bin 1794 -> 1794 bytes .../Cribbage/cribbage/Cribbage$Segment.class | Bin 1380 -> 1380 bytes .../Cribbage/cribbage/Cribbage$Suit.class | Bin 1184 -> 1184 bytes .../Cribbage/cribbage/Cribbage.class | Bin 14971 -> 15270 bytes .../Cribbage/cribbage/CribbageHandCards.class | Bin 0 -> 2363 bytes .../Cribbage/cribbage/Fifteens.class | Bin 0 -> 3302 bytes .../production/Cribbage/cribbage/Flush.class | Bin 0 -> 1795 bytes .../Cribbage/cribbage/HandCards.class | Bin 0 -> 304 bytes .../Cribbage/cribbage/IPlayer.class | Bin 1690 -> 1946 bytes .../production/Cribbage/cribbage/Jack.class | Bin 0 -> 1820 bytes .../Cribbage/cribbage/LogGenerator.class | Bin 1296 -> 1965 bytes .../production/Cribbage/cribbage/Pairs.class | Bin 0 -> 1942 bytes .../production/Cribbage/cribbage/Rule.class | Bin 0 -> 423 bytes .../production/Cribbage/cribbage/Runs.class | Bin 0 -> 1559 bytes Cribbage/src/cribbage/Cribbage.java | 62 +++++++++--------- Cribbage/src/cribbage/CribbageHandCards.java | 45 +++++++++++++ Cribbage/src/cribbage/Fifteens.java | 52 +++++++++++++++ Cribbage/src/cribbage/Flush.java | 36 ++++++++++ Cribbage/src/cribbage/HandCards.java | 16 +++++ Cribbage/src/cribbage/IPlayer.java | 4 ++ Cribbage/src/cribbage/Jack.java | 34 ++++++++++ Cribbage/src/cribbage/LogGenerator.java | 33 +++++----- Cribbage/src/cribbage/Pairs.java | 40 +++++++++++ Cribbage/src/cribbage/Rule.java | 13 ++++ Cribbage/src/cribbage/Runs.java | 31 +++++++++ 30 files changed, 340 insertions(+), 50 deletions(-) create mode 100644 Cribbage/.idea/vcs.xml create mode 100644 Cribbage/out/production/Cribbage/cribbage/CribbageHandCards.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/Fifteens.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/Flush.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/HandCards.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/Jack.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/Pairs.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/Rule.class create mode 100644 Cribbage/out/production/Cribbage/cribbage/Runs.class create mode 100644 Cribbage/src/cribbage/CribbageHandCards.java create mode 100644 Cribbage/src/cribbage/Fifteens.java create mode 100644 Cribbage/src/cribbage/Flush.java create mode 100644 Cribbage/src/cribbage/HandCards.java create mode 100644 Cribbage/src/cribbage/Jack.java create mode 100644 Cribbage/src/cribbage/Pairs.java create mode 100644 Cribbage/src/cribbage/Rule.java create mode 100644 Cribbage/src/cribbage/Runs.java diff --git a/Cribbage/.idea/vcs.xml b/Cribbage/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/Cribbage/.idea/vcs.xml @@ -0,0 +1,6 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project version="4"> + <component name="VcsDirectoryMappings"> + <mapping directory="$PROJECT_DIR$/.." vcs="Git" /> + </component> +</project> \ No newline at end of file diff --git a/Cribbage/cribbage.log b/Cribbage/cribbage.log index 9c8820e..bbca904 100644 --- a/Cribbage/cribbage.log +++ b/Cribbage/cribbage.log @@ -6,3 +6,19 @@ deal,P1,[AD,AH,TD,JS,QH,KC] discard,P0,[2C,QC] discard,P1,[JS,KC] starter,8H + + +show,P0,8H+[2H,7C,QD,KH] +score,P0,2,2,fifteen,[7C,8H] +show,P1,8H+[AD,AH,TD,QH] +score,P1,2,2,pair2,[AD,AH] +show,P1,8H+[2C,JS,QC,KC] +score,P1,5,3,run3,[JS,QC,KC] + + +show,P0,8H+[2H,7C,QD,KH] +score,P0,2,2,fifteen,[7C,8H] +show,P1,8H+[AD,AH,TD,QH] +score,P1,7,2,pair2,[AD,AH] +show,P1,8H+[2C,JS,QC,KC] +score,P1,10,3,run3,[JS,QC,KC] diff --git a/Cribbage/cribbage.properties b/Cribbage/cribbage.properties index c9e8635..07cd098 100644 --- a/Cribbage/cribbage.properties +++ b/Cribbage/cribbage.properties @@ -3,7 +3,7 @@ Seed=55510 #Seed=1248 #Seed=30006 #Animate=true -#Animate=false +Animate=false #Player0=cribbage.HumanPlayer Player0=cribbage.RandomPlayer #Player1=cribbage.HumanPlayer diff --git a/Cribbage/out/production/Cribbage/cribbage/Cribbage$1.class b/Cribbage/out/production/Cribbage/cribbage/Cribbage$1.class index a147958a39f3d8d4f821a8a9067d4cd3a3a31377..c7ababb458a852037976b699ea4af0f7e672e206 100644 GIT binary patch delta 13 UcmZ3(wuWuPIVMJ}$>*730V7ca(EtDd delta 13 UcmZ3(wuWuPIVMK!$>*730V7rf(f|Me diff --git a/Cribbage/out/production/Cribbage/cribbage/Cribbage$MyCardValues.class b/Cribbage/out/production/Cribbage/cribbage/Cribbage$MyCardValues.class index fd620cdab36aae8688b2641dad70484ff1e0caa1..ad673df763de4d13b8c8801558a189860e3510ef 100644 GIT binary patch delta 25 hcmey*_n&V=5*wrS<Ycx8M%&4I*n${sC-bux004Gg2mb&7 delta 25 hcmey*_n&V=5*wq<<Ycx8M!U&-*n$}CCiAlw004G>2m$~A diff --git a/Cribbage/out/production/Cribbage/cribbage/Cribbage$Rank.class b/Cribbage/out/production/Cribbage/cribbage/Cribbage$Rank.class index 9b0414c05acf17d1611d7f441ef9cd299f7afef0..b6c942a0d758ef09d80b5c925ed00c14e8393576 100644 GIT binary patch delta 54 zcmZqTYvS85orO_+@(dPzM)AofSUh=U7}ywO8Mqnb7z7#QC(E&}V-(+fmX(c>Rg&Qr KgZShdY+3+Np9}c_ delta 54 zcmZqTYvS85orO_i@(dPzMv2KMSUh=U8Q2))7`Pea83Y*=Cd;v|W0cr@mX(c>Rf^#j KgT&+;Y+3+OgA4)y diff --git a/Cribbage/out/production/Cribbage/cribbage/Cribbage$Segment.class b/Cribbage/out/production/Cribbage/cribbage/Cribbage$Segment.class index 15eaecc4b144ba1962aff3b0f0d9eb0db13d2b88..f41e54cfa506cd10ebc9ff5f807d5070ec43c975 100644 GIT binary patch delta 43 zcmaFD^@M9fDhuPA$!RRTlAjrb7``x=GJIvQVfe=2$nc%Pjo}A_H^a}#JggA_R_qRu delta 43 zcmaFD^@M9fDhuPo$!RRTk}nv97+x}%GQ482VR+5p$nb{2jo~eWH^aNhJggA_P)-gx diff --git a/Cribbage/out/production/Cribbage/cribbage/Cribbage$Suit.class b/Cribbage/out/production/Cribbage/cribbage/Cribbage$Suit.class index e6a85e089e9a8805170c3ac5f5cb24ea0c0b61f3..95cf7eff903ab318d9ee38ef640294946369d21d 100644 GIT binary patch delta 41 xcmZ3$xqx$n3p1neWLIW=M&Ze&%yx{zleaL(FbYo=WJzEZVK8A3o?OPF1pw1y2{Hfx delta 41 xcmZ3$xqx$n3p1n0WLIW=Mv=*-%yx_-leaL(Fp5kTWJzEZWiVk7nOw%A1pw302{-@% diff --git a/Cribbage/out/production/Cribbage/cribbage/Cribbage.class b/Cribbage/out/production/Cribbage/cribbage/Cribbage.class index e2ceda0a8d6876c7363284db3c0881cf5e589609..8cecbea403ee3f3cb6c9e6a242f396b09e7cd981 100644 GIT binary patch delta 7226 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 Q=_eZ}(=Vn!O#c`p0b?pT%m4rY delta 6933 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 diff --git a/Cribbage/out/production/Cribbage/cribbage/CribbageHandCards.class b/Cribbage/out/production/Cribbage/cribbage/CribbageHandCards.class new file mode 100644 index 0000000000000000000000000000000000000000..26e29fc6065d3e179572e4dcf322f321f479036d GIT binary patch literal 2363 zcmX^0Z`VEs1_ld;JT3+%24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3VK<f6=^q{Q@8eP<}cBQY<<Ik70En2~|CI61#4 zm63tblbwN&kwF-2bZJRuj=p12QDUV}W^oA@11|$J$V@>V1|bGvMh4cR(wx*{Mg~zI zEUK+R%0+n?#2CaG8JH7OQWzOTH6RL+Tx_iw1yU!;!ypAx$5xb@n_reH#K6EH!^0rU zAjinSmYAHJT2R8s;IHA6oS~mskW;Fkm7G|VlAf5Gst@vkH7;>Yh;?9Jq?P6+mt^MW z={x7=6_@6w7J=QTz{8-(pv1_)o|a$anwXry$e;jqBMwcFKvm&kPz8l3TR~1@Woi+~ z2kJZw8Vs6@3>=vysYQt;`9+KjVj9Q}@Pvw6b2Df&=&&>B@-XNz=rb}1A;J!(gpq+g zBeB>owW0(Zk5M2UhCB>L491KMEO}sI5t!M?Vad*5%E-VAkL94!oK$WG69#i01`7sD zMh3p*#GK^PoWzpUU`SlEYIu5TdV-W#^Dx*j*fKH*6s0DoW|pObf)$!Dj7bmnFm?ue zMg}3cLy%1449-l?ODrh`B{emq=z%9P8y~nfko&FetQi?tobyvs85#I}GV@aXN^_G^ zi$W5Ua#9%?gnaUo6LZ26i!wocs31#8MrJW1gABqTjO1?3$iSYMk^-`TkwHiUp%Nrw ztr^D1zyeCzAS+Q_!^pq|NueNxj10WRsd*_#zGKNq%u8WpkieB785!7%OA?DpQi~WF zIEzzD0>H_Kk%2|S6J#kLI1eJ3$E>00$;iN1#K^!KT#}fa?VDHt^`ux%Vs27Oq6&%w zR16pyoJfu?EWYOo&Mz%WPIb!!1+o}M@ach)EF*(}Q+|F)aY<2Pfp2O_Mt({$KN~{~ z7eg#V96Lii4?_Y&A|rzmNGYU<%FHXv&ra3%0Xy6`wIneuF}WnasFIO^I~SRE2ATuG zDI2N@VgV>*a#D*`eDd?NOAD+a$p@?~xTGjEFCAF~MPo>1K`MEY5G(QPh30awL!j0= zC+6e?XO^T|3os<(DEGqn*%(r}7&sWxco@PM!UY&S7#Vmx^YT)QoO2S3i&Kl)8L}7| zR58L2TTrkw<S;VG;aAGYzy=9721N!A1||kZ20I331}0ER&cMjvz`(%3#Nf!l04mrR zK!BTphk=2Coq-Wl*Dx?LI599Vcr!3FFfuSOh-z(TVANvX%D}F*n}IiSI|Kh#27!%W zBb*r+7=##D7#JA%7+4s17&saD8AKQa7+e?_7<eF>8C)6M7#J8B8Qd8>pawfJFflMO zFfedwZDA15-o_vjjxY^W=`k>fFmN)6f=v;FsDzrrz`(`e$>7Dn$iT?pjng~{4D%!z zI2oh}nCHV_3w2*012Y3N0|Ns;*nK*?7^E2(wlT<~J5r8;k3k-6r~*Ve+>!hYz6^d~ z@AEVGGx&kSKY$?+YP=oP`)pd$TN#wmO;u)KWl#Z|3h_D{+*CGjY=OKU#1ITMtDAup zY_}E2soNOTe6)8mXfZO(WKh@M$zZ_9aDc(YS1WQ01G|pa76xUlEez~C8O)d&61Fn1 zFaLiH#9za}z`)Fah)4|vX$DOOBL*!7QwD9gJER%J8A2Gmz>#4Ebx|k-0|Pe$(;o&7 zb_VTV3_1c_prj3Tm^(BKId!zOcQRNpGa&rQ1`ZiHu-TB1;{=BnC>?Tw!wZz^IKdIk p#K6oD0ZwX>3{eb_L>0}z%#g&8!jR680ZK#+j0~9!*$lZ1k^lqTAa4Kw literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/Fifteens.class b/Cribbage/out/production/Cribbage/cribbage/Fifteens.class new file mode 100644 index 0000000000000000000000000000000000000000..dc654828575dfd346092433ff70c2b8058cf86b5 GIT binary patch literal 3302 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 literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/Flush.class b/Cribbage/out/production/Cribbage/cribbage/Flush.class new file mode 100644 index 0000000000000000000000000000000000000000..f94ad1b49f6bbbf5a1b422e3a1dc7f7fcff16793 GIT binary patch literal 1795 zcmX^0Z`VEs1_ld;BrXOf24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3Vf<f6=^q{Q@8eYc#_;tWOxmW;%_6h;OKpX3bv z#Dbhs{jB7~qLlQ++*Ey!#Jm)1E(SgZes%@{9tJ@MAw~u<?8+D!nA1~B7#XBBJT<YH z<eXTPVhwVM2oHlOgBT+NdvQr(QAuhMc8kHvxfmoEB-t6Hco?J^WIz_f9PSKds05d0 zf_z(+m{Xcs46<7@+6V4E6jfkf$nh}9Gbk`JNTjEh_?6}+r55?8fov)c&n(G+m?f;? zg9uL7ywY52O;0WcB?e`71{EF#RR%SXJ21itWC$YzdwOaK#1tV7O>|>Ge%Ih(&}7hJ zWMIz8PiJHhM>y3dKixewFSRJKB)`a-gF%OpL8>@8zbI8FKs7}Ng3>^d1!5L+G3YVq zvojd*Fc>lzF)|1u-0PWFl9~<*Qg(2N_@^;4h=HO5LxnXbg9(EvJA)YygE@l*BZDAD zpfNIVz{D6Cgb^-<1*$a{g9(Eb4}&#>4I=|*a$;V7US@J)4kLq(2A0?drz7Mb2`(wh z%uBcCVz6VdXJ>HWVQ^${LP^OG1&j=AY57IDi6x8-mdFtUk+qIS3S>yqx5jFT3xg{= zgBuTnJA(%!gDA{j`pBWq$iPuvlv$GM1Bw|@EOu#zu`_rvGVsE62bJceGBU6@=clAH zGVuFk=A}ZCR7heHNJ7XbKRGccEU_pP#D@y9lw@QUGcpJu!V{batr-~vic*tPGs{vz zAq7fJ#f%KbI71R=2#0~PcVbR*X-;BEYA`4TF*2}fczSAjGBU8{LDD9pCnEz(F*xH$ zAlw0qS8$fHW@O+f$VseBE%HoZWZ+3IEh<XQD}k8@PMM4hyul@j$=SY%1z^9iGsH47 zNaD<Wj0{}C`K3k4scxB|z~KUWTMv{j85wvy^YT)QoO2S3i$R%~1>{TyMFtKACI&_Z zPX;Ci22jDp00N>6Vhjun%nXd6l8=Fr!JC1BL7#z<fsuiMfmLfe1LH;p1_mYu9|i^n zHn1Q!gD(RE0}q(Z%HYS~&%nUI$PmB~2-O_Qz|6qRz`($-rM;DbT}y{~8w2lF24RFT zd=O~{Rt5nEJ_bRsaSBi|h;a-I{9yNi+`!Ku%D@A5cMwA`#0o|O26hHc1_p*!X1g5> z;#Mq@Ec?t@na$Wl*+f|vF%(F$h_V@3v1@H%V3%ay#vp6PA<DtNfFY=bnMG?0gYY&6 zMM?H$44f^@jLR9EH!-LSX>;slV2Wgx-oc<79LXXhn*e68%7Q622*tjM!5C!XHU`V! z9SpYH7@S+!7?=O=mt6x6K2Z4RF>o_5Fo-cQF^DtBGDt9JFi0}!F-S2OGDtJnGRQDE zFvv1EGsrX4GKe!YGbn*QZpXmJpurHz5W*13z`-EPkiZbe5YE63@*Fg585mj_A{au! z;oZs*$q>rG#K6SR%n-!@3h8JD1_nh2mj4X=4D9R-9E^;N><lrCj0_Ba8I0K(Bp81( gSpHyOWnf~614m;#LjnT>0~Z4$g9L*KL!yHu0NU!IKmY&$ literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/HandCards.class b/Cribbage/out/production/Cribbage/cribbage/HandCards.class new file mode 100644 index 0000000000000000000000000000000000000000..5cbf91854a3e1cbf19341e8987edf611c35daa00 GIT binary patch literal 304 zcmX^0Z`VEs1_lcT0d@u^Mh2neqRgbE#Pn2skHowb=ft9vVs-`=Mh1bb#Ii*FoW#6z zegCAa)Z`LI2KL01l%Ud_R7M6N4Ij8RkchQr7$XB$QEF~}St^Ln$iQ2inwJ7Mk&(ez z!zVdIKd~UER6i>@u_z@yF&AQ^H7;?Gk(|Y;B>_2!m8nIH3@jR+AR)fu<ou#kB$Jsn zG(8y^xPtRbi;`2_GC|JcgG=jye8I-Zz{tSN00OKmj0~&{Yz!bDvO{SO22L=ai-8+V U^Dyu-FfcGO@G&qjFfs5008jr(%m4rY literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/IPlayer.class b/Cribbage/out/production/Cribbage/cribbage/IPlayer.class index 0333e8d97086a0e9f30cbe899a0e3119540e16ea..5bf30b3e1009af0db7502e9bd2428d1574558ba9 100644 GIT binary patch delta 1090 zcmbQmJBy#|)W2Q(7#J8V7}6(lB?|K}GO!jW=NF}NGH@^m@-PT72v5vWV-w|J5MvOZ zI75Y7l0k}{L7Im_hCz1XacvGs26-L^RtAO14ou>c`<YpJG{d+UBpH-=7?c@QCMz*& zajP+?vomP$FlaJpO%7)?=TKwN;bG8a(3?DsQH|Sx!H}K7h=;+LL3Z+SMnzEr22&me zGX^b229~_kiV}7P3q}U9$rqW$c)1v?7_8YDY<L)K8SEx2Fga+MGdS=tI5IdfGVm3p z=H{2Bx)tT;dL-thFfy=cL_yr)!o%Ro;5NC7Nr%mYhryG<Yw{i@T@FbGACS23<c~~M zO04OrC7vma49psuo{S6}#i=F1ApbKmaHK<-lQWrL*RwD%FmN;QFo1v%gD{8!1qqnu z2a9ttFfy<*urV+)_%Sdr=rb@fFfuSOuxf2*VBE;Sz`(@d&%gkdW?*1v2w-4f;DIP$ z2xJHX8xzbB0@ZBCz{J1=QmrMum4O|kyB?yQ3oOjXz{<c6HbM-{XM-ET26iLJ=1_(( zs9^|~Y++zugXR(eura7EVPpu0yTl6Wl6p3fQ+Pp6fw%<ZPX-1-uy#yWfI<Z1iU_Q( z;6-<Z5ZD-0S1>R{GDJbW;K@+W#J~)S0WIyV3<6p@TNy;qogxf2Ljj@;9w6MH6bue$ zZg6xlu`n=1GkAf+JBC3PYQ7OPvN*K1Fo<kpkU)2zC__CW!Z;v?voL_t6WE|whB&A} zj~SR5SQ!`?Vs<k~Mrv(g5ZKNj=L<1ZaT|l`0S2{g4BCFWI~nvD8D=tQ=<Z}NVPrVK zU~a`C$+CmNQhEu4pd<^+HU@hgNfzd949?-p|6kSG#^CN(4>ClDWgCNcxb6l91_owu zYEon1WME*BWZ+?tVlZToX0T$AVQ^rOWAI>*X7FZEWC&nTVu)f;28WCZ11p0egE&Jx zLjnURF~>l>0dg!uA~-GbFa$6pF^DrTF$6I1FeEc1FfcQuFfcIiGcf-ZV~}NMkYr~t Q(E7!|#K6dq3Qk990Pm58iU0rr delta 813 zcmbQmKZ}>^)W2Q(7#J8V7!oFOB{B+3tW#qX;$aYG5Sh42g<Fh4oSi{}he47-YT`|8 zZZQTK9tKthSw;rw$s3s^c{Ibg7{nOlc^DKJ6epW7YH=$wsIW7r@-V0|s87yhH0Mxe z(BxszV$hzvf>DiImqCx6L7#`gfI({VO-4l_T?Qi_24e<wMh2F=)QS>z2GhwrOw!!u z3>NGRmOKnr4Azs4m>f7v7;JeM>=^7PS20O(h%q?wFgP(dPoBf1!{*Av;KtxS`5coj zw-|#bNZgB&L1ywsW|7HK%*m4%GQX^6W?*38X5e7}0e%Jn5C!rZ0|Ns)10w?~0~-S) zgEs>MgFXWz10w?i1FP0{2F8sH3=B*RJ`4<CX^>K11_lNmhyn&b27j<I0Stjq&2|h- z3``)^TGCq?*b%z980ta7ybP=id<-BX#30JxMzDe12C_GZAsA|yCj%1$*wtFvTN!w@ zbha`GB1{B1mw|yFY?uN>8Qd^#29O6qhH-<v$i%|HP#?nJ4t8uPgA~+!BdAX~w6-t^ zZetK#gXUR5u;CETazG4cVE~0Q*qktiaHu(t8JHPZ85kI1b~A`YYHeZQ-OeEG3o%n} z8-vmT2IXxG8ufm<I~jBs8D=tQ=<Z}NWMnwNU}D80$+CmNOnM1}pd<^+HU=9VNfzd9 z3=ZMT|6kSG#^B-yGDL@E8-qu<?gj=124-+fs4;LdFffQR@Gyum7&3@6STRU2I50>t zcrb`Fcr(Z{1Te@kL@~&N9dE+G3RV-r;1$Wh0&*k7A7EA#I3jr%0vMthL>QPD0vLE0 kVi+PBm>FUjKtap=mqC`DL5!V2SL+u869Xed95{gD0j<YnDgXcg diff --git a/Cribbage/out/production/Cribbage/cribbage/Jack.class b/Cribbage/out/production/Cribbage/cribbage/Jack.class new file mode 100644 index 0000000000000000000000000000000000000000..abe4dad483fb43696ebb2227a7304174a698edab GIT binary patch literal 1820 zcmX^0Z`VEs1_ld;LM{d-24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3V<<f6=^q{Q@8eXqpiY(@r_jKsVYMg|F=<P819 zf}B$QtmMR^l=Q^hRDF-cycBCL20jLUb_M|+20;cPMg}qL$`~1#(^E?r8KgBlHL;lF zoLH1%4RVMG4}&O!7$XCFaY<rPNoo;xi^0l47EACjNHRz<GH|D-mVg9(GK)(X8N@X- zeZZbBEy>K$cPuJOtOQ9|b1}#;$g(rY@i53UC@?YzV^PD%z>!&!T9jClU&P2DhGLE< zRNR`IL5V?`ok4|%L6t#`kwFMy3`_|l1A9hdv0rLM2{?$OKsq#d7&IBQ7#Uddz``Oh zvymdknw>!hYY2k8#>Jq`pvS|Y&tSmFz@DC35|o&i&B!2xVvK8EX|6RpgAvFOSS&h2 z87d$RoD7BxCOizL3}%cBtocPLpa5p{1Q~6?!(ho^#mK;!o>~%InpxtR0(QD5C{k>A z7;G6psU;^rosmJ@2cANF^3&Z@^B}=x&B5Tn$RJ*voL`ix6QG)+13_7d$=N!p#as+d z49@HfE<6mb3~r1Jg5WR%d)+gyBsCr64)(IdoYGYPG*GyELL(4ag*7LG2ZJX&gBK5j zH-ir&gCN`)FfTGPaKOYE8H5qegvncTF?cZe@i6!^1TZpiCMV|Q=Vc}*<}fnoXy8hd z$nFR(Day=Cx8`C9VhCnu2;pG}We7vbUJwP03~XunMY)M3j0~0<kaP(421M368c7I} zAFZ)k62TD3&Je}J5X}(7$RG;ymp*ckGcs_L7iE^D`hcQE6pLM&VeAZX$XPn5G$)mj zfyFsLC6$qZ-zPIK)vq)+DYYmhF$p9g<ddJAm=l&*lnLTP1zAcmGK)c~;cfsG4AzVc z0!69GshMS|pke@&LW>z0jIjkINZuMt0E5Lf!x$O(k`r^1OLG!SQiDOMhmnC*!_!mK zlaYZjnUR5`ASbahwFs0Rd6G+uic<4RV5-1rjgf&jxFj(-+c&WQ>R_(m{L-T2RJTl! zmpDO=)dM9rMg|_wyu8#R=bXgi;?!bB1{P3`U{GY>U|?ckWQb*8VqgFjfeauZ${@zT zz`)GF2r5Gv7#ZRj7#Q>!7#SED7#LW!wlgqpWME)mVn|?MU|<6a@-QSaFfj0d*{lpn z49N@(42%pZ45?7fp$yCn%nS?+{94*u8Q8USn71+TZe<Wg7{dpa7GPjy5MtnC5C$8k z02bqi8ppuE4|X5O4g3tE3_M_Wr!k~Mt@zKt&cMdNz)-_%r?rKFeH(-LHU?=c7D<+! z42p~lGZ|7rEOkbP0}R?$tdgwT7<3OX7;a%O7T{jM;0EHGYi(f=-o{|QfWf?lnQ;?? zwU9mgUIwN}X6YRaj=_;EGO`I^2CFQXV%x;v4$|fuyn`Wd8$<Z=|I=mHfI|%wEJ_R< z3=9n73``6X3@Qwg3?>Xx49*PF3~mfE4CM^+3{?yYU_Y8LurjDH1T$nXh%vB&To3nc z4MQe_88|>|7_u157?>EC7^)bu8O#`%8FD~D$-w-Vfsc`$LFqR`#xJmRE;v^581fky Q7`PZ184MXb7z!LD0f`i<vH$=8 literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/LogGenerator.class b/Cribbage/out/production/Cribbage/cribbage/LogGenerator.class index cc7d45b71d7f8103957aa6174f635d01805be96e..fd9aa818ead1769b63a2f8f5aaf12b5156dd4389 100644 GIT binary patch literal 1965 zcmX^0Z`VEs1_ld;bS?%a24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00S4h9ZJ2A<@i%%r5m^i;i^{B(8(E);FSB}JKe>D&xF47}_Nd^`;N3<8V{ zLSSR_GV}G*GILV(0}@Lz7#W!I(-;}7HGIHwU@IYdt)nr8G$BGLCRlSa2r&q=Gl=jo zh%$&VGKj*QrSFrU?w*>LT9jClU&P4339>UjFEKZjkwFBTIa~}943g{&QalXO3^I%i z!e9r%t#ZrENiAk%;7du(Ni9kBOmnTsEG{W#WDtkC9Ig=LD{IXtb_O|^8JYR|p8l>C z$*Bb;nfZB~3<?a2><mgg49W~Ds9{!FT#}m0$iSRhRK&<23UOm*zJ5SaW?o5fNl|KI zt~D2f8iP7Jg9Z<SCW97|1xRWb8Q2RzI&$(D8APG31BWXlDy=ocKq02X!=THc$H>5( zlb_DWAnt=T)U1UV7#IwA7z`PV7#YNK6SGsD^YfAuOTsftGMw}Cic1pnKw+SUYzs8@ zpiu?37%IfYz{z03!(hr_#>l{to?7BmSpo`D77fj4Cw2x4Mg|GgAonjw&GUzbnH7UI zJA(}mgDry{BZC5}y5N$;yp+VE6oh(41~%s)SH}=nMg}EFFv6n;Q?WHCgB61V4}&Af zXg0@y09QX3P+D;2VQ^t^Wn^G2FUl-QWn^%N`VwvwIHseWpy?DYjBtiEG!WoYU>#fx zLJZ7|3@pz1DXEMM{63j^seYxoNvTC4iAg!Bj0{3P`N@enVTnbVAU;%(F%>yQASEYj zMh2FWjLc$22HxP3#N=$>!~&=mw)E5zA5i2<YG~q!UPcBEu;;+aP|^xC$~40m8JLSp zia@Rc2Rd?mGBPk0Gcs`4B<Dbj2Cm@z(xT*4P*!1N5Jb*?dLYe=3<6I1`6b0AMTrHz zsU;ctDaHJ33{hMR(F`%{46&eO7RSh-0#XVodouIN^0QO*A#Q=BJh#N;lKi4dMur*C z*Z?~Sst{tRM`B(|PHM4=Pkw%OX@NB){=v#11|f@}Xbh<=NJW-}Du>1|*aTP>LNXL; zgmYp}PH<*Psx=2g0wV(xBNrnBk7r(9YLRnJVsUY5F*`#tBZDf2->^BEogtNxK@PuC zMg}&B{}>b*gcz6@7#Nrsq(C{Efq_8?R1h*SFt9K%fr@hmMh15V28MP9X0SR{t?dkq zT0-p1dl@))FmP{W5Y*bjAh?4;JbXC=x6dX9dF^cssv8*?83Y+58Dtn_8JHP77#JAD z7+4t?7<d_27`Pb(8Tc6_83Y(q7z7zS!E#ItvJC7DUJTw0j0_A6sti61dJGH<z6=Zu z0t`(58Dtn3*%^dDge*G)Cxah@Kh#k&VD$_PESng#H!v_TFoNx31B;3<Ffs%%1VU9V zXJBJsVPIg;*WSgT&%odda<tAi24mK}4Cax{n;0yEBUv^v*az=mZ~}S6Zxe&OF4QCJ z49W~@aE}OqjgeqrXOLo0W{_skV~_!RLW_ZgK^^J|W{^ctPcSg(GXyaNGcYo+GiWe` zFa$F&fjuS$@|YT^))ZoA-~@S#k)1)7oq>ZPlmX-cP?#%&L!5zudpCnn<aP$P%?#Qb t(R|6pz|0T^j=pe)2nGfQ4hBYsNCrlRc!op<1_mw$MusGY6oxbgNdSHV;o1NI literal 1296 zcmX^0Z`VEs1_lcTUoHkF24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00S4h9ZJ2A<@i%%r5m^i;i^{B%wRE(UIP1|A*;UIso!22q%tzE6I-dum>4 zQDRAc5hDXfL1IaUUt(@5BZH6+!jj;UqRhN>Yjy?!Mg|_RaAv-~TV_rw7Xv?o5Xe!& zj0~b0m^w7WKq^Fe7{nOF85!78D>92qiotG-0!c{nFi3$VQc`nLOTebd@G!`Ngm{yS zQWHy3{Zh+8_OLU^GcpK+Z3g?=wIVsSpd>RtkBdQ$L6L_+2^1>)1x1;8CBY?$$=M-A ziOH$#3@VHaLSRi$=Y|($mZTPOF(@;rfgG*Q$RLKr(NUUV><pTW3}P^?PNivSsYR(N zFzp%)+92&Zj10n1?V0)d5J_v0k2M(dco_5<gc%uF%Rx4BF=#Lt@-P^I9Lb)STJDpX zmkJUy;bAZZiLoZ<<QJ#1Gnm8tn3=Ed>5t?`GX_OQ1{UZ1lvG9revodz(%hufqL9R- z9B@qKCnx5FB^G6Z_)tNXl8nq^Mh0;otTAoP$iSZtiS|^V{B%$dGcvHGWrB?3gG3`V z$gCL|7*iP;L?MExfp5*ozzYs;-^2o_wH#m%`{buHGH`*6gM<nrg9t=F)KG}1H6sIG z5=ziAGDyJHp$57&+zF^*W6j9GTwGGb$iNkxUs{x$3h{{`a;nw?MI(bE11JwMFfcMO zfU*Ds0|PSyBPcg9Ffv#&Ffdp$FoET`wYD=bY6-D#W#HV%z`(%7V8y@y)yl!Z!obB~ z&A`CG15wIg!(ht*GSZHL4Qk9x24)5(1_lPr-3<JZT3Z-6w=)R(Xm4W>naRMdy^TR4 zd^rP$_BIA-5DgMn*a$XCfkBx;j)56$nG^#X0|Nse0}lf~gD`^tgEWH>g93vHg9d{r z*m4C1W(FPx5e9n(2L?t46$TatM+PUbDVk6RIWsUY2r#hxVUT8L;Qz(I;>6A%$HKtK z;KCpbb>?aY76uju1_qto49Z|<vTSEi_1(>&5vjACLCa59dmDqU?luMk-E9oU%NaO) zb+$2BKwPTKpvGVZb*UT!I|BoQBm*yl6oVLpG=nsQ41+v_EZ8sF4Dw*tnlP|3@G^)o zxH7mgFfoWR@G`hFcrY+CsDs_@2@WhBsJj^$bQruC_!t-&Kt5n+U`k_WFatT<8ypip E0NFka4FCWD diff --git a/Cribbage/out/production/Cribbage/cribbage/Pairs.class b/Cribbage/out/production/Cribbage/cribbage/Pairs.class new file mode 100644 index 0000000000000000000000000000000000000000..ac63c6a5a98e123e9be0b2e588ac15b23c4d70dc GIT binary patch literal 1942 zcmX^0Z`VEs1_ld;I4%Yz24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3Vf<f6=^q{Q@8{eZ;GqGCn{mW;%_6h;OKpX3bv z#Dbhs{jB7~qLlQ++*Ey!#Jm)1E(SgZes%@{9tJ@MAw~u<?8+D!*fR5qQ;SL%8DunY z85N}&1u{*9he4D<jFEvSwW6dbF}Vcl5NQp~Xk0o$o{->SkYtczWMIz8PiJHh_knxF zCqLaiH7~U&u_V99nu9@xkwKz3Ilm}XCqOkt2Z9O`GmDILRExP7<QU}H85DRJ6d9Bl z83Ykw=b2ZMnx0z3$iQBfm{XeSpT@`_rs1jSgQ3EjlR<?+m7PJ2he4e|gONcH?ha>Y z$TBi;z{D6Cgc0t9$y;+Vs4!^pFlaOAFfwo^C+6knWhN))Ff!=i3^`<X1eX+L=A~P6 zG3YVqvojd*Fc>lzp(F!{0!9Y5wEUvn#1cjZOARD%KxD0>k%S=W#u}?7CJd(R3}!qG z<_s2$45Bc9=_7|ZBLhcyQD#Z14=7$lvDl><28wno9tLaVXb&mMEGXt+u*DHw#^C7U zW3cC8a6r};Selqp%)#J<Lz{_?YB4*53nK$B+^s>SIjM{cEYA5Usf-N#KACx`ex<od zsYM})NgxR!pZw&+oUp{AOb{O`$WoG#S<J{FfQUVCDz#>05GYDbPR%S!1!WHB#G;g9 zMh0V?@rElsYlbm0uossk7L|aK9A9!`PI75ZVo7Q+DBUtLuxfaEYI-s<uz=DnBLhoG zQDy-n1506PVhSSzM?p?vWonUU3L^ufCnEz-a%oXfYF-IUD>&&hGO&WQ7BezP;>=Tw z46Gn?iy0YMK?WByGVlhMBqnG3CKiALft?|ok%22XzqBYh)h!bgQe5CL&;w-&21N!A z1||kZ24@CF1_n^k!oa}5%)kgLlNcBoTp1V`^cfhza;#e085lP*FfcGNxG^v=uz>}+ z7~B~c7<j;JRt66SPX-1CMg}hiZ>Z)l24)6k1_lNJE$yug>{?qG*man<G4O^X%;5ve z^D(e8@H6l;2!PE~0E-Dg&0}B?06PriKmi6H1|G13eHr{9b}(5murqKoFfd9p+kq_D z#vp9PBFSRKD#^OfjE&ihU6fsvZ4rZuB&#U9krhV^Gt(vpaUp5;y$no|%+fm;WP>AF zWMmV-3|3h%#kPq-S(0NLgJ$p!2HkB8#x3lO%m43&7;XtN*osY(ZJ!xCvl)jdhbTM9 za5hm6BP-4pW;T%FHUtglL^7NMVYnU0U@LY>_I+j?%x0XToT3~c!`VeSjjXs@n0Y{k zI}$XU3(0U!km0gxz_AL7Ha7-A1_lNZ1||kk25ts122}=e1`P%YhDZi6hIj^Ph71N7 zh9(AChE@hShHVTo40{+98ICe2G2CZRW_ZM)!YIt3#3;$229BmQ1}+9w1``H<1|9|u zh9(9Rh5!a022O_i3?>YL3_J{6ph$s5BBL}z5JNC1p)g7_gfIj%FflMON-~5p1T!!* za5D-pgfWCOurOpWY-WgH2xnkrILZ*l5XlhEz{U{8z`zj9!1kX(oPmR#frF8ek)0u$ kogtc$k%8d{gZqC55m3#D5J#2bLe_$!k%5sR2ArN_0k|`-8UO$Q literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/Rule.class b/Cribbage/out/production/Cribbage/cribbage/Rule.class new file mode 100644 index 0000000000000000000000000000000000000000..2b5ad62c54a6cb39677de9f54535ddc50493be74 GIT binary patch literal 423 zcmX^0Z`VEs1_lcTNiGH^24;2!79Ivx1~x_p(d44cq@=|3RDGZPbobP})S|?a{31pM zw)E5zpZs)221yM~AFOJuIT<(@IN2Gvco?`Dco-RY;i`g4b5a=@m~%kd#c^n6XW(OG z5Xed_OVrOv%uCnzPs&P7E@5O4C`wIE%`8jxNX$!dPAp0(W@Iqd@JY_lPb|nO)z3;! zEJ{gF%uUq?$y?(R*9>E1;7d--NiNMvEJ+Pc&M!)3WMI|s^wjiZWZ<w#&dJQnEU{x` zVAcSsWO2?<No8c<_sPsl^()OyN-YXWOal3UD>%QjC^^+F6U5;J`AQGuU^Yeu4hCKZ z1_nk3Ns!kW7#NsY7#a8(1Q-}t7#Rc^gcukYI2eQ(L>L$uL>U+u<QW(lK!AM*1LI}} a_KjezVhjunY+wma21W*P1_lNu1_=Q4-(rFQ literal 0 HcmV?d00001 diff --git a/Cribbage/out/production/Cribbage/cribbage/Runs.class b/Cribbage/out/production/Cribbage/cribbage/Runs.class new file mode 100644 index 0000000000000000000000000000000000000000..1a0733a9f6dfc7184a93b5e90f3937cd2001d164 GIT binary patch literal 1559 zcmX^0Z`VEs1_ld;KrRL*24;2!79Ivx1~x_pfvm)`ME#t^ymWp4q^#8B5=I6#o6Nk- z5<5l)W)00SP6iGJPId+^9tLg(9!3V<<f6=^q{Q@8{h-pkVnzm*jKsVYMg|F=<P819 zf}B$QtmMR^l=Q^hRDF-cycBCL20jLUb_M|+20;cPMg}qL$`~2gGV_X4i%J+7WHfLY z6{Q&kGEIbsL6kv^kwGA}qNFG>xg<EXurxI<Ikgz1*HbeZmv)dxBzPDk8Kf8)m~-;e z85zWV;GXfxPj^qvOD#$)$uF|zV31*CkSI>hFG|%3P)*T+prX<|5TlrjL5@M5ok4+z zL6Jd;kwFj<ex7+Hsp+Xjj125$i8-aI{%MR1Vj7;BJ{T&jIT=(KRM{ESco@_fG#D8K z;qGvThAtxm2TY8SK^Wmqn7lO?g9?Kd4}&&?4kH6+a$;V7US@J)4kLpO&fr6KM{r3| zW?s5A7lR&yK0AW}4}&3t5lT{kC}3n@OUp0HO)Oz#u+%{E21M368c7I}cC4{lV!~j` z&S1vFV9sE{$RG;ymp*csGcs_L7iE^D`hem^6pLM&VeAZ6sL3xUm63tPIX@+pk%8YQ zGcVPzG&d==C?qinBq8LJpPZNzmROVt;zI>lN-{EwL8{?y03~8;Mh1bR)a2C6vQ$u# zbxtfwDQ09a#u<>f5}0NfBLjPJNn%k6C=Ku>C*~xV<|LM+27?k3BLl03r>CYTBLj0$ zX&xg3OA$ExNa9Scj0}vKj0}vPj0_wFIf<32MV={)3_QuDMMbH3B`_nwX_S$HH@GA* zIomg}0PIh826sjVuHgLAqU2P!Oi*BOg1o5*N`?%I3>*wh42%qx42%p6pe)V6z`)GF z2r3I07#XY?7#Q>!7{PL^TH6^IH!?6VFfrILFfg!z1vwdP85kINz-(3qI|h3O1_nk3 z2L?x|<}e0k24)5Z1_3SYtqkm1TNv1Nn71+Th9k`31IzO=u!0H(27a)43Scn-sCf(w z0$_)M94Nrx#J~e~urq@T#12MB26hH61_p*^W;-@B7Eu-fwnYpTAge@KwlN4>u}ZS; zo5zqS$!f(W$+pjoo!N{-ltYw#5rdy3n<$5o6{oByOM=}d25}*2j=c;_k<8LN7-WMZ zS!84rzzkMdFvTXy0;btFF(^xNZe!34-oc=|jlsBugK_!)jV&yU%m25_t^tQ0D0sBM zP7-EdVh~{f6;R>~Vhpkj;tb{t5)3vBk_@E`;tbUcA`FcTvS2TJFt9V2GuSb>GVm~P zGKe#zFt{<eGq5tSGSo15FnBVsfIJ8fkY)xi22XIHH#2xMcrq|CFflYT_%L`fFf;fv zFfiybu>56UWn}!%pbRRkIT#rk8QB^9*ctp785tP<GXyfQvNM2185n*sure?*_=6)h F001xzTs;5) literal 0 HcmV?d00001 diff --git a/Cribbage/src/cribbage/Cribbage.java b/Cribbage/src/cribbage/Cribbage.java index 874ec0d..bc3d9cd 100644 --- a/Cribbage/src/cribbage/Cribbage.java +++ b/Cribbage/src/cribbage/Cribbage.java @@ -4,7 +4,6 @@ package cribbage; import ch.aplu.jcardgame.*; import ch.aplu.jgamegrid.*; -import observer.*; import java.awt.Color; import java.awt.Font; @@ -129,17 +128,20 @@ public class Cribbage extends CardGame { private Hand starter; private Hand crib; + private Hand[] handsCopy = {new Hand(deck), new Hand(deck)}; + public static void setStatus(String string) { cribbage.setStatusText(string); } static private final IPlayer[] players = new IPlayer[nPlayers]; private final int[] scores = new int[nPlayers]; -static private final LogGenerator logGenerator = new LogGenerator(); +static LogGenerator log = LogGenerator.getLog(); private final String[] playerName = {"P0", "P1"}; final Font normalFont = new Font("Serif", Font.BOLD, 24); final Font bigFont = new Font("Serif", Font.BOLD, 36); + private void initScore() { for (int i = 0; i < nPlayers; i++) { scores[i] = 0; @@ -178,8 +180,8 @@ private void deal(Hand pack, Hand[] hands) { } layouts[0].setStepDelay(0); //log - logGenerator.writeLog("deal,P0," + canonical(players[0].hand)); - logGenerator.writeLog("deal,P1," + canonical(players[1].hand)); + log.writeLog("deal,P0," + canonical(players[0].hand)); + log.writeLog("deal,P1," + canonical(players[1].hand)); } private void discardToCrib() { @@ -189,6 +191,7 @@ private void discardToCrib() { crib.setView(this, layout); // crib.setTargetArea(cribTarget); crib.draw(); + Hand dPlayer = new Hand(deck); //discarded cards. for (IPlayer player: players) { for (int i = 0; i < nDiscards; i++) { @@ -198,10 +201,18 @@ private void discardToCrib() { dPlayer.insert(crib.get(crib.getNumberOfCards()-2), false); dPlayer.sort(Hand.SortType.POINTPRIORITY, false); crib.sort(Hand.SortType.POINTPRIORITY, true); + //log - logGenerator.writeLog("discard," + playerName[player.id] + "," + canonical(dPlayer)); + log.writeLog("discard," + playerName[player.id] + "," + canonical(dPlayer)); dPlayer.removeAll(false); } + + for (Card c : hands[0].getCardList()){ + handsCopy[0].insert(c.clone(), false); + } + for (Card c : hands[1].getCardList()){ + handsCopy[1].insert(c.clone(), false); + } } private void starter(Hand pack) { @@ -212,7 +223,7 @@ private void starter(Hand pack) { starter.draw(); Card dealt = randomCard(pack); dealt.setVerso(false); - logGenerator.writeLog("starter," + canonical(dealt)); + log.writeLog("starter," + canonical(dealt)); transfer(dealt, starter); } @@ -238,9 +249,9 @@ class Segment { } } + private void play() { final int thirtyone = 31; - final int fifteen = 15; List<Hand> segments = new ArrayList<>(); int currentPlayer = 0; // Player 1 is dealer Segment s = new Segment(); @@ -252,8 +263,6 @@ private void play() { if (s.go) { // Another "go" after previous one with no intervening cards // lastPlayer gets 1 point for a "go" - scores[s.lastPlayer] += 1; - updateScore(s.lastPlayer); s.newSegment = true; } else { // currentPlayer says "go" @@ -263,23 +272,12 @@ private void play() { } else { s.lastPlayer = currentPlayer; // last Player to play a card in this segment transfer(nextCard, s.segment); - // lastPlayer gets 1 point for place the last card. - if ((players[0].emptyHand() && players[1].emptyHand())){ - scores[s.lastPlayer] += 1; - updateScore(s.lastPlayer); - } if (total(s.segment) == thirtyone) { // lastPlayer gets 2 points for a 31 - scores[s.lastPlayer] += 2; - updateScore(s.lastPlayer); s.newSegment = true; currentPlayer = (currentPlayer+1) % 2; } else { // if total(segment) == 15, lastPlayer gets 2 points for a 15 - if (total(s.segment) == fifteen){ - scores[s.lastPlayer] += 2; - updateScore(s.lastPlayer); - } if (!s.go) { // if it is "go" then same player gets another turn currentPlayer = (currentPlayer+1) % 2; } @@ -294,21 +292,24 @@ private void play() { void showHandsCrib() { // score player 0 (non dealer) + log.writeLog(String.format("show,P0,%s+%s", canonical(starter.getLast()), canonical(handsCopy[0]))); HandCards p0HandCards = new CribbageHandCards(); + p0HandCards.setPlayer(0); modifySubject(p0HandCards); - p0HandCards.sendHandCards(players[0].hand, starter); + p0HandCards.sendHandCards(handsCopy[0], starter); scores[0] += p0HandCards.scoreHandCards(); updateScore(0); // score player 1 (dealer) + log.writeLog(String.format("show,P1,%s+%s", canonical(starter.getLast()), canonical(handsCopy[1]))); HandCards p1HandCards = new CribbageHandCards(); + p1HandCards.setPlayer(1); modifySubject(p1HandCards); - p1HandCards.sendHandCards(players[1].hand, starter); - scores[1] += p1HandCards.scoreHandCards(); + p1HandCards.sendHandCards(handsCopy[1], starter); + p1HandCards.scoreHandCards(); // score crib (for dealer) - HandCards cribHandCards = new CribbageHandCards(); - modifySubject(cribHandCards); - cribHandCards.sendHandCards(crib, starter); - scores[1] += cribHandCards.scoreHandCards(); + log.writeLog(String.format("show,P1,%s+%s", canonical(starter.getLast()), canonical(crib))); + p1HandCards.sendHandCards(crib, starter); + scores[1] += p1HandCards.scoreHandCards(); updateScore(1); } @@ -395,10 +396,9 @@ public Cribbage() // End properties //log - logGenerator.generateLogFile(); - logGenerator.writeLog("seed," + SEED); - logGenerator.writeLog(cribbageProperties.getProperty("Player0") + ",P0"); - logGenerator.writeLog(cribbageProperties.getProperty("Player1") + ",P1"); + log.writeLog("seed," + SEED); + log.writeLog(cribbageProperties.getProperty("Player0") + ",P0"); + log.writeLog(cribbageProperties.getProperty("Player1") + ",P1"); new Cribbage(); } diff --git a/Cribbage/src/cribbage/CribbageHandCards.java b/Cribbage/src/cribbage/CribbageHandCards.java new file mode 100644 index 0000000..e8e6301 --- /dev/null +++ b/Cribbage/src/cribbage/CribbageHandCards.java @@ -0,0 +1,45 @@ +package cribbage; + +import ch.aplu.jcardgame.Hand; + +import java.util.ArrayList; + +public class CribbageHandCards implements HandCards{ + + private ArrayList<Rule> rules; + + int player; + int score = 0; + + public CribbageHandCards(){ + rules = new ArrayList<Rule>(); + } + + @Override + public void addRule(Rule rule){ + rules.add(rule); + } + + @Override + public void removeRule(Rule rule){ + rules.remove(rule); + } + + @Override + public void sendHandCards(Hand hand, Hand starter){ + rules.forEach((rule) -> rule.receiveHandCards(hand, starter)); + } + + @Override + public void setPlayer(int player){ + this.player = player; + } + + @Override + public int scoreHandCards() { + for(Rule r : rules){ + score += r.calculateScore(player, score); + } + return score; + } +} diff --git a/Cribbage/src/cribbage/Fifteens.java b/Cribbage/src/cribbage/Fifteens.java new file mode 100644 index 0000000..3efe55c --- /dev/null +++ b/Cribbage/src/cribbage/Fifteens.java @@ -0,0 +1,52 @@ +package cribbage; + +import ch.aplu.jcardgame.Card; +import ch.aplu.jcardgame.Hand; + +import java.util.ArrayList; + +public class Fifteens implements Rule{ + + Hand hand; + + public Fifteens(){} + + @Override + public void receiveHandCards(Hand hand, Hand starter){ + this.hand = hand; + this.hand.insert(starter, false); + } + + + @Override + public int calculateScore(int playerId, int currentScore){ + int score; + ArrayList<Integer> cardValues = new ArrayList<>(); //An array list that contains all card values. + //Add values to the array list. + for (Card c: hand.getCardList()){ + cardValues.add(((Cribbage.Rank) c.getRank()).value); + } + //Choose N numbers from a list, the sum of them should be 15. + score = search(cardValues, playerId, currentScore); + return score; + } + + private int search(ArrayList<Integer> cardValues, int playerId, int currentScore){ + int len = cardValues.size(), bit = 1 << len, score = 0, goal = 15; + for(int i=1; i<bit; i++){ + int sum = 0; + Hand fifteen = new Hand(hand.getFirst().getDeck()); + for (int j=0; j < len; j++){ + if((i & 1 << j) != 0){ + fifteen.insert(hand.get(j).getCardNumber(), false); + sum += cardValues.get(j); + } + } + if (sum == goal){ + log.writeLog(String.format("score,P%d,%d,%d,fifteen,%s", playerId, currentScore + 2, 2, Cribbage.cribbage.canonical(fifteen))); + score += 2; + } + } + return score; + } +} diff --git a/Cribbage/src/cribbage/Flush.java b/Cribbage/src/cribbage/Flush.java new file mode 100644 index 0000000..9e764c0 --- /dev/null +++ b/Cribbage/src/cribbage/Flush.java @@ -0,0 +1,36 @@ +package cribbage; + +import ch.aplu.jcardgame.Card; +import ch.aplu.jcardgame.Hand; + +public class Flush implements Rule{ + + Hand hand; + Card starter; + + public Flush(){} + + @Override + public void receiveHandCards(Hand hand, Hand starter){ + this.hand = hand; + this.starter = starter.get(0); + } + + + + public int calculateScore(int playerId, int currentScore){ + int score = 0; + for (Cribbage.Suit suit : Cribbage.Suit.values()){ + int nSuit = hand.getNumberOfCardsWithSuit(suit); + if (nSuit == 4){ + score += 4; + if (starter.getSuit() == suit){ + score += 1; + break; + } + log.writeLog(String.format("score,P%d,%d,%d,flush%d,%s", playerId, currentScore + score, score, score, Cribbage.cribbage.canonical(hand))); + } + } + return score; + } +} diff --git a/Cribbage/src/cribbage/HandCards.java b/Cribbage/src/cribbage/HandCards.java new file mode 100644 index 0000000..31360d3 --- /dev/null +++ b/Cribbage/src/cribbage/HandCards.java @@ -0,0 +1,16 @@ +package cribbage; + +import ch.aplu.jcardgame.Hand; + +public interface HandCards { + + void addRule(Rule rule); + + void removeRule(Rule rule); + + void sendHandCards(Hand hand, Hand starter); + + void setPlayer(int player); + + int scoreHandCards(); +} diff --git a/Cribbage/src/cribbage/IPlayer.java b/Cribbage/src/cribbage/IPlayer.java index 05eb568..765aba2 100644 --- a/Cribbage/src/cribbage/IPlayer.java +++ b/Cribbage/src/cribbage/IPlayer.java @@ -8,10 +8,14 @@ public abstract class IPlayer { int id; Deck deck; // Need this since can't get from hand to deck Hand hand; + int score; void setId(int id) { this.id = id; } + public int getId(){return id;} + public void setScore(int score){this.score = score;} + public int getScore(){return score;} void startSegment(Deck deck, Hand hand) {this.deck = deck; this.hand = hand;} abstract Card discard(); boolean emptyHand() {return hand.isEmpty();} diff --git a/Cribbage/src/cribbage/Jack.java b/Cribbage/src/cribbage/Jack.java new file mode 100644 index 0000000..d088bed --- /dev/null +++ b/Cribbage/src/cribbage/Jack.java @@ -0,0 +1,34 @@ +package cribbage; + +import ch.aplu.jcardgame.Card; +import ch.aplu.jcardgame.Hand; + +public class Jack implements Rule{ + + Hand hand; + Card starter; + + + public Jack(){} + + @Override + public void receiveHandCards(Hand hand, Hand starter){ + this.hand = hand; + + this.starter = starter.get(0); + } + + @Override + public int calculateScore(int playerId, int currentScore){ + int score = 0; + for (Card c : hand.getCardList()){ + if (((Cribbage.Rank) c.getRank()).order == 11){ + if (c.getSuitId() == starter.getSuitId()){ + score += 1; + log.writeLog(String.format("score,P%d,%d,%d,jack,%s", playerId, currentScore + score, score, Cribbage.cribbage.canonical(c))); + } + } + } + return score; + } +} diff --git a/Cribbage/src/cribbage/LogGenerator.java b/Cribbage/src/cribbage/LogGenerator.java index be03ef4..34229d3 100644 --- a/Cribbage/src/cribbage/LogGenerator.java +++ b/Cribbage/src/cribbage/LogGenerator.java @@ -1,32 +1,29 @@ package cribbage; -import java.io.BufferedWriter; -import java.io.File; -import java.io.FileWriter; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.StandardOpenOption; public class LogGenerator { - String pathName = "cribbage.log"; + private static final LogGenerator log = new LogGenerator(); + private final Path file_name = Path.of("cribbage.log"); - public void generateLogFile(){ + private LogGenerator(){ try { - File file = new File(pathName); - if (file.exists()){ - file.delete(); - } else { - file.createNewFile(); - } - }catch (Exception e){e.printStackTrace();} + Files.deleteIfExists(file_name); + }catch (IOException e){System.err.println(e);} + } + + public static LogGenerator getLog(){ + return log; } public void writeLog(String str){ + String s = str + "\n"; try { - FileWriter fileWriter = new FileWriter(pathName, true); - BufferedWriter bufferedWriter = new BufferedWriter(fileWriter); - bufferedWriter.write(str); - bufferedWriter.newLine(); - bufferedWriter.close(); - }catch (IOException e){e.printStackTrace();} + Files.write(file_name, s.getBytes(), StandardOpenOption.CREATE, StandardOpenOption.APPEND); + }catch (IOException e){System.err.println(e);} } } diff --git a/Cribbage/src/cribbage/Pairs.java b/Cribbage/src/cribbage/Pairs.java new file mode 100644 index 0000000..c27727b --- /dev/null +++ b/Cribbage/src/cribbage/Pairs.java @@ -0,0 +1,40 @@ +package cribbage; + +import ch.aplu.jcardgame.Hand; + + +public class Pairs implements Rule{ + + Hand hand; + + public Pairs(){} + + @Override + public void receiveHandCards(Hand hand, Hand starter){ + this.hand = hand; + this.hand.insert(starter, false); + } + + @Override + public int calculateScore(int playerId, int currentScore){ + int score = 0; + Hand[] pairs = hand.extractPairs(); + for (Hand pair : pairs){ + score += 2; + log.writeLog(String.format("score,P%d,%d,%d,pair2,%s", playerId, currentScore + score, score, Cribbage.cribbage.canonical(pair))); + } + + Hand[] trips = hand.extractTrips(); + for (Hand trip : trips) { + score += 6; + log.writeLog(String.format("score,P%d,%d,%d,pair3,%s", playerId, currentScore + score, score, Cribbage.cribbage.canonical(trip))); + } + + Hand[] quads = hand.extractQuads(); + for (Hand quad : quads) { + score += 12; + log.writeLog(String.format("score,P%d,%d,%d,pair4,%s", playerId, currentScore + score, score, Cribbage.cribbage.canonical(quad))); + } + return score; + } +} diff --git a/Cribbage/src/cribbage/Rule.java b/Cribbage/src/cribbage/Rule.java new file mode 100644 index 0000000..e6dffca --- /dev/null +++ b/Cribbage/src/cribbage/Rule.java @@ -0,0 +1,13 @@ +package cribbage; + +import ch.aplu.jcardgame.Hand; +import cribbage.IPlayer; +import cribbage.LogGenerator; + +public interface Rule { + + LogGenerator log = LogGenerator.getLog(); + + void receiveHandCards(Hand hand, Hand starter); + int calculateScore(int playerId, int currentScore); +} diff --git a/Cribbage/src/cribbage/Runs.java b/Cribbage/src/cribbage/Runs.java new file mode 100644 index 0000000..b8d3efd --- /dev/null +++ b/Cribbage/src/cribbage/Runs.java @@ -0,0 +1,31 @@ +package cribbage; + +import ch.aplu.jcardgame.Hand; + +public class Runs implements Rule{ + + Hand hand; + + public Runs(){} + + @Override + public void receiveHandCards(Hand hand, Hand starter){ + this.hand = hand; + this.hand.insert(starter, false); + } + + @Override + public int calculateScore(int playerId, int currentScore){ + int score = 0; + for (int i=3; i<6; i++){ + Hand[] runs = hand.extractSequences(i); + if (runs.length>0){ + for (Hand run : runs){ + score += i; + log.writeLog(String.format("score,P%d,%d,%d,run%d,%s", playerId, currentScore + score, score, i, Cribbage.cribbage.canonical(run))); + } + } + } + return score; + } +} -- GitLab