Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 93 additions & 8 deletions src/Card.java
100755 → 100644
Original file line number Diff line number Diff line change
@@ -1,12 +1,97 @@
public class Card {
// Create the rest of this class yourself

public boolean equals(Object obj) {
Card that = (Card)obj;
private int quantity;
private int color;
private int shading;
private int shape;
private String zing = "";

return quantity == that.getQuantity() &&
color == that.getColor() &&
shading == that.getShading() &&
shape == that.getShape();
}
public Card( int Quantity, int Color, int Shading, int Shape) {
quantity = repairValue(Quantity);
color = repairValue(Color);
shading = repairValue(Shading);
shape = repairValue(Shape);
}
private int repairValue( int valueToRepair) {
if (valueToRepair < 1 || valueToRepair > 3)
return (((valueToRepair % 3) + 3) % 3) + 1;
else
return valueToRepair;
}
public int getQuantity() {
return quantity;
}
public int getColor() {
return color;
}
public int getShading() {
return shading;
}
public int getShape () {
return shape;
}
public boolean isSet( Card card2, Card card3) {
if(((quantity + card2.getQuantity() + card3.getQuantity()) % 3 == 0) &&
((color + card2.getColor() + card3.getColor()) % 3 == 0) &&
((shading + card2.getShading() + card3.getShading()) % 3 == 0) &&
(( shape + card2.getShape() + card3.getShape()) % 3 == 0))
{
return true;
}

else
{
return false;
}
}
public String toString() {

if (quantity == 1) {
zing += 1;
}
else if (quantity == 2) {
zing += 2;
}
else if (quantity == 3) {
zing += 3;
}
if (color == 1) {
zing += "R";
}
else if (color == 2) {
zing += "G";
}
else if (color == 3) {
zing += "P";
}
if (shading == 1) {
zing += "O";
}
else if (shading == 2) {
zing += "T";
}
else if (shading == 3) {
zing += "S";
}
if (shape == 1) {
zing += "O";
}
else if (shape == 2) {
zing += "D";
}
else if (shape == 3) {
zing += "S";
}
return zing;
}
public boolean equals(Object obj) {
Card that = (Card)obj;
return quantity == that.getQuantity() &&
color == that.getColor() &&
shading == that.getShading() &&
shape == that.getShape();
}
}



54 changes: 54 additions & 0 deletions src/CardTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
import junit.framework.TestCase;


public class CardTest extends TestCase {

public void testNewCard() {
Card z1 = new Card( 1, 2, 3, 3);

assertEquals(1, z1.getQuantity());
assertEquals(2, z1.getColor());
assertEquals(3, z1.getShading());
assertEquals(3, z1.getShape());
}
public void testTwoCards() {
Card z1 = new Card(1,1,1,1);
Card z2 = new Card(1,1,1,1);

assertEquals(z1, z2);
}
public void testSameColor() {
Card z1 = new Card(6, 2, 3, 3);
Card z2 = new Card(5, 2, 4, 2);
Card z3 = new Card(4, 2, 3, 1);

assertEquals(false, z1.isSet(z2,z3));
}
public void testSameShape() {
Card z1 = new Card(1, 2, 3, 3);
Card z2 = new Card(2, 2, 3, 3);
Card z3 = new Card(3, 2, 3, 3);

assertEquals(true, z1.isSet(z2,z3));
}
public void testSameShading() {
Card z1 = new Card(12, 3, 3, 3);
Card z2 = new Card(12, 3, 3, 2);
Card z3 = new Card(12, 3, 3, 1);

assertEquals(true, z1.isSet(z2,z3));
}
public void testNegativeValue() {
Card z1 = new Card(6, 2, 3, -34);

assertEquals(1, z1.getQuantity());
assertEquals(2, z1.getColor());
assertEquals(3, z1.getShading());
assertEquals(3, z1.getShape());
}
public void testtoString() {
Card z1 = new Card(2, 2, 2, 2);

assertEquals("2GTD", z1.toString());
}
}
41 changes: 38 additions & 3 deletions src/Deck.java
100755 → 100644
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,26 @@
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
private int nextCardIndex;
private ArrayList<Card> cards;

