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