From 575022493799bab6fb94074543ab39058d778694 Mon Sep 17 00:00:00 2001 From: mtnesbitt Date: Tue, 31 Mar 2015 21:10:23 -0400 Subject: [PATCH 1/8] This is the completed first part for the Set Project. --- src/Card.class | Bin 0 -> 2829 bytes src/Card.java | 142 ++++++++++++++++++++++++++++++++++++++++++++- src/Card.java~ | 42 ++++++++++++++ src/CardTest.class | Bin 0 -> 3219 bytes src/CardTest.java | 128 ++++++++++++++++++++++++++++++++++++++++ src/CardTest.java~ | 9 +++ 6 files changed, 320 insertions(+), 1 deletion(-) create mode 100644 src/Card.class mode change 100755 => 100644 src/Card.java create mode 100644 src/Card.java~ create mode 100644 src/CardTest.class create mode 100644 src/CardTest.java create mode 100644 src/CardTest.java~ diff --git a/src/Card.class b/src/Card.class new file mode 100644 index 0000000000000000000000000000000000000000..6c62670b4616226bbf6f36c180edec34a8941f08 GIT binary patch literal 2829 zcmaJ@TXR!Y6#jP3ElE#l3541kE!0bz-nbTQkz0|Aq%DwIJRKP<*I5+HnSFWVA5jZS={}H=pIfM}LFkSiiN;p`@i_nymBfz4rRfTHju0pZ@mm zw?6{dfy-gkqdx=(17ZfnoDg$T%qa)SFt0;mUKKMe=5!FRIXDwWCHlpj4dR?!&j)cK zh}VO-7(^53iWr*&At?8}eRQ5)m!L=yQ-dU7~j%*oiF zR5?bJ#&gr;O7x|RqrJR)hS!tKKp`Zs&%1kt;N;^Bw1*?fqB2=ZXD;`r3!0RokSxm* zCdnF&B_`6>(p{73sj;rXk%?@k)Z2Pi!N`wHNKQ{Vbw245Ys^h2v%FTtyu>^!v4PAs zG226si^f^A8ReUvp37iE2c|DDcqC3Jh`PMK`!wH zaR@~Z-rPe4ZX-9RVk}#F!eYc)Wk)&ZhlL3xOeZ4q9EghHWPYZY$sW$hW`$%gIz=28 zEf{yvfJPS^(d438%qB6L(IorLl`anBh>N3Qj){2%M--q?^F&{-go87=$>=dQxDBpi? zP4Cm%`&sp}E{9JXU?CtS69uGdeP!YL%G&jnS$kIrb*n>v56}6mCkdmSn zYWpSUzovpeP{UuS;qPSr12Mcn=DpPNIL0|@;*L;Nw31UkkI=?Bwir=6Q9z>(B15B2 zA`@N2HLw;*VmsKPtlnsUfZ!ZrgeGBV4vmBs zVR#M^LYuH+4vskw)40b_Pmv8e&o6wQClvSd5_LJo^$s9oPOl&s*%fSXN9&*pl-H@yxFQ) zaudtzVuAbcB3r2k=dlNG;3Zt=%=_4n+c=2(=wo{v)&d^&1XvPq0lO)iG{FKHM8GP1 zP9AB3CPw%AO>mRE(m?xgjqFWqDrt;bn2WrnL#e&5*BuQF4W#6u-%X!c z#>`!-imdm1{T{Pf#;o1ZCATn}Wz5>W!FSVVl`(e+bB*U4@R+SKX6=4v$t}!Q8MAiR z`fmDcGB^13)S6|~J$ynA$^vpPUr^^o%Ysd^fb6x)7<~F3vrH$cNbargLAAfa<45nB zKCX{*?-ShNejZB$?6nj6*l9v#V6^;1H2_Jhi}G= 1 && c[i] <= 3) { + c[i] = c[i]; + } + else { + if (c[i] < 0) { + c[i] = (((c[i] % 3) + 3) % 3) + 1; + } + else { + c[i] = c[i] % 3 + 1; + } + } + } + + quantity = c[0]; + color = c[1]; + shading = c[2]; + shape = c[3]; + + } public boolean equals(Object obj) { + Card that = (Card)obj; return quantity == that.getQuantity() && @@ -9,4 +47,106 @@ public boolean equals(Object obj) { shading == that.getShading() && shape == that.getShape(); } + public boolean isSet(Card c2, Card c3) { + + int quanSum = quantity + c2.getQuantity() + c3.getQuantity(); + int colorSum = color + c2.getColor() + c3.getColor(); + int shadingSum = shading + c2.getShading() + c3.getShading(); + int shapeSum = shape + c2.getShape() + c3.getShape(); + + if ((quanSum % 3 == 0) && (colorSum % 3 != 0) && (shadingSum % 3 != 0) && (shapeSum % 3 != 0)) { + return true; + } + else if ((quanSum % 3 != 0) && (colorSum % 3 == 0) && (shadingSum % 3 != 0) && (shapeSum % 3 != 0)) { + return true; + } + else if ((quanSum % 3 != 0) && (colorSum % 3 != 0) && (shadingSum % 3 == 0) && (shapeSum % 3 != 0)) { + return true; + } + else if ((quanSum % 3 != 0) && (colorSum % 3 != 0) && (shadingSum % 3 != 0) && (shapeSum % 3 == 0)) { + return true; + } + else { + return false; + } + } + + public String toString() { + String strQuantity = ""; + String strColor = ""; + String strShad = ""; + String strShape = ""; + + if (quantity == 1) { + strQuantity += "1"; + } + else if (quantity == 2) { + strQuantity += "2"; + } + else if (quantity == 3) { + strQuantity += "3"; + } + if (color == 1) { + strColor += "R"; + } + else if (color == 2) { + strColor += "G"; + } + else if(color == 3) { + strColor += "P"; + } + if (shading == 1) { + strShad += "O"; + } + else if (shading == 2) { + strShad += "T"; + } + else if (shading == 3) { + strShad += "S"; + } + if (shape == 1) { + strShape += "O"; + } + else if (shape == 2) { + strShape += "D"; + } + else if (shape == 3) { + strShape += "S"; + } + return strQuantity + strColor + strShad + strShape; + + + + + + + + + } + + + + + + + + + + + + public int getQuantity() { + return quantity; + } + + public int getColor() { + return color; + } + + public int getShading() { + return shading; + } + + public int getShape() { + return shape; + } } diff --git a/src/Card.java~ b/src/Card.java~ new file mode 100644 index 0000000..357d2f9 --- /dev/null +++ b/src/Card.java~ @@ -0,0 +1,42 @@ +public class Card { + private int[] c = new int[4]; + private int quantity; + private int color; + private int shading; + private int shape; + public void Card(quantity, color, shading, shape) { + + c[0] = quantity; + c[1] = color; + c[2] = shading; + c[3] = shape; + for (int i = 0; i < 4; i++) { + if (c[i] >= 1 && c[i] <= 3) { + c[i] = c[i]; + } + else { + if (c[i] < 0) { + c[i] = (((c[i] % 3) + 3) % 3); + } + else { + c[i] = c[i] % 3 + 3; + } + } + } + } + + + //public boolean equals(Object obj) { + //Card that = (Card)obj; + + //return quantity == that.getQuantity() && + //color == that.getColor() && + //shading == that.getShading() && + //shape == that.getShape(); + //} + public int getQuantity() { + + return c[0]; + + } +} diff --git a/src/CardTest.class b/src/CardTest.class new file mode 100644 index 0000000000000000000000000000000000000000..9f477fc62ad292af763a88d3b423e171cc3517cf GIT binary patch literal 3219 zcmbW3T~pge6o!wCBpYMw#ehwm;E;rX&6k0YGzo;p;Ul3nCaGPfVcJdw2rOc(RF=bJ z+WXG*w!fq|36swB2lPL+lXq9LESdov`(i)NuFm`HIjbZ8^WTTRiD-eg!qi8(AkBs; zKy$pA4-=z1e6+xuyS%x_ZC~)weLi{+qKAC4$R|r7dK9GPAbly3x@6Q0ds(8cOmT`}qsg$pa1wO`ij_M${RHu|T! zZR-}60(*1N5bIbA^R=~~8(LK?&BHCXl(b|0MMJCEhHdC#<&H$r=E{m$HMy%;(@?5t z`$p|hqF$fnH5do^JYTJ@8V3h{e|_j(SQZzGJ{r#Md0wDTq1b{WbiCMV9@ zHmHQ}a>dg1|Jm|2)2`@N(X5FlBiwb_EZLSo?-xqWmXb4u!x8lBRNEFfPb=~rEs$etU z8p2i)Y2+M3FTmXH26jAC;OEL!wc25BYxhXsvlldB?vc}Gcd(M#*%5NK z7ubPJ*5}0uH*Ve;HP`y-zU(&L!28jM_l(fudQv~y0nBpfCG^U~dy@XdAV7m?RbdQJ z0^^9Yfs!5Ug_>_8DNC{HlY5*{Uz(~+6z#byb9Baanaj_Upx>zGX zaI^i2V38c;KUnngR; z0o1K_pjzouL3J_I0-){!>K>r(1L{EsP@|s*rO1~-EdlBgpq2sk7*P2Rpl*LAl%ie| zsZ~I&0cssk&j7X20n}JKP%1A_%{z4oQ~^+%fGPs&IiOy205$GG{qB~8d8cOiY66Qn z*W0O9NjF$s=a#B6>gTt3=eKE`zQav_>EoJrt3oecQKy2YZ~~`Pjr*!X#^X9usuUj< zI9e~D>SXYIsP7T1A0YK3g7p)ErTL)REmc_$>TH3JupKtYt{`*b)53<>5{t1!Gm|Lz zX%-g+zj!|2J_@{!DtdtWP(gt=e1MB?)GjOV6CU8%Y^rjr!n1CFHWQa-^A)mLMXrvK zO%vIC?c-`Uo0A?_3Ac>@DM*T2*5ryu@bT|GrD*G`7Zo4eI>Z|gd?Q4i4}Q|SLSgp` sNi^jNY`X#}ArNO#e(OeHtk*;4O`5U Date: Tue, 31 Mar 2015 21:16:10 -0400 Subject: [PATCH 2/8] This is the completed first part of the Set Project. --- src/Card.java | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) diff --git a/src/Card.java b/src/Card.java index 6075383..ff8ebcd 100644 --- a/src/Card.java +++ b/src/Card.java @@ -114,25 +114,7 @@ else if (shape == 3) { strShape += "S"; } return strQuantity + strColor + strShad + strShape; - - - - - - - - - } - - - - - - - - - - + } public int getQuantity() { return quantity; From 29b462c100eae85dbc1369ee024594afd69a304f Mon Sep 17 00:00:00 2001 From: mtnesbitt Date: Tue, 7 Apr 2015 15:53:29 -0400 Subject: [PATCH 3/8] This is the Deck class for the Set Project. --- src/3cards.txt | 3 ++ src/Card.class | Bin 2829 -> 2867 bytes src/Card.java | 4 ++ src/Card.java~ | 125 +++++++++++++++++++++++++++++++++++++++------ src/CardTest.class | Bin 3219 -> 3219 bytes src/Deck.class | Bin 0 -> 2467 bytes src/Deck.java | 52 ++++++++++++++++++- src/Deck.java~ | 90 ++++++++++++++++++++++++++++++++ src/DeckTest.class | Bin 0 -> 1187 bytes src/DeckTest.java | 28 ++++++++++ src/DeckTest.java~ | 24 +++++++++ 11 files changed, 308 insertions(+), 18 deletions(-) create mode 100644 src/3cards.txt create mode 100644 src/Deck.class mode change 100755 => 100644 src/Deck.java create mode 100644 src/Deck.java~ create mode 100644 src/DeckTest.class create mode 100644 src/DeckTest.java create mode 100644 src/DeckTest.java~ diff --git a/src/3cards.txt b/src/3cards.txt new file mode 100644 index 0000000..7910d18 --- /dev/null +++ b/src/3cards.txt @@ -0,0 +1,3 @@ +1 1 1 1 +2 2 2 2 +3 3 3 3 \ No newline at end of file diff --git a/src/Card.class b/src/Card.class index 6c62670b4616226bbf6f36c180edec34a8941f08..0ae37d0e6f65218bc980747e1aa54db2e5e667a7 100644 GIT binary patch delta 518 zcmXAm%}Z2K7{-6cxpyuzTBdf#(2)tU#1G71vPsPh#X=W;qxgkl9~8w5ihYnU5+N>9 zgc}OE6n7@Y>;e&SA#Ot5x^d~&zrdb5opX5KhjZWiJn#FQrAQ|7Yug$KV`=A-$2G3t za+MPDxk&+46cVS1X0G#$2t5?@iW_{SlrKbCC&o|RXDDZf+Z=F*V=6eM(hJx-1vS{z zit(=4>Zs;8tPQ0>UCS4Xx{h-9P{8Z%He#&!$ezL8tz?SL)VnsdVE8bVE zm+Av?CU{H(!!$C=BR;6&6D@q_39Gd7n>O{;&R?E#M2EUUGh}tC)MWlTA<-vjvhbl$ zj_CJA8k1;Dzc(sclG>n2$d;fdsTe`sA)D+=X*&*e|BumvXlBmYHR&#KbgQz55WO6D%{yCR4KXIeWb1P+!k@%{gzliw=brg`)oeeqmW| delta 468 zcmXAl%TJS05XFDD55BZ2T1ZQNV@9DP}d3Q)3Pv^YZwhyNU@O$?IdXJQZ5dVxF-ruO)e{ut<$1Eho<}mifa9 zZ3_Hll~Z0Ci&rMhhKaCgl5ClKY@0=POo7+tBX7Dtnvp5Y7h+D^S2UlUygz9wib3ax TKWcWn=tQX6K~`3#UF7}&${$S! diff --git a/src/Card.java b/src/Card.java index ff8ebcd..b285aeb 100644 --- a/src/Card.java +++ b/src/Card.java @@ -1,3 +1,4 @@ +import junit.framework.TestCase; public class Card { private int[] c = new int[4]; @@ -66,6 +67,9 @@ else if ((quanSum % 3 != 0) && (colorSum % 3 != 0) && (shadingSum % 3 == 0) && ( else if ((quanSum % 3 != 0) && (colorSum % 3 != 0) && (shadingSum % 3 != 0) && (shapeSum % 3 == 0)) { return true; } + else if ((quanSum % 3 == 0) && (colorSum % 3 == 0) && (shadingSum % 3 == 0) && (shapeSum % 3 == 0)) { + return true; + } else { return false; } diff --git a/src/Card.java~ b/src/Card.java~ index 357d2f9..9f4e1b1 100644 --- a/src/Card.java~ +++ b/src/Card.java~ @@ -1,42 +1,135 @@ +import junit.framework.TestCase; public class Card { + private int[] c = new int[4]; private int quantity; private int color; - private int shading; + private int shading; private int shape; - public void Card(quantity, color, shading, shape) { + + public Card(int cardQuan, int cardColor, int cardShading, int cardShape) { + + quantity = cardQuan; + color = cardColor; + shading = cardShading; + shape = cardShape; c[0] = quantity; c[1] = color; c[2] = shading; c[3] = shape; + for (int i = 0; i < 4; i++) { if (c[i] >= 1 && c[i] <= 3) { c[i] = c[i]; } else { if (c[i] < 0) { - c[i] = (((c[i] % 3) + 3) % 3); + c[i] = (((c[i] % 3) + 3) % 3) + 1; } else { - c[i] = c[i] % 3 + 3; + c[i] = c[i] % 3 + 1; } } } - } - + + quantity = c[0]; + color = c[1]; + shading = c[2]; + shape = c[3]; - //public boolean equals(Object obj) { - //Card that = (Card)obj; + } + public boolean equals(Object obj) { - //return quantity == that.getQuantity() && - //color == that.getColor() && - //shading == that.getShading() && - //shape == that.getShape(); - //} - public int getQuantity() { + Card that = (Card)obj; + + return quantity == that.getQuantity() && + color == that.getColor() && + shading == that.getShading() && + shape == that.getShape(); + } + public boolean isSet(Card c2, Card c3) { - return c[0]; - + int quanSum = quantity + c2.getQuantity() + c3.getQuantity(); + int colorSum = color + c2.getColor() + c3.getColor(); + int shadingSum = shading + c2.getShading() + c3.getShading(); + int shapeSum = shape + c2.getShape() + c3.getShape(); + + if ((quanSum % 3 == 0) && (colorSum % 3 != 0) && (shadingSum % 3 != 0) && (shapeSum % 3 != 0)) { + return true; + } + else if ((quanSum % 3 != 0) && (colorSum % 3 == 0) && (shadingSum % 3 != 0) && (shapeSum % 3 != 0)) { + return true; + } + else if ((quanSum % 3 != 0) && (colorSum % 3 != 0) && (shadingSum % 3 == 0) && (shapeSum % 3 != 0)) { + return true; + } + else if ((quanSum % 3 != 0) && (colorSum % 3 != 0) && (shadingSum % 3 != 0) && (shapeSum % 3 == 0)) { + return true; + } + else { + return false; + } + } + + public String toString() { + String strQuantity = ""; + String strColor = ""; + String strShad = ""; + String strShape = ""; + + if (quantity == 1) { + strQuantity += "1"; + } + else if (quantity == 2) { + strQuantity += "2"; + } + else if (quantity == 3) { + strQuantity += "3"; + } + if (color == 1) { + strColor += "R"; + } + else if (color == 2) { + strColor += "G"; + } + else if(color == 3) { + strColor += "P"; + } + if (shading == 1) { + strShad += "O"; + } + else if (shading == 2) { + strShad += "T"; + } + else if (shading == 3) { + strShad += "S"; + } + if (shape == 1) { + strShape += "O"; + } + else if (shape == 2) { + strShape += "D"; + } + else if (shape == 3) { + strShape += "S"; + } + return strQuantity + strColor + strShad + strShape; + } + + public int getQuantity() { + return quantity; + } + + public int getColor() { + return color; + } + + public int getShading() { + return shading; + } + + public int getShape() { + return shape; } } diff --git a/src/CardTest.class b/src/CardTest.class index 9f477fc62ad292af763a88d3b423e171cc3517cf..2f62acd56e81ea8366c9b6a8dd8b196628c9e570 100644 GIT binary patch delta 61 zcmbO%IazW;Gq+$41201^gA_v^gE~V2gCRrVPx# delta 61 zcmbO%IazW;Gq+$i1201kgA_w9gE~V#gCRq~&h>ZB+0C#2 ze*Xi2!}wH13(f?w2WJ&bsPJM^9Htb!pu&%7!8xbmMMMj1_@wX zHiRWqZBl%3Z)@0#eN0hQRWNcIF5`-VMGaSRO+vM!_*hm%WA#F~byF4kM+A9I!|S-t zG&H<{>l)s~4W_r)Mu3QPyJv%k@Oz))CQtO6v&!#Llb7VvlsGtKQqjT87qf7)&RVw8}nU$Fl+1 zL87OsO8xB&tuwE}>MEB-DYcm321HI`>LhGuYpe(CM#uh=IUoz{STXLx@Bb%>(@UDQ0xxI58=Cz+MZOgnLaJ1-j1i-X*G_*EFjA?_qf zCn*0E*KR(05m@1+N5Rv)`Uif=eH7^d8Xv&t{yQ)oDZ%tRVN$7j-+^f(LPe;NBDO^K z7oZieb==!6cjQqP8T%RO_B^(Yk(7T4|MJRT?UfaIRNfT(KZ>Y|v=^|w$5-RaBXked z-Tt+mvbGDX?SiXdhx{QW6bJ=Ncsn&)UioYp&0|IEWGpq20(Mo_=21u2^<463D4_Aj zJItj5H}MsLbxSZqctHqdLQ=u@*iEon*cu%K^C00oO4>)*h6vj*PZNapJUMeXh79^~ z4af00PT&g+(C#T(K8dd>UBt6ai8B1wPmp(%#r9FNhx%duD41i>`nXeQWgl&Y5umL) zS`4!l!bsy8TJ|uWMOq(Vv@OVCkT){zH_+mc)8O|@MP*&+{W$XztgY1jcAubW9}y_XyDQX!-^|?=ATjxh`;JTtS^O zYL&A?ML%k;)`mXwLMkV7lqOx%QK|{kE#W+N-$X+=LKpG{F?94J{K>IAnty`-wsd>V gStYXuM}WVmSfyz+a}?Gcwmj^xnGVJ&?!oE*07ID`MgRZ+ literal 0 HcmV?d00001 diff --git a/src/Deck.java b/src/Deck.java old mode 100755 new mode 100644 index ab3a2a3..87375da --- a/src/Deck.java +++ b/src/Deck.java @@ -2,11 +2,38 @@ import java.io.FileReader; import java.util.StringTokenizer; import java.util.ArrayList; +import java.util.Collections; public class Deck { // Implement the rest of this class yourself + //Instance variables must be cards and nextCardIndex for the provided constructor to work. + ArrayList cards; + int nextCardIndex; + public Deck() { + //Creates a deck with all standard 81 set cards, shuffled. + //Usage (in test code, and in later code): + //Deck d = new Deck(); + nextCardIndex = 0; + cards = new ArrayList(81); + for (int var1 = 1; var1 <= 3; var1++) { + for (int var2 = 1; var2 <= 3; var2++) { + for (int var3 = 1; var3 <= 3; var3++) { + for (int var4 = 1; var4 <= 3; var4++) { + cards.add(new Card(var1, var2, var3, var4)); + } + } + } + } + Collections.shuffle(cards); + + } + public Deck(String filename) { + //Creates a pre-defined deck from a file named filename, + //and does not shuffle it. + //Usage (in test code, and in later code): + // Deck d = new Deck("example.dat"); cards = new ArrayList(81); try { @@ -38,8 +65,29 @@ public Deck(String filename) { nextCardIndex = 0; } } - catch(Exception e) { + catch(Exception e) { throw new RuntimeException("Error while reading file: " + e.toString()); } } -} + public boolean hasNext() { + //returns true if any cards are left, false otherwise + if (nextCardIndex == cards.size()) { + return false; + } + else { + return true; + } + } + + public Card getNext() { + //returns the next card in the deck + if (hasNext()) { + nextCardIndex++; + return cards.get(nextCardIndex-1); + } + else { + return null; + + } + } +} \ No newline at end of file diff --git a/src/Deck.java~ b/src/Deck.java~ new file mode 100644 index 0000000..f660050 --- /dev/null +++ b/src/Deck.java~ @@ -0,0 +1,90 @@ +import java.io.BufferedReader; +import java.io.FileReader; +import java.util.StringTokenizer; +import java.util.ArrayList; +import java.util.Collections; + +public class Deck { + // Implement the rest of this class yourself + //Instance variables must be cards and nextCardIndex for the provided constructor to work. + ArrayList cards; + int nextCardIndex; + + public Deck() { + //Creates a deck with all standard 81 set cards, shuffled. + //Usage (in test code, and in later code): + //Deck d = new Deck(); + nextCardIndex = 0; + cards = new ArrayList(81); + for (int var1 = 1; var1 <= 3; var1++) { + for (int var2 = 1; var2 <= 3; var2++) { + for (int var3 = 1; var3 <= 3; var3++) { + for (int var4 = 1; var4 <= 3; var4++) { + cards.add(new Card(var1, var2, var3, var4)); + nextCardIndex += 1; + } + } + } + } + Collections.shuffle(cards); + } + + public Deck(String filename) { + //Creates a pre-defined deck from a file named filename, + //and does not shuffle it. + //Usage (in test code, and in later code): + // Deck d = new Deck("example.dat"); + + try { + String line; + BufferedReader infile = new BufferedReader(new FileReader(filename)); + int position = 0; + + while((line = infile.readLine()) != null) { + // Blank lines might contain white space, so trim it off + line = line.trim(); + + // ignore blank lines + if(line.length() == 0) + continue; + + // ignore comments + if(line.startsWith("#")) + continue; + + // a valid line contains 4 integers + StringTokenizer tokenizer = new StringTokenizer(line); + + int quantity = Integer.parseInt(tokenizer.nextToken()); + int color = Integer.parseInt(tokenizer.nextToken()); + int shading = Integer.parseInt(tokenizer.nextToken()); + int shape = Integer.parseInt(tokenizer.nextToken()); + + cards.add(new Card(quantity, color, shading, shape)); + nextCardIndex = 0; + } + } + catch(Exception e) { + throw new RuntimeException("Error while reading file: " + e.toString()); + } + } + public boolean hasNext() { + //returns true if any cards are left, false otherwise + if (nextCardIndex == cards.size()) { + return false; + } + else { + return true; + } + } + + public Card getNext() { + //returns the next card in the deck + if (hasNext()) { + return cards.get(nextCardIndex); + } + else { + return null; + } + } +} \ No newline at end of file diff --git a/src/DeckTest.class b/src/DeckTest.class new file mode 100644 index 0000000000000000000000000000000000000000..554ad49444970b61813f3503d116ec2f51364024 GIT binary patch literal 1187 zcmZvb>r&G|6vzMD3ke|wdPBT%RcS$qT)c7h@fzpi0R?!#nIh=8T z(HS4WhjKidwkZN%cK7`E?C;!?KYxGz1~88e4M~hExThh6@ork~Yj}VO4GCnVmX)VT z6;sl9sNoT&rDCXfER`7*vnu9P%qw`J;3-4bqFuMeGDA3%-DZg7oIQ)7&$R2-X5)C* zaw~kdMoPkTs=T(%U0d2MF(M9Zk3lo@R`sZ2d18S<6|_s6f$b6Bzazaz>KokKv`$3J zDp;avrQ}^n99VA7se8h0RE6Ubx9l|Bsxl)kDYeUm^G6a{Ho2govLXHuO!1N%;g z5N^=g<%?kq(phgh;3jU7#c(@#yhYw2($c>WdVhwn*}paQ1Cdii&(YO^^&(78QK(QT zvg$(znh#r06*1hwU4k5nvh1}2WTEcRNEvqZWhDz4~<}*1}$gSY;U2Jq=u!S2cvWw!q`6uoXtJ} literal 0 HcmV?d00001 diff --git a/src/DeckTest.java b/src/DeckTest.java new file mode 100644 index 0000000..55ca62e --- /dev/null +++ b/src/DeckTest.java @@ -0,0 +1,28 @@ +import junit.framework.TestCase; + +public class DeckTest extends TestCase { + public void testDeck() { + Deck d = new Deck(); + + assertEquals(81, d.cards.size()); + } + + public void testHasNext() { + Deck d = new Deck(); + + assertEquals(true, d.hasNext()); + } + + public void testOtherConstructor() { + Deck d = new Deck("3cards.txt"); + + assertEquals("1ROO", d.getNext().toString()); + assertEquals(true, d.hasNext()); + + assertEquals("2GTD", d.getNext().toString()); + assertEquals(true, d.hasNext()); + + assertEquals("3PSS", d.getNext().toString()); + assertEquals(false, d.hasNext()); + } +} \ No newline at end of file diff --git a/src/DeckTest.java~ b/src/DeckTest.java~ new file mode 100644 index 0000000..f1b01e2 --- /dev/null +++ b/src/DeckTest.java~ @@ -0,0 +1,24 @@ +import junit.framework.TestCase; +public class DeckTest extends TestCase { + public void testHasNext() { + Deck d = new Deck(); + + assertEquals(false, d.hasNext()); + } + + public void testGetNext() { + Deck d = new Deck(); + + assertEquals(null, d.getNext()); + } + + public void testOtherConstructor() { + Deck d = new Deck("4cards.rtf"); + + assertEquals("1 1 1 1", d.getNext()); + } + + + + +} \ No newline at end of file From 8d2306af6b667f2dfdb9032bb3f72d3c9dc30c74 Mon Sep 17 00:00:00 2001 From: mtnesbitt Date: Tue, 14 Apr 2015 22:41:04 -0400 Subject: [PATCH 4/8] This is the Table part of the Set Project. --- src/Card.class | Bin 2867 -> 2867 bytes src/Card.java | 1 + src/Card.java~ | 3 ++ src/Deck.class | Bin 2467 -> 2467 bytes src/DeckTest.class | Bin 1187 -> 1068 bytes src/Table.class | Bin 0 -> 2082 bytes src/Table.java | 106 ++++++++++++++++++++++++++++++++++++++++ src/Table.java~ | 100 +++++++++++++++++++++++++++++++++++++ src/TableNode.class | Bin 0 -> 635 bytes src/TableNode.java | 22 +++++++++ src/TableNode.java~ | 22 +++++++++ src/TableNodeTest.class | Bin 0 -> 971 bytes src/TableNodeTest.java | 25 ++++++++++ src/TableNodeTest.java~ | 25 ++++++++++ src/TableTest.class | Bin 0 -> 1653 bytes src/TableTest.java | 67 +++++++++++++++++++++++++ src/TableTest.java~ | 31 ++++++++++++ 17 files changed, 402 insertions(+) create mode 100644 src/Table.class create mode 100644 src/Table.java create mode 100644 src/Table.java~ create mode 100644 src/TableNode.class create mode 100644 src/TableNode.java create mode 100644 src/TableNode.java~ create mode 100644 src/TableNodeTest.class create mode 100644 src/TableNodeTest.java create mode 100644 src/TableNodeTest.java~ create mode 100644 src/TableTest.class create mode 100644 src/TableTest.java create mode 100644 src/TableTest.java~ diff --git a/src/Card.class b/src/Card.class index 0ae37d0e6f65218bc980747e1aa54db2e5e667a7..63eb2d0f3161e2b9b4588dfa5ae94941b15e20ed 100644 GIT binary patch delta 355 zcmW-byDvjw7{-5J+oNe4cddI!gmP$HBC634QXx48DixQyMni~Oh!T;8gv4Sw!eBNM zoVkNZETXfeqs^bd%kt&nw4;*@G`W$Rvii+a*D@QR-djeMe;b}d~Pkla?eZIiurn(44IT0n)mq#{TS z-7*Z(M-S74iAzmVeuwmP#Q@htcw$h(hj^Fz4-6~l)NQFz>_U=56c^({9g~I$T9_2p zDGX-BjSJ@-Tg-FLB9|<2$Fi^{c#+8)t7KW@i*@3mYT9hA%;Q delta 355 zcmW-c+bhFy7>A$lwx3^{7iW}mM;Q-NH>e~*6>n6N#7&BtxLHfsy=c@6u|a5!)Y4=mwK~<_BKTGr z^+}_R9y*w%lX<#0kX1+Ya!nsM^z%$W-~)Ux$S1>wPxqK&qnH^ZLu{-}i1Czc2;pT~ zTxSRhY?3+g3=?I63nE;x$URHqy38x9yh}IDI$vz?!=}>NQZAyZf^FqzM+MkbVfNGt t`|4P(b%U@qP`7ef+8R?Q@rcc@PUUyRUu@7#T<^t^0ZtZyQ-FW>&-Oy8CpL@YX%SoW>e#$oU^-#5B; zPH%I%kja+!JNl`jtT?1(X4a&>*DXYi_@*U-Kf>Q+{1=%Z?#S~W+ zyQG0@^eYRvp1_Si;qZ*_?II=Hfg#e1xnv5OgBB!=AjSWzmq^O literal 1187 zcmZvb>r&G|6vzMD3ke|wdPBT%RcS$qT)c7h@fzpi0R?!#nIh=8T z(HS4WhjKidwkZN%cK7`E?C;!?KYxGz1~88e4M~hExThh6@ork~Yj}VO4GCnVmX)VT z6;sl9sNoT&rDCXfER`7*vnu9P%qw`J;3-4bqFuMeGDA3%-DZg7oIQ)7&$R2-X5)C* zaw~kdMoPkTs=T(%U0d2MF(M9Zk3lo@R`sZ2d18S<6|_s6f$b6Bzazaz>KokKv`$3J zDp;avrQ}^n99VA7se8h0RE6Ubx9l|Bsxl)kDYeUm^G6a{Ho2govLXHuO!1N%;g z5N^=g<%?kq(phgh;3jU7#c(@#yhYw2($c>WdVhwn*}paQ1Cdii&(YO^^&(78QK(QT zvg$(znh#r06*1hwU4k5nvh1}2WTEcRNEvqZWhDz4~<}*1}$gSY;U2Jq=u!S2cvWw!q`6uoXtJ} diff --git a/src/Table.class b/src/Table.class new file mode 100644 index 0000000000000000000000000000000000000000..07d75ead355af6b616a3391068fe23c5dfefc327 GIT binary patch literal 2082 zcmZuyO>Y}j6g_V|_Sln&lO~wDi4AF>X*_lsnlC6$QXsTVTHF0_RiF|O$DX!M6DM+< zP_aQmS+HdZ8zdHF(?u&$R|1J;LHq^&077B~E0hw>of$iBg_3vk-hKDu+;i`n{QB?Oe%C28>RByd}-6qAFge$OK@T!{3V7iZ`bQQP_Lj^_8bx1b{Zan$mmk4 z1tL~BA%h#EN*Pq%g*`g8ksiTsHav-J0%N!=(o^|BP7RFOOHf5VBr#S2J#jPxNKn( zQx>L0eFax7*tlllRh*Dr+QRF2Lm}v+?Ul&mYo*%l@yjc#PMKsITTY|k+~Y1f+5yaK zzuT%{b<1r_&ogaFv0x$7^X(o@bvUzZo`r`jj&taGIJt_8#ZX4LXKj=(@H7j}y)*5{ zP_}vm?IE=qVw6$NFQD@$NUsoHp<_A#Kqh`=PEE{3(-&_kZPADV$Mhy;VnV@uLffWCy6{dA9LEpevPnXx89UqgRr zGppflGOf*6Ys0IsO?B9&Dl9by+!`mC9Aqd$c1*I;M^^gX)Nv*sWG53i!K5~ZFitk7 zFzkZ0z2t4M)4Uh31VpO@!OCu!y8vF{J_Owihr_hsZ1^R7%D=)`TzJX_=F(3P-PKgO ziAZkm;P1qJ-gzho=nwh@F#-c8N!ln$NfAl9gSxnnCddj#NEj!C@+56F7lR4yDGUQC z73Cer)5q}z?}f^Q;K&E&lY`$Nnjwn(Zb0oF{Kc*L;5jVg#PS;BpC*43%reQ`(;dtt z+RP-7Ap$-EY6O)=uNcOt^O!kA)kCXOZFYVqrXaHx1G9m-gxy5fw^&T*%kxQZKaRE!E zqnyWC%5&6R;@wp&xW!EoQj*Zexpa<9mLy0aI`X7Kh$djabd6pU)G3$zV=$gVS85+! zT$Vci4}#t=o%jv$d+`}hG80L+7nvuB3H#~q5Y+FxE!jKxGjNFC8;lD?wa5`(BE1*c z{2T|j&@mXvb~BPBUdA-YO1);taPlA3K7t&KZiDIhE%U*A$&(Dmh`g-seCB5yvAs7P z;fvlwuOKSO`-||IA3iD%)in-nk+H8c*L!5`eYW;ydqk25y9lJ%kv6^&A76;iX~rEE z!54wHk2vvJ1jH|@5ASoItDzQGalzx$m3iRP^@nj(a_EhyU2Tw}n=4n;ww>jz$M^)&S6p+!*Z&Rl0YaOS>3#7%Aa=r07~ z3i1nY*$cN=c501cNTW9UY02ll{IsUT@A39l~%&Z!Oz!Iy;Q=b!RrqcX? zG%wf4G-ZwK8(SHaS!*Mp1^(%7==8EfU7 zs$bvqqfq=~($H_imSo3%iKUgGrI!@anszPFI*1rgRA)G-xavncj3uhGa?J72U#F>7T8m$0mmIVqPd6ozVTN>g|f`Fp{BGkRALdev`H4a-~SCxWHC&R&A8 zR-jA4N0#<`|7;b9b_141I|{Zp)>XpR&9aWd#;(F3S=p*k_Zz!~4of*)ztsvN{p5Yy zuT#iT?{v~>raP~5l?*$dEVhJUzJn}Z4)`dPNXRosuRyD4&GAF1?{Rp5XEG)e7$kN( z2{?!I^b{_1i`6XiEOOtDkk~T#9ip$;!KO+4JjP~H_|g%Kt%*aJi-w>{L8hQ7LCL(4 zHxH1^oB1S7&dM7Hun&;>0VkK1P}gxKq3fh2Ez|Q|$?W;PeHOVs`2Jm(7~-u*U}G97 zEWp7E*>z;_f&#swG&SzGj{$t<_FuWRXz;AF=dlJZzOYN4S`6V6E)ww{gvKSJKK8BQ aGOlpi0$$@Pk;xgGxJD$pUT41qhW`Q_O||a; literal 0 HcmV?d00001 diff --git a/src/TableNodeTest.java b/src/TableNodeTest.java new file mode 100644 index 0000000..b65f7d4 --- /dev/null +++ b/src/TableNodeTest.java @@ -0,0 +1,25 @@ +import junit.framework.TestCase; +public class TableNodeTest extends TestCase { + public void testGetters() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 2, 2); + Card c3 = new Card(1, 2, 3, 1); + + TableNode t1 = new TableNode(c1); + TableNode t2 = new TableNode(c2); + TableNode t3 = new TableNode(c3); + + t1.setNext(t2); + t2.setNext(t3); + + assertEquals("1ROO", t1.getCard().toString()); + assertEquals("1RTD", t2.getCard().toString()); + assertEquals("1GSO", t3.getCard().toString()); + + assertEquals("1RTD", t1.getNext().getCard().toString()); + assertEquals("1GSO", t2.getNext().getCard().toString()); + } +} + + + \ No newline at end of file diff --git a/src/TableNodeTest.java~ b/src/TableNodeTest.java~ new file mode 100644 index 0000000..4088e67 --- /dev/null +++ b/src/TableNodeTest.java~ @@ -0,0 +1,25 @@ +import junit.framework.TestCase; +public class TableNodeTest extends TestCase { + public void testMethods() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 2, 2); + Card c3 = new Card(1, 2, 3, 1); + + TableNode t1 = new TableNode(c1); + TableNode t2 = new TableNode(c2); + TableNode t3 = new TableNode(c3); + + t1.setNext(t2); + t2.setNext(t3); + + assertEquals("1ROO", t1.getCard().toString()); + assertEquals("1RTD", t2.getCard().toString()); + assertEquals("1GSO", t3.getCard().toString()); + + assertEquals("1RTD", t1.getNext().getCard().toString()); + assertEquals("1GSO", t2.getNext().getCard().toString()); + } +} + + + \ No newline at end of file diff --git a/src/TableTest.class b/src/TableTest.class new file mode 100644 index 0000000000000000000000000000000000000000..9d6543601119bbb261b9e1ef75b08019df0359ca GIT binary patch literal 1653 zcmcJO>rNY26ouCr&+*u12&tR2Oq)v+ZU!411G(UE4S@v7fQnHhl%~?eOsNUj>Uc<> ztA9*Xq&`62B2xeM6{@a1V;`F4XO*$E=j=V_vc9#C-~avl9{}d@EQdTM929b}FzH|_ z2OAR-iV{jWe1Yimc0sU!Sm&ueBTg$qPShO5Q8l(a+6}!ayy~_k&LKSiz0>=Gt{XJmg2K zQQ;{y$@tM~%u1M3P?3U@EM$E^799nVOj8(?Y%e%%zYXdE=UI*U-W2Z33b)PG+h<`T z*ldcpE9U%}WB;x1;!9i;7H%fvM+!Qg;bH+*7mu;%VhMz{E6?h?E>^JWVhvBEx-Qkd z{ipG3mmi;E!^I{R6|&|Sh2i5f`d0oa^iP9d+u@tC(69R)s&NWie8kO^e@L2aA)%K_ zre%zw;ahae?{tDN+W6(nKOvUpTAAk@SXsaz8$N{RxEc$bPek+t$`$w)Hz;%% z72M>=;_5Nn;wZ&EZs0b);~z-TlfDao_CSvRCrCc)*{LpaT@1W~n;-OSg7vd2o~=!G zNjgI+up=(j46`SrWSXYcb2NH^Br9atruvuE-K279NkV*Vh<`N1dxm(^5HA_xyN38L z5~sOS@Lyuhr{B6XpQLrxL0ZS{t=j!QYEQ>~)NvoR^wHDONWO|CrbD(z-jCZlOH5#d zag^f67{}S90;-t8DvJDZzZ_yV23}6Y8sGy1ylsHjdcYOhGr~68+_e~^ z%atEB=pTCMuRa4h*}J&<(M?YJd!NV;DE}daJR(??zeOT15qX)&D@0zy4|wt~+*bzo WdxN`Sa2E`2$>5F{+%ej0Vf-HtoCIwE literal 0 HcmV?d00001 diff --git a/src/TableTest.java b/src/TableTest.java new file mode 100644 index 0000000..f66a3d2 --- /dev/null +++ b/src/TableTest.java @@ -0,0 +1,67 @@ +import junit.framework.TestCase; +public class TableTest extends TestCase { + + public void testNumCards() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 2, 2); + Card c3 = new Card(1, 2, 3, 1); + + Table t = new Table(); + + t.add(c1); + t.add(c2); + t.add(c3); + + assertEquals(3, t.numCards()); + } + + public void testGetCard() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 2, 2); + Card c3 = new Card(1, 2, 3, 1); + + Table t = new Table(); + + t.add(c1); + t.add(c2); + t.add(c3); + + assertEquals("1GSO", t.getCard(0).toString()); + assertEquals("1RTD", t.getCard(1).toString()); + assertEquals("1ROO", t.getCard(2).toString()); + } + + public void testRemoveSet() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + Card c3 = new Card(3, 3, 3, 3); + Card c4 = new Card(3, 2, 1, 1); + + Table t = new Table(); + + t.add(c1); + t.add(c2); + t.add(c3); + t.add(c4); + + t.removeSet(c1, c2, c3); + + assertEquals(1, t.numCards()); + } + + public void testNumSets() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + Card c3 = new Card(3, 3, 3, 3); + Card c4 = new Card(3, 2, 1, 1); + + Table t = new Table(); + + t.add(c1); + t.add(c2); + t.add(c3); + t.add(c4); + + assertEquals(3, t.numSets()); + } + } \ No newline at end of file diff --git a/src/TableTest.java~ b/src/TableTest.java~ new file mode 100644 index 0000000..4c76142 --- /dev/null +++ b/src/TableTest.java~ @@ -0,0 +1,31 @@ +import junit.framework.TestCase; +public class TableTest extends TestCase { + public void testNumCards() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 2, 2); + Card c3 = new Card(1, 2, 3, 1); + + Table t = new Table(); + + t.add(c1); + t.add(c2); + t.add(c3); + + assertEquals(3, t.numCards()); + + + } +public void testgetCard() { + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 2, 2); + Card c3 = new Card(1, 2, 3, 1); + + Table t = new Table(); + + t.add(c1); + t.add(c2); + t.add(c3); + + assertEquals("1ROO", t.getCard(2).toString()); + } +} \ No newline at end of file From 622027722bb4c89728b4bdf39dfaa0e2a3b3bbcd Mon Sep 17 00:00:00 2001 From: mtnesbitt Date: Thu, 23 Apr 2015 23:54:17 -0400 Subject: [PATCH 5/8] This is the final piece of the Set Project. --- src/12cards14setsMilestone.dat | 15 ++ src/15cards19setsMilestone.dat | 15 ++ src/Card.class | Bin 2867 -> 2715 bytes src/Card.java | 14 +- src/Card.java~ | 1 + src/Deck.class | Bin 2467 -> 2467 bytes src/Deck.java | 1 - src/Deck.java~ | 7 +- src/Game.class | Bin 0 -> 1687 bytes src/Game.java | 63 +++++++ src/Game.java~ | 62 +++++++ src/GameTest.class | Bin 0 -> 992 bytes src/GameTest.java | 29 ++++ src/GameTest.java~ | 29 ++++ src/Table.class | Bin 2082 -> 2153 bytes src/Table.java | 8 +- src/Table.java~ | 24 ++- src/TableTestMilestone.class | Bin 0 -> 4711 bytes src/TableTestMilestone.java | 296 +++++++++++++++++++++++++++++++++ src/TableTestMilestone.java~ | 295 ++++++++++++++++++++++++++++++++ src/empty game.txt | 0 21 files changed, 831 insertions(+), 28 deletions(-) create mode 100644 src/12cards14setsMilestone.dat create mode 100644 src/15cards19setsMilestone.dat create mode 100644 src/Game.class create mode 100644 src/Game.java create mode 100644 src/Game.java~ create mode 100644 src/GameTest.class create mode 100644 src/GameTest.java create mode 100644 src/GameTest.java~ create mode 100644 src/TableTestMilestone.class create mode 100644 src/TableTestMilestone.java create mode 100644 src/TableTestMilestone.java~ create mode 100644 src/empty game.txt diff --git a/src/12cards14setsMilestone.dat b/src/12cards14setsMilestone.dat new file mode 100644 index 0000000..eb8d6c1 --- /dev/null +++ b/src/12cards14setsMilestone.dat @@ -0,0 +1,15 @@ +1 1 1 1 +1 1 1 2 +1 1 1 3 +1 1 2 1 +1 1 2 2 +1 1 2 3 +1 1 3 1 +1 1 3 2 +1 1 3 3 +1 2 1 1 +1 3 1 1 +1 2 1 2 +1 1 1 1 +2 2 2 2 +2 3 2 1 diff --git a/src/15cards19setsMilestone.dat b/src/15cards19setsMilestone.dat new file mode 100644 index 0000000..eb8d6c1 --- /dev/null +++ b/src/15cards19setsMilestone.dat @@ -0,0 +1,15 @@ +1 1 1 1 +1 1 1 2 +1 1 1 3 +1 1 2 1 +1 1 2 2 +1 1 2 3 +1 1 3 1 +1 1 3 2 +1 1 3 3 +1 2 1 1 +1 3 1 1 +1 2 1 2 +1 1 1 1 +2 2 2 2 +2 3 2 1 diff --git a/src/Card.class b/src/Card.class index 63eb2d0f3161e2b9b4588dfa5ae94941b15e20ed..050623d9e74373f36cc63186427a5d2e3ce5960a 100644 GIT binary patch delta 337 zcmXAkyGsK>5Qo3Hm|Jon7IN1FlS1T(2wJ4@ahfJRVj_y7C_bWMh$tc!7GiN=VQI64 zg|%QKh^Z_s{THlK+Sv*galGvA4B!4{c4oE}JoqpDuE!4!2H3L$ZpD7Oxl|5gf8A_c zB2;~$8>PUo-ZYPKB}r&P$)S&BCdrdhD>0?Mhf&>;Qd*Tf(`v3N5Fj0PFov=25nZYa zGny$3fpeoZ)6jY|PZF24?5sYXBf~tsRPb43gc?PbsA}sqR%o)yxza7`+_AwUn>@3{ zJKKC{zqXG3MV$@@VmOp6M>0r5BAQa>Savy)2B&h(S@P-P{{V7N!L~E8T-bdtl1ufz Vef2`QO6c1QZQTn@RmXRz{Q*0oHT?hp delta 479 zcmaKny-R{o6vlto^nFp126-J!acD3lszEBtjKauh>4UzlD3Zdcj3S93X((uk;Eh5X zqphHDZHcCqi1whd|H6*i5=4i4?|IHS_dL%zS4Po&@6sIV3=2B&Zu+#rbRL&s(=vH# z4Xx~K)>~iMdkm|VDg0Ob=`8%&`J1*-rZtmVV=hLWNVmz`j-L)%h|oh9Gek)eBP-D! zy`0m>1#uqer^o=WBzR+pfOIFS;}aw#kt`xSAyfrL1X+arnNH!aky{jYKUPt?CfY2} zCK4vyf;35j2U|(Bb)DAgQDWc~D?0T@l^YhG5&1ldoiUt@V=zGzQ-qn8nPw%MWQBP) zS>TvOPFdoHW$sAvB$XFd`6SI3Ym``5Ivc8ZzLR-5Q+R_J*cn2A_JlGhF+@zR<5UFz5=s|8 delta 136 zcmZ21yjXZc4I87}=2|vC#!v+Y76w%YK?Y3*MFuSf6$Tv!T?Rb{BL+hTOCV{(V9Mai zV8-A9(81); try { String line; @@ -81,10 +82,12 @@ public class Deck { public Card getNext() { //returns the next card in the deck if (hasNext()) { - return cards.get(nextCardIndex); + nextCardIndex++; + return cards.get(nextCardIndex-1); } else { return null; + } } } \ No newline at end of file diff --git a/src/Game.class b/src/Game.class new file mode 100644 index 0000000000000000000000000000000000000000..db8b7c97e785886a9f1068b97d5daf7b39de967c GIT binary patch literal 1687 zcmb7EO;8hO7=FIpB%6cqEOhA%FJ6UR&U-a%=Tu>C8sbu zC<(*gI(fT5H%ajy3j<#ed0}}mYnPdT7?~~1`-oMVp&)WKZ+&;6xLjaKYJuOpLeyCj z80S~)lI!seMcLwVDQAx|6@5f|NK%<-MVmsdHtx zY@BY*u#!m1yGwtJIcv!?69+L9{aDo_;E96H5?jQ<`L2Ed)*dO@i^Ub&)p7`KqFUND ziGAF%CT^d`k4+$jG=MY&B|RejfVVa1uFXJt3o3md+LbNn_Yfc(BpbR1Lm!IA%$sOU zZ&JJoqk?b+kyWKOw*UT}A$05|{SXFe5CMj3bY&rQP}awU#}PrC+7{{(v`!$&^uPeU zKH}NVF9vO!3eCVis-6>^!0hm0-gV;w6YqxUBJSQol#o4`b!%uB&=r_5^Jg@_S-{5j zlbz`6YS7C@)brIfV4T=qp(g?#vvB)yfcUEDJ6-e!J_dc2Y?P1wFi)vB?4hZ@O+@3x4EO8Ou96+OPGzd-+YTh+N-Kdfq`^X{Tu z+SnfTLe;OoPoUQmKIcA%1ftx%R`$4)n|F-QB+Dt5IL8|t+mDp4v+K90yF;5z+CD%p z9&w8wqaS~95>NSuF4IbLSJGJJm*lp``H;HFX`JGn>V7}-XW35sBs0H6oqCA|_j`fs z&k^)~+7S-=6ZH7w&hnJCXscG-NRDl*TSqW(TbJ>BkFJ5IJfmiu;Nu#qS%bEk)H+lP L10JHOhTeYx6<;OP literal 0 HcmV?d00001 diff --git a/src/Game.java b/src/Game.java new file mode 100644 index 0000000..bd99553 --- /dev/null +++ b/src/Game.java @@ -0,0 +1,63 @@ +public class Game { + Table t = new Table(); + Deck d = new Deck(); + + public Game() { + for (int i = 0; i < 12; i++) { + t.add(d.getNext()); + } + } + + public Game(String filename) { + d = new Deck(filename); + while(d.hasNext() && t.numCards() != 12) { + t.add(d.getNext()); + } + } + + public int numSets() { + return t.numSets(); + } + + public int numCards() { + return t.numCards(); + } + + public void playRound() { + + while (t.numSets() == 0){ + for (int i = 0; i < t.numCards(); i++) { + for (int j = i + 1; j < t.numCards(); j++) { + for (int k = j + 1; k < t.numCards(); k ++) { + + if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { + + t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); + if(t.numCards() <= 9) { + t.add(d.getNext()); + t.add(d.getNext()); + t.add(d.getNext()); + } + } + } + } + } + } + + if (t.numSets() == 0) { + t.add(d.getNext()); + t.add(d.getNext()); + t.add(d.getNext()); + } + } + + public boolean isGameOver() { + if (t.numSets() == 0 && d.hasNext() == false) { + return true; + } + + else { + return false; + } + } +} \ No newline at end of file diff --git a/src/Game.java~ b/src/Game.java~ new file mode 100644 index 0000000..44a395d --- /dev/null +++ b/src/Game.java~ @@ -0,0 +1,62 @@ +public class Game { + Table t = new Table(); + Deck d = new Deck(); + + public Game() { + for (int i = 0; i < 12; i++) { + t.add(d.getNext()); + } + } + + public Game(String filename) { + d = new Deck(filename); + while(d.hasNext() && t.numCards() != 12) { + t.add(d.getNext()); + } + } + + public int numSets() { + return t.numSets(); + } + + public int numCards() { + return t.numCards(); + } + + public void playRound() { + + + for (int i = 0; i < t.numCards(); i++) { + for (int j = i + 1; j < t.numCards(); j++) { + for (int k = j + 1; k < t.numCards(); k ++) { + + if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { + sumSets++; + t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); + if(t.numCards() <= 9) { + t.add(d.getNext()); + t.add(d.getNext()); + t.add(d.getNext()); + } + } + } + } + } + + if (sumSets == 0) { + t.add(d.getNext()); + t.add(d.getNext()); + t.add(d.getNext()); + } + } + + public boolean isGameOver() { + if (t.numSets() == 0 && d.hasNext() == false) { + return true; + } + + else { + return false; + } + } +} \ No newline at end of file diff --git a/src/GameTest.class b/src/GameTest.class new file mode 100644 index 0000000000000000000000000000000000000000..62be544c79fa86791669b3762f493a3c76616abc GIT binary patch literal 992 zcmZva+iuf95QhKF(QzF&haS?w|Tk4 z%Uuokc)!ob$f*b+!QvmIMK7l@WO+XAt=+p`4bo3>-^2g75_YsupQDY>TGm4mkQ zY>p>lOr6-ifZlv1hgQq-)t*3J(O!2QUwJ`Sx!z&mP>SdiYMe$X3!HMGPAqRGPaw_m zn}NJIbOWa+U~=5>+56z!@`!Wf242^CX>&vAYi8wCo=XGs$WZ$%8ra4I0}oLVDAsnn z((C!Pr@p29*Hq~%*Rd)+sko$S;1TE6xY)FYXX;|TPZkyRh0Y)23ES)lXxA`-!f8MQ ztA6k(?X&BBthUIqE`4fAbAn-=Y2#@&1Ptl>mZx5P3gm#qc)8KwAupDj+;epxoqqL5 zdA8HvV?9arN7SZ3>TEg&-JTf%y;6sbI-SinHs~Qu`U!wI=*^I!HA_*IcERe_2;wV! zM3AF3F%~1p)3Fw-i;7#W{mA`h+QH+butm9j2JWmXUUfx zm#(TNjv901(B&Y5flQ7y}m>eO16j{v?!oVuscZw=aP&#SX zsA7nEJ3$quDDqGJ=Q3B63{kQ)P4-%tp%g-j8B%V9l!FN+Kc?t>p%`K2E@AvTtz`nN U&^r`o%=4jnDl}iED@RcJ0~y+)P5=M^ literal 0 HcmV?d00001 diff --git a/src/GameTest.java b/src/GameTest.java new file mode 100644 index 0000000..05e117c --- /dev/null +++ b/src/GameTest.java @@ -0,0 +1,29 @@ +import junit.framework.TestCase; +public class GameTest extends TestCase { + public void testConstructorRuns() { + Game g = new Game(); + assertEquals(12, g.numCards()); + } + + public void testOtherConstructor() { + Game g = new Game("15cards19setsMilestone.dat"); + + assertEquals(12, g.numCards()); + assertEquals(14, g.numSets()); + } + + public void testPlayRound() { + Game g = new Game("15cards19setsMilestone.dat"); + g.playRound(); + + assertEquals(12, g.numCards()); + } + + public void testIsGameOver() { + Game g = new Game("empty game.txt"); + + assertEquals(true, g.isGameOver()); + } +} + + \ No newline at end of file diff --git a/src/GameTest.java~ b/src/GameTest.java~ new file mode 100644 index 0000000..df000a2 --- /dev/null +++ b/src/GameTest.java~ @@ -0,0 +1,29 @@ +import junit.framework.TestCase; +public class GameTest extends TestCase { + public void testConstructorRuns() { + Game g = new Game(); + assertEquals(12, g.numCards()); + } + + public void testOtherConstructor() { + Game g = new Game("15cards19setsMilestone.dat"); + + assertEquals(12, g.numCards()); + assertEquals(14, g.numSets()); + } + + public void testPlayRound() { + Game g = new Game("15cards19setsMilestone.dat"); + g.playRound(); + + assertEquals(1, g.numSets()); + } + + public void testIsGameOver() { + Game g = new Game("empty game.txt"); + + assertEquals(true, g.isGameOver()); + } +} + + \ No newline at end of file diff --git a/src/Table.class b/src/Table.class index 07d75ead355af6b616a3391068fe23c5dfefc327..08da8f2c85c9b30f544eda2f8163be1214391669 100644 GIT binary patch delta 1131 zcmYjQNl#Nz7(Mq5eSOad6cAd0+N!nE0qa0TZ3QPrp~#>nCJsd!4I$3DA|de)7}Aw- z=f({tm?$JJT)J?t3x9$716<*7?tRY(X?pYB?|$Do=NsOu$dAbE=RY4l0_epR2N9HQ zG~twmeg`@RC$AXIzsq`LS>psjm+q58C1SghW?U6`C(sNH&8%3Q@BDv7Wr!9Tfq+O#Q!XB%&2 zXzI<$Za`$kduVUz)zHqfk(B`kefOUKsfFQ^#O7-= zb`Z!_iAe<(^%5BoMHk}Cv`Mp@SyDyCH*I8yw`3#+B%Y@v=Hr=c#sTsRSk&8%4Dlq21MN2~3t7>~ zH@03OeKUH96gCs1TgtiuWnJiDzF@ne3R5Fy8xGRvDcizqVpPFbci)^R<`=V2l9;{B zj#I}WW*Hn^35Qj_!6i9DOIADMGisQ^QThZ@^?^`wnVTb3GU6HI<;z~7$*A&XEMqK8KZxkv#D&GUoxmQ$-3keOwM2S zk6p_UfM3HVOtvjz(ZwzH1+DNV7bBg`ZJ@DkSZUUrvl7ey`xr-9;Yii#fF%hRG=*tbRZE-JFZlE({6z7ZIJAS{OV4UMnmZz)YfyA delta 1042 zcmZ8fOHUI~6#ni!I-PN#wOU*IfFfFk7s1Ooy>C&79u3bI$iT=X{U9i!Xiqv-<@=4J!^}XxQk-WeZad zbX<`z?cge|IlR6u;fCDZlrST&vl8YcG%d6&%x|v#Qd8c7`p`JK5E7+?KA3b01 zyjWXzkwC`90v0W_U39SIVgfZ6b-BKUWfvvfc5xD?nQk@pwA(mH0IQCf+ror zJV#(S(P)%NH16ZQHb#lJWeiRWUROyvz%%K&NPY#2@iaz=CnyfI->@uEzcaszD&5ZS;=K&WAvf`o9`dlo5da4SSUGd7qfL(P{y zLTgvPB3bzar~DqKvCWg+-rE1EZ!?4b8K~Lho2*N*RQ`-UZ`>+!PIs)q=E2YgvfMh_Y+2hRwwvZwwsuMB(xeSI&X#!Hl5y#YecCv2?9O)D z0WS#l0K7~v4G9g95Q07+(8i>uS`k75UM4O=>;;B|-~|CMAn|}eT)zM1{Cygyj7uUN zpYy+bzwi6q&i}mmk2k&pU=p<$dT=3(i!u1b??Ma#yjMKDPh4^_bYoH6<;C5SxO*ak zC&j~Z1S=5~#L!a_Tngjq7*cpfTvo+pEsSTwc)x|vW94eOIb*>;G+c!$Mb1J{O!ubFp0EwN`b`SmcD7b+ zH0wLXX05)wQ{`f-X(6mOaLoa+=3J?y=Hw2Vowe(wM!qJ0G>$vERCUBKjf$P_XyJyt zI3xZi_N*r+?w9*O&k6MB+XSDa>JZu?sE z!`c&alOCUtyvMl2Lbqlq)=w0Ltdru_La%3HY+UV_R8u`-YT4PYU3WO(wbCJGR<`X* zMVpmQXbt3R3PC!dHLR#4@2Pw`pIuM=N&q>gYX*vt>ez=M$01S>9(jdHR*TY)!FJ&ygWb3Jowl^aERBC z9Q5M>-pADfybFi>`Tnj)nU?9T(s08U&3pGfDFazWyY(He+ z3JA+py)In(4g#xzU?{MQ;4Oq&=pFDAy@Tips!Dn+^co8ZV`0!(SR}sSm2@rm)3*@5 zjmTc;ZbJ7Gyw3xjG|*84{jh<)tjQ0!(2_j42Nn51o23+AYM@UeMC+j&j$qJZZNOOT zHP((AYYlB}^e$^O7E;#scrMsxyc-F z^)Xe3jrlLryzt)ie&z+0Apb}uFR7%n+IG9-t&R*)27OY_c8x*0?FEz%YKUVA6Hf_jL5q<%Wk;-2m!&CaPpa)#S)&Fzr;9c*l8W!*zMQC}{g5|U z6PwJIEe~=+OA50Mxee#!e#jjHS#*Q_kgpNBPUOZrAdeYjy9vDhV;0B{y3$G9ya6VlB#u8dY;txq|z-U+(y?fQ5EIK7?u|p*H5xEKgAsR zw1>}($%|8l&xGOg6P??uBPr=bVV7iNBhdG<5;ZlI+9BPLTsr?*YLCz%z>9R*XV8hy zvSYr)B72!%44-3(zJhst0ZaHI6Z}h(zDny=lLKyAcXFjF*CXscs$4Ukw4OBL-qzym z|3+LolNI%v_}@gT`uz$;ew8A>Mv*ru^6M1&4T}6GJJYMI?$_`%zQv>2>mH%D5xS=1 z)X9~u(8rC?DO0~wM(FEW=$tOHy-{@gsTglHsBA_Gy?1h{#(JA#-k_K}6!UG0`7XtL zk7B-0F+cDKm@@)qjDT??;FuB6X9S!w0&Z#n)80s_m%yS*y?{u)ycD306r#i49jVr< z>M$t-Z}R#>68{m2|Cq#oO5#5w@wYsrrwwVhIyy<&_4;8$I%!CY7oR$P?MwO|wZmce zweasr|D2?MLDFxN^e;*JS0w#wlK##AMfwp#dQJD^{=K~|5!Y4Sa-%xq{FaP<$0qlC zV*Ej}P)Ce@$s}Z{gGt; zOt<`no$jxg!QVWD&Kg3G7(%BFq3fE^sXc^5tCK7O!Pc!lw6+NCaf$_mtspX16jN5r z!{LN%>-NeeQNr<)u(a^jz&F*I~h+%pi6q6DfCBi=0e+>mbP` zk+4$ewYvE+*N=JY5c1Xo9->Qz=tWJ`$1I!Hsr@34K;ndU^bS(1>0NZP3gt&ao`=J( z&!Z#D-}`y0x%tmOWnbk&Kg5TJjFB~fsP!O{)*#J4j6v&|G^*hG-!~DMhwI&35 literal 0 HcmV?d00001 diff --git a/src/TableTestMilestone.java b/src/TableTestMilestone.java new file mode 100644 index 0000000..cfc0d99 --- /dev/null +++ b/src/TableTestMilestone.java @@ -0,0 +1,296 @@ +import junit.framework.TestCase; + +public class TableTestMilestone extends TestCase +{ + + public void testConstructorRuns() + { + Table t = new Table(); + } + + + public void testAddRuns() + { + Table t = new Table(); + + t.add(new Card(1, 2, 3, 1)); + } + + + public void testNumCardsNoCards() + { + Table t = new Table(); + + assertEquals(0, t.numCards()); + } + + + public void testNumCardsOneCard() + { + Table t = new Table(); + + t.add(new Card(2, 3, 1, 2)); + + assertEquals(1, t.numCards()); + } + + + public void testNumCardsTwoCards() + { + Table t = new Table(); + + t.add(new Card(3, 1, 2, 3)); + t.add(new Card(1, 2, 3, 1)); + + assertEquals(2, t.numCards()); + } + + + public void testGetCardOneCard() + { + Table t = new Table(); + + Card c = new Card(1, 1, 1, 1); + + t.add(c); + + assertEquals(c, t.getCard(0)); + } + + + public void testGetCardTwoCards() + { + Table t = new Table(); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + + t.add(c1); + t.add(c2); + + assertEquals(c2, t.getCard(0)); + assertEquals(c1, t.getCard(1)); + } + + + public void testGetCardThreeCards() + { + Table t = new Table(); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + Card c3 = new Card(3, 3, 3, 3); + + t.add(c1); + t.add(c2); + t.add(c3); + + assertEquals(c3, t.getCard(0)); + assertEquals(c2, t.getCard(1)); + assertEquals(c1, t.getCard(2)); + } + + + public void testNumSetsEmptyTable() + { + Table t = new Table(); + + assertEquals(0, t.numSets()); + } + + + public void testNumSets3Cards1Set() + { + Table t = makeTable("3cards1setMilestone.dat"); + + assertEquals(1, t.numSets()); + } + + + public void testNumSets3cards0Sets() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + assertEquals(0, t.numSets()); + } + + + public void testNumSets12Cards14Sets() + { + Table t = makeTable("12cards14setsMilestone.dat"); + + assertEquals(14, t.numSets()); + } + + + public void testRemoveSetEmptyTable() + { + Table t = new Table(); + + // Removing a valid set from an empty table shouldn't + // do anything. + t.removeSet(new Card(1, 1, 1, 1), + new Card(2, 2, 2, 2), + new Card(3, 3, 3, 3)); + + assertEquals(0, t.numCards()); + assertEquals(0, t.numSets()); + } + + + public void testSmallTable() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 1, 2); + Card c3 = new Card(2, 2, 2, 3); + + assertEquals(3, t.numCards()); + assertEquals(0, t.numSets()); + + // because we're doing head insertion + // the Cards are indexed in the reverse + // order from which they are added + assertEquals(c3, t.getCard(0)); + assertEquals(c2, t.getCard(1)); + assertEquals(c1, t.getCard(2)); + } + + + public void testSmallTableNoSets() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 1, 2); + Card c3 = new Card(2, 2, 2, 3); + + // trying to remove the cards as a set + // should do nothing + t.removeSet(c1, c2, c3); + + assertEquals(3, t.numCards()); + assertEquals(0, t.numSets()); + + assertEquals(c3, t.getCard(0)); + assertEquals(c2, t.getCard(1)); + assertEquals(c1, t.getCard(2)); + } + + + public void testSmallTable1Set() + { + Table t = makeTable("3cards1setMilestone.dat"); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + Card c3 = new Card(3, 3, 3, 3); + + // This will result in a middle remove, + // a tail remove and a head remove + t.removeSet(c2, c1, c3); + + + assertEquals(0, t.numCards()); + assertEquals(0, t.numSets()); + } + + + public void testSetNotOnTable() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + Card c1 = new Card(1, 2, 2, 2); + Card c2 = new Card(2, 2, 1, 3); + Card c3 = new Card(3, 2, 3, 1); + + // These cards form a set, but are not on the table + t.removeSet(c1, c2, c3); + + assertEquals(3, t.numCards()); + } + + + public void testNotAllOnTable() + { + Table t = makeTable("3cards0setsMilestone.dat"); + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 1, 2); + Card c3 = new Card(1, 1, 1, 3); + + // c1 and c2 are on the table, but c3 is not. The cards from a set + t.removeSet(c1, c2, c3); + + assertEquals(3, t.numCards()); + } + + + public void testFourteenInTwelve() + { + Table t = makeTable("12cards14setsMilestone.dat"); + + assertEquals(14, t.numSets()); + assertEquals(12, t.numCards()); + } + + + public void testRemoveMiddleMiddleHead() + { + Table t = makeTable("12cards14setsMilestone.dat"); + // 1 1 1 3 (3rd to last card) + // 1 3 1 1 (second card) + // 1 2 1 2 (first card) + t.removeSet(new Card(1, 1, 1, 3), + new Card(1, 3, 1, 1), + new Card(1, 2, 1, 2)); + + assertEquals(9, t.numCards()); + // that removed 6 of the 14 sets. + assertEquals(8, t.numSets()); + } + + + public void testRemoveTailMiddleMiddle() + { + Table t = makeTable("12cards14setsMilestone.dat"); + + // 1 1 1 1 (last card) + // 1 1 2 1 (middle) + // 1 1 3 1 (middle) + t.removeSet(new Card(1, 1, 1, 1), + new Card(1, 1, 2, 1), + new Card(1, 1, 3, 1)); + + assertEquals(9, t.numCards()); + } + + + public void testNoSetsinTwelve() + { + Table t = makeTable("12cards0setsMilestone.dat"); + + assertEquals(12, t.numCards()); + assertEquals(0, t.numSets()); + + // try to remove first, middle, and last cards + // which do not form a set so should do nothing + t.removeSet(new Card(1, 3, 3, 2), + new Card(1, 3, 1, 3), + new Card(2, 2, 1, 3)); + + assertEquals(12, t.numCards()); + assertEquals(0, t.numSets()); + } + + private Table makeTable(String filename) + { + Deck d = new Deck(filename); + Table t = new Table(); + + while(d.hasNext()) + t.add(d.getNext()); + + return t; + } +} diff --git a/src/TableTestMilestone.java~ b/src/TableTestMilestone.java~ new file mode 100644 index 0000000..6c0bc7c --- /dev/null +++ b/src/TableTestMilestone.java~ @@ -0,0 +1,295 @@ +import junit.framework.TestCase; + +public class TableTestMilestone extends TestCase +{ + + public void testConstructorRuns() + { + Table t = new Table(); + } + + + public void testAddRuns() + { + Table t = new Table(); + + t.add(new Card(1, 2, 3, 1)); + } + + + public void testNumCardsNoCards() + { + Table t = new Table(); + + assertEquals(0, t.numCards()); + } + + + public void testNumCardsOneCard() + { + Table t = new Table(); + + t.add(new Card(2, 3, 1, 2)); + + assertEquals(1, t.numCards()); + } + + + public void testNumCardsTwoCards() + { + Table t = new Table(); + + t.add(new Card(3, 1, 2, 3)); + t.add(new Card(1, 2, 3, 1)); + + assertEquals(2, t.numCards()); + } + + + public void testGetCardOneCard() + { + Table t = new Table(); + + Card c = new Card(1, 1, 1, 1); + + t.add(c); + + assertEquals(c, t.getCard(0)); + } + + + public void testGetCardTwoCards() + { + Table t = new Table(); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + + t.add(c1); + t.add(c2); + + assertEquals(c2, t.getCard(0)); + assertEquals(c1, t.getCard(1)); + } + + + public void testGetCardThreeCards() + { + Table t = new Table(); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + Card c3 = new Card(3, 3, 3, 3); + + t.add(c1); + t.add(c2); + t.add(c3); + + assertEquals(c3, t.getCard(0)); + assertEquals(c2, t.getCard(1)); + assertEquals(c1, t.getCard(2)); + } + + + public void testNumSetsEmptyTable() + { + Table t = new Table(); + + assertEquals(0, t.numSets()); + } + + + public void testNumSets3Cards1Set() + { + Table t = makeTable("3cards1setMilestone.dat"); + + assertEquals(1, t.numSets()); + } + + + public void testNumSets3cards0Sets() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + assertEquals(0, t.numSets()); + } + + + public void testNumSets12Cards14Sets() + { + Table t = makeTable("12cards14setsMilestone.dat"); + + assertEquals(14, t.numSets()); + } + + + public void testRemoveSetEmptyTable() + { + Table t = new Table(); + + // Removing a valid set from an empty table shouldn't + // do anything. + t.removeSet(new Card(1, 1, 1, 1), + new Card(2, 2, 2, 2), + new Card(3, 3, 3, 3)); + + assertEquals(0, t.numCards()); + assertEquals(0, t.numSets()); + } + + + public void testSmallTable() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 1, 2); + Card c3 = new Card(2, 2, 2, 3); + + assertEquals(3, t.numCards()); + assertEquals(0, t.numSets()); + + // because we're doing head insertion + // the Cards are indexed in the reverse + // order from which they are added + assertEquals(c3, t.getCard(0)); + assertEquals(c2, t.getCard(1)); + assertEquals(c1, t.getCard(2)); + } + + + public void testSmallTableNoSets() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 1, 2); + Card c3 = new Card(2, 2, 2, 3); + + // trying to remove the cards as a set + // should do nothing + t.removeSet(c1, c2, c3); + + assertEquals(3, t.numCards()); + assertEquals(0, t.numSets()); + + assertEquals(c3, t.getCard(0)); + assertEquals(c2, t.getCard(1)); + assertEquals(c1, t.getCard(2)); + } + + + public void testSmallTable1Set() + { + Table t = makeTable("3cards1setMilestone.dat"); + + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(2, 2, 2, 2); + Card c3 = new Card(3, 3, 3, 3); + + // This will result in a middle remove, + // a tail remove and a head remove + t.removeSet(c2, c1, c3); + + assertEquals(0, t.numCards()); + assertEquals(0, t.numSets()); + } + + + public void testSetNotOnTable() + { + Table t = makeTable("3cards0setsMilestone.dat"); + + Card c1 = new Card(1, 2, 2, 2); + Card c2 = new Card(2, 2, 1, 3); + Card c3 = new Card(3, 2, 3, 1); + + // These cards form a set, but are not on the table + t.removeSet(c1, c2, c3); + + assertEquals(3, t.numCards()); + } + + + public void testNotAllOnTable() + { + Table t = makeTable("3cards0setsMilestone.dat"); + Card c1 = new Card(1, 1, 1, 1); + Card c2 = new Card(1, 1, 1, 2); + Card c3 = new Card(1, 1, 1, 3); + + // c1 and c2 are on the table, but c3 is not. The cards from a set + t.removeSet(c1, c2, c3); + + assertEquals(3, t.numCards()); + } + + + public void testFourteenInTwelve() + { + Table t = makeTable("12cards14setsMilestone.dat"); + + assertEquals(14, t.numSets()); + assertEquals(12, t.numCards()); + } + + + public void testRemoveMiddleMiddleHead() + { + Table t = makeTable("12cards14setsMilestone.dat"); + // 1 1 1 3 (3rd to last card) + // 1 3 1 1 (second card) + // 1 2 1 2 (first card) + t.removeSet(new Card(1, 1, 1, 3), + new Card(1, 3, 1, 1), + new Card(1, 2, 1, 2)); + + assertEquals(9, t.numCards()); + // that removed 6 of the 14 sets. + assertEquals(8, t.numSets()); + } + + + public void testRemoveTailMiddleMiddle() + { + Table t = makeTable("12cards14setsMilestone.dat"); + + // 1 1 1 1 (last card) + // 1 1 2 1 (middle) + // 1 1 3 1 (middle) + t.removeSet(new Card(1, 1, 1, 1), + new Card(1, 1, 2, 1), + new Card(1, 1, 3, 1)); + + assertEquals(9, t.numCards()); + } + + + public void testNoSetsinTwelve() + { + Table t = makeTable("12cards0setsMilestone.dat"); + + assertEquals(12, t.numCards()); + assertEquals(0, t.numSets()); + + // try to remove first, middle, and last cards + // which do not form a set so should do nothing + t.removeSet(new Card(1, 3, 3, 2), + new Card(1, 3, 1, 3), + new Card(2, 2, 1, 3)); + + assertEquals(12, t.numCards()); + assertEquals(0, t.numSets()); + } + + private Table makeTable(String filename) + { + Deck d = new Deck(filename); + Table t = new Table(); + + while(d.hasNext()) + t.add(d.getNext()); + + return t; + } +} diff --git a/src/empty game.txt b/src/empty game.txt new file mode 100644 index 0000000..e69de29 From f276841c537e217915aa6796c4f31bf6fe15cfa8 Mon Sep 17 00:00:00 2001 From: mtnesbitt Date: Tue, 28 Apr 2015 14:02:42 -0400 Subject: [PATCH 6/8] Second version of game. --- src/12cards4setsMilestone.dat | 12 +++ src/14cardsMilestone.dat | 14 +++ src/14in12Milestone.dat | 13 +++ src/15cards0setsin12Milestone.dat | 17 ++++ src/15cardsMilestone.dat | 18 ++++ src/18cards0setsin15Milestone.dat | 18 ++++ src/7cardsMilestone.dat | 7 ++ src/Game.class | Bin 1687 -> 1687 bytes src/Game.java | 26 +++-- src/Game.java~ | 27 +++-- src/GameTestMilestone.class | Bin 0 -> 2552 bytes src/GameTestMilestone.java | 163 ++++++++++++++++++++++++++++++ src/GameTestMilestone.java~ | 163 ++++++++++++++++++++++++++++++ 13 files changed, 456 insertions(+), 22 deletions(-) create mode 100644 src/12cards4setsMilestone.dat create mode 100644 src/14cardsMilestone.dat create mode 100644 src/14in12Milestone.dat create mode 100644 src/15cards0setsin12Milestone.dat create mode 100644 src/15cardsMilestone.dat create mode 100644 src/18cards0setsin15Milestone.dat create mode 100644 src/7cardsMilestone.dat create mode 100644 src/GameTestMilestone.class create mode 100644 src/GameTestMilestone.java create mode 100644 src/GameTestMilestone.java~ diff --git a/src/12cards4setsMilestone.dat b/src/12cards4setsMilestone.dat new file mode 100644 index 0000000..ff9563b --- /dev/null +++ b/src/12cards4setsMilestone.dat @@ -0,0 +1,12 @@ +1 1 1 1 +1 1 1 2 +1 1 1 3 +1 2 1 1 +1 2 1 2 +1 2 1 3 +2 1 1 1 +2 1 1 2 +2 1 1 3 +2 2 1 1 +2 2 1 2 +2 2 1 3 diff --git a/src/14cardsMilestone.dat b/src/14cardsMilestone.dat new file mode 100644 index 0000000..af0f4fa --- /dev/null +++ b/src/14cardsMilestone.dat @@ -0,0 +1,14 @@ +1 1 1 1 +1 1 1 2 +1 1 1 3 +2 1 1 1 +2 1 1 2 +2 1 1 3 +3 1 1 1 +3 1 1 2 +3 1 1 3 +1 2 1 1 +1 2 1 2 +1 2 1 3 +2 2 2 2 +3 3 3 3 diff --git a/src/14in12Milestone.dat b/src/14in12Milestone.dat new file mode 100644 index 0000000..8126933 --- /dev/null +++ b/src/14in12Milestone.dat @@ -0,0 +1,13 @@ +# this collection has 14 sets +1 1 1 1 +1 1 1 2 +1 1 1 3 +2 2 2 1 +2 2 2 2 +2 2 2 3 +3 3 3 1 +3 3 3 2 +3 3 3 3 +1 2 2 2 +1 3 3 3 +1 2 2 1 diff --git a/src/15cards0setsin12Milestone.dat b/src/15cards0setsin12Milestone.dat new file mode 100644 index 0000000..d0f889d --- /dev/null +++ b/src/15cards0setsin12Milestone.dat @@ -0,0 +1,17 @@ +# The first 12 cards have 0 sets +1 3 3 2 +3 3 2 2 +1 1 2 1 +1 2 3 3 +3 2 3 3 +1 3 1 3 +3 1 2 2 +2 2 3 2 +1 1 1 1 +3 2 1 1 +2 1 1 3 +2 2 1 3 +# These cards add some sets. +2 2 2 2 +3 3 3 3 +1 2 1 2 diff --git a/src/15cardsMilestone.dat b/src/15cardsMilestone.dat new file mode 100644 index 0000000..d9ba327 --- /dev/null +++ b/src/15cardsMilestone.dat @@ -0,0 +1,18 @@ +# a deck where the first 12 cards contain a set (3 actually) +# 3 purple solid diamond, 2 green open diamond, 1 red striped diamond +3 1 3 2 +3 3 3 2 +2 3 3 2 +2 1 1 2 +2 3 2 1 +2 1 2 1 +2 1 2 3 +1 2 2 2 +2 3 2 2 +1 2 2 3 +3 3 2 1 +3 1 2 1 +# extra cards for when the set is removed +1 3 2 1 +1 1 2 1 +1 1 3 1 \ No newline at end of file diff --git a/src/18cards0setsin15Milestone.dat b/src/18cards0setsin15Milestone.dat new file mode 100644 index 0000000..089767f --- /dev/null +++ b/src/18cards0setsin15Milestone.dat @@ -0,0 +1,18 @@ +1 1 1 1 +1 1 1 2 +1 1 2 1 +1 1 2 2 +1 2 1 1 +1 2 1 2 +1 2 2 1 +1 2 2 2 +2 1 1 1 +2 1 1 2 +2 1 2 1 +2 1 2 2 +2 2 1 1 +2 2 1 2 +2 2 2 1 +2 2 2 2 +3 3 3 3 +3 1 1 1 diff --git a/src/7cardsMilestone.dat b/src/7cardsMilestone.dat new file mode 100644 index 0000000..5c0121b --- /dev/null +++ b/src/7cardsMilestone.dat @@ -0,0 +1,7 @@ +1 1 1 1 +2 2 2 2 +3 3 3 3 +1 2 1 2 +2 1 2 1 +3 3 1 1 +1 2 3 1 diff --git a/src/Game.class b/src/Game.class index db8b7c97e785886a9f1068b97d5daf7b39de967c..8e3ddb0f6ac6e2dde811c4ea6c22a94781d5d50b 100644 GIT binary patch delta 279 zcmX|(Jxjx26osE8H-(B(3Vwh|YEgB$MFMcPQeZxMUHO zQi?-y_7^xfi-V)xv=A>A%KbR^aL&0Muj4(nr8acxe$+$yOyAS=!squA2DZw}nORvwQ60V|YQrAm=Q z);MLI7A3BTxKZUn^{)D!$@9VnuWa&0g%3@9vxN`p6m_%}LmYA>nhUYD2Kqn5QqNHH l%Zde^fb57x+Zr+RKU2S)|KN_>lrxR&HgnWjVAq^vihn2nK%f8s delta 283 zcmX|)y-osA5QV?py-Omp*oYeUu3!`i5PvX;6hLL{jWMyLwxm{RwzQF35GXCg%2*IO zYoEX;ps=ul5=n3Z3CWz9b7s!Ww7s_X(Nd*xu8$hvbs0Dne<5Noy!xtM)l2!TRlOE0 z<-Pe;+iI=Dt@%+|n?sXwwK;O*iO{invu0>Zz6&kMH@(@VxpFU>nkWIA>~KJmGj_RV zj|TfZlIBUeT{67M>|H#4@qTj57bkpEV8|&WiugbdB?tupj&wTYh1tYpQwy`iGnN}k ksVPAqpQl@_T2tb4{P8fsU4(7&k=n{R>y+7`Vj7Y3Kdg#9@Bjb+ diff --git a/src/Game.java b/src/Game.java index bd99553..5ce6f82 100644 --- a/src/Game.java +++ b/src/Game.java @@ -25,19 +25,23 @@ public int numCards() { public void playRound() { - while (t.numSets() == 0){ - for (int i = 0; i < t.numCards(); i++) { - for (int j = i + 1; j < t.numCards(); j++) { - for (int k = j + 1; k < t.numCards(); k ++) { + + + for (int i = 0; i < t.numCards(); i++) { + + for (int j = i + 1; j < t.numCards(); j++) { + + for (int k = j + 1; k < t.numCards(); k ++) { + while (t.numSets() == 1 ){ - if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { + if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { - t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); - if(t.numCards() <= 9) { - t.add(d.getNext()); - t.add(d.getNext()); - t.add(d.getNext()); - } + t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); + if(t.numCards() <= 9) { + t.add(d.getNext()); + t.add(d.getNext()); + t.add(d.getNext()); + } } } } diff --git a/src/Game.java~ b/src/Game.java~ index 44a395d..8dff4e2 100644 --- a/src/Game.java~ +++ b/src/Game.java~ @@ -26,24 +26,29 @@ public class Game { public void playRound() { - for (int i = 0; i < t.numCards(); i++) { - for (int j = i + 1; j < t.numCards(); j++) { - for (int k = j + 1; k < t.numCards(); k ++) { + + for (int i = 0; i < t.numCards(); i++) { + + for (int j = i + 1; j < t.numCards(); j++) { + + for (int k = j + 1; k < t.numCards(); k ++) { + while (t.numSets() = 1 ){ - if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { - sumSets++; - t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); - if(t.numCards() <= 9) { - t.add(d.getNext()); - t.add(d.getNext()); - t.add(d.getNext()); + if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { + + t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); + if(t.numCards() <= 9) { + t.add(d.getNext()); + t.add(d.getNext()); + t.add(d.getNext()); + } } } } } } - if (sumSets == 0) { + if (t.numSets() == 0) { t.add(d.getNext()); t.add(d.getNext()); t.add(d.getNext()); diff --git a/src/GameTestMilestone.class b/src/GameTestMilestone.class new file mode 100644 index 0000000000000000000000000000000000000000..41c835b5c6a56525e8f301233823b9ca2e41b04d GIT binary patch literal 2552 zcmZ{lZBrXn7>4hKK++Ie8XzsLAhe|gS_{D-v=nNg1R2wIEU`*`soSu?LSD-52CO>j zSjU$SjyjGyzKm7>fnTJfGk$f(|KKn1KRDjcX7^+l@XN`b=RA9^`+lBtHh=y5+aCZj zScszoLs6WKqX9!QoQtC!Psr1Gc^ZykL?&q&MrC+1hD;1&F+3H+xTH+Pa3O|^QA|d0 zNkj7`vurxk8X5-%Z)u3kR+bG7hjM1wxLz&YHLSdTx5!8`S1IVlTe@Y++zUpWHPhD6 zo}1T8M&7WUYi5ySrEE-UXmR*>-Po2j4caPMZXTC9-KEN+;n-QzvYq_4QQTruYF9jK zt~iEK*6^4t%;<%Ue5ICqg$tHi?x`<(F?W5=TwSZZe@qgt8ikGP73W&D=$QA4#*LNy znq~M@SonO<-Avq%d#+G5tmF_wBJ>PNJE}aqm8d_y?(7+Vji0 zBk#{8kd+tbWvA}+L@0eMl&+y8opIN9h1EOKsTEKmf;&_C!Vg73TZ5rBv_6r{xaFk=S8*D@upA)qN9K&(W zcz)H(OU!Oytm}6)EbX8%*OoZ@D6dyGziB*7gVJL%vEH}1j!f#R)( zAN25XuKD<0g@5Sb=Usf_fALC_FN11Y+79?ilY7JsQ5NVnj$VrEqqvh4(2p}XjS))B zV2Ic0EN{lSfY^B@c1nruQ({Y=*#3I0Tp1xvewTLFX@pWn*_aHgG)_4aIE4!VbiYC$ zSLhQ8T@AI#t&^Z#yl+0FrH=1Gl$Dqwewz5pti}xSbF4;|b(jxG*soP5l?20+(C4~u zl~#pMh^UeCSx2YPMD(*n=XgbK(D`$0$ISq;Pq{v#T%S_NWe?fwA`iOAs7DdE{_}3) zEfQZOaf!s2X!PX(u~!jOirBA+e|yA|OFR@ZDKxnkLUxaym~9RQWgV2ppFtZ7_8R5irThZ>WKjMJ`?ShaYx3}{vy&U_UI_~*vz!&0+{7!em}#R3 zCt$UttQM5j)5_|fp4B_9)x#mHZ3pXWaZuNj$(+yw5Z90nf{acmW^bReT&Ubw` Date: Tue, 28 Apr 2015 14:51:29 -0400 Subject: [PATCH 7/8] This is the final version of Game.java for the SetProject. --- src/Game.java | 68 +++++++++++++++++++++++++++++++++------------------ 1 file changed, 44 insertions(+), 24 deletions(-) diff --git a/src/Game.java b/src/Game.java index 5ce6f82..32d9adc 100644 --- a/src/Game.java +++ b/src/Game.java @@ -1,8 +1,10 @@ public class Game { - Table t = new Table(); - Deck d = new Deck(); + Table t; + Deck d; public Game() { + d = new Deck(); + t = new Table(); for (int i = 0; i < 12; i++) { t.add(d.getNext()); } @@ -10,6 +12,7 @@ public Game() { public Game(String filename) { d = new Deck(filename); + t = new Table(); while(d.hasNext() && t.numCards() != 12) { t.add(d.getNext()); } @@ -24,36 +27,53 @@ public int numCards() { } public void playRound() { - - - - for (int i = 0; i < t.numCards(); i++) { + boolean setFound = false; - for (int j = i + 1; j < t.numCards(); j++) { - + for (int i = 0; i < t.numCards() - 2; i++) { + if (setFound) { + break; + } + for (int j = i + 1; j < t.numCards() - 1; j++) { + if (setFound) { + break; + } for (int k = j + 1; k < t.numCards(); k ++) { - while (t.numSets() == 1 ){ - - if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))) { - - t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); + if (setFound) { + break; + } + + if (t.getCard(i).isSet(t.getCard(j), t.getCard(k))){ + t.removeSet(t.getCard(i), t.getCard(j), t.getCard(k)); + setFound = true; if(t.numCards() <= 9) { - t.add(d.getNext()); - t.add(d.getNext()); - t.add(d.getNext()); + if (d.hasNext()) { + t.add(d.getNext()); + } + if (d.hasNext()) { + t.add(d.getNext()); + } + if (d.hasNext()) { + t.add(d.getNext()); + } } } - } - } + } } } - - if (t.numSets() == 0) { - t.add(d.getNext()); - t.add(d.getNext()); - t.add(d.getNext()); + if (t.numSets() == 0) { + if (d.hasNext()) { + t.add(d.getNext()); + } + if (d.hasNext()) { + t.add(d.getNext()); + } + if (d.hasNext()) { + t.add(d.getNext()); + } } - } + } + + public boolean isGameOver() { if (t.numSets() == 0 && d.hasNext() == false) { From d13a43dcb2c51287d41c95250604150292b838ea Mon Sep 17 00:00:00 2001 From: mtnesbitt Date: Wed, 29 Apr 2015 15:42:58 -0400 Subject: [PATCH 8/8] This is the experiment class for the Monte Carlo simulation portion of the project. --- src/SetExperiment.java | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 src/SetExperiment.java diff --git a/src/SetExperiment.java b/src/SetExperiment.java new file mode 100644 index 0000000..0bc1bb5 --- /dev/null +++ b/src/SetExperiment.java @@ -0,0 +1,31 @@ +public class SetExperiment { + public static void main(String[] args) { + double cardSum = 0; + double setSum = 0; + + for(int i = 0; i < 1000; i++) { + Game g = new Game(); + + while(g.isGameOver() == false) { + g.playRound(); + } + + setSum += g.numCards(); + } + System.out.println("Average number of cards at the end: " + setSum / 1000); + + for(int j = 0; j < 1000; j++) { + + Table t = new Table(); + Deck d = new Deck(); + + for(int k = 0; k < 12; k++) { + t.add(d.getNext()); + } + + cardSum += t.numSets(); + } +System.out.println("Average number of sets in 12 random cards: " + cardSum / 1000); + } +} + \ No newline at end of file