public Deck() {
cards = new ArrayList<Card>(81);
for (int quantity = 1; quantity <= 3; quantity++) {
for(int color = 1; color <= 3; color++) {
for(int shading = 1; shading <= 3; shading++) {
for(int shape = 1; shape <= 3; shape++) {
Card r = new Card(quantity, color, shading, shape);
cards.add(r);
}
}
}
}
Collections.shuffle(cards);
}

public Deck(String filename) {
cards = new ArrayList<Card>(81);
Expand All @@ -13,7 +30,7 @@ public Deck(String filename) {
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();
Expand All @@ -25,7 +42,7 @@ public Deck(String filename) {
// ignore comments
if(line.startsWith("#"))
continue;

// a valid line contains 4 integers
StringTokenizer tokenizer = new StringTokenizer(line);

Expand All @@ -42,4 +59,22 @@ public Deck(String filename) {
throw new RuntimeException("Error while reading file: " + e.toString());
}
}

public boolean hasNext() {
if(nextCardIndex < cards.size()) {
return true;
}
else {
return false;
}
}
public Card getNext() {
if(hasNext() != false) {
nextCardIndex += 1;
return cards.get(nextCardIndex -1);
}
else {
return null;
}
}
}
25 changes: 25 additions & 0 deletions src/DeckTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
import junit.framework.TestCase;

/**
* A JUnit test case class.
* Every method starting with the word "test" will be called when running
* the test with JUnit.
*/
public class DeckTest extends TestCase {

/**
* A test method.
* (Replace "X" with a name describing the test. You may write as
* many "testSomething" methods in this class as you wish, and each
* one will be called when running JUnit over this class.)
*/
public void testtwoCard() {
Deck z = new Deck("twoCard.dat");

assertEquals("1ROO", z.getNext().toString());
assertEquals("1ROD", z.getNext().toString());
assertTrue(z.hasNext());
assertFalse(z.hasNext());
}

}
81 changes: 81 additions & 0 deletions src/Game.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
public class Game {
private Table t;
private Deck d;

public Game() {
t = new Table();
d = new Deck();

for(int i = 0; i < 12; i++)
if(d.hasNext() != false) {
t.add(d.getNext());
}
}

public Game(String filename) {

d = new Deck(filename);
t = new Table();
for( int i = 0; i<12; i++) {
if(d.hasNext() == true)
t.add(d.getNext());
}
}

public int numSets() {

return t.numSets();
}

public int numCards() {

return t.numCards();
}

public void playRound() {
if(t.numSets() == 0 && d.hasNext() != false){
for( int i = 0; i < 3; i++)
t.add(d.getNext());
return;
}
boolean foundSet = false;
for( int i = 0; i < numCards() -2; i++) {
if(foundSet)
break;
for(int j = i +1; j < numCards() -1; j++) {
if( foundSet)
break;
for(int k = j +1; k < numCards(); k++) {
Card wolverine = t.getCard(i);
Card magneto = t.getCard(j);
Card professorx = t.getCard(k);

if (wolverine.isSet(magneto, professorx)) {
t.removeSet(wolverine, magneto, professorx);
foundSet = true;
break;
}
}
}
}
if (d.hasNext() == true && numCards() < 12) {
for( int w = 0; w < 3; w++) {
if(d.hasNext() == true) {

t.add(d.getNext());
}
}
}
}

public boolean isGameOver() {
if( t.numSets() == 0 && d.hasNext() == false) {
return true;
}
else {
return false;
}
}
}


11 changes: 11 additions & 0 deletions src/GameTest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import junit.framework.TestCase;

public class GameTest extends TestCase {

public void testAutoTable() {
Game samsung = new Game();

assertEquals(12, samsung.numCards());
}

}
Binary file added src/Set Game Write up .docx
Binary file not shown.
Loading