commit b07633a7028ecf1dd9bcc1e5a7e5e550f85fbd98 Author: jrtec Date: Fri Jan 29 17:49:21 2016 -0500 diff --git a/build.xml b/build.xml new file mode 100644 index 0000000..9beebe8 --- /dev/null +++ b/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + Builds, tests, and runs the project SetGame. + + + diff --git a/manifest.mf b/manifest.mf new file mode 100644 index 0000000..1574df4 --- /dev/null +++ b/manifest.mf @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +X-COMMENT: Main-Class will be added automatically by build + diff --git a/nbproject/build-impl.xml b/nbproject/build-impl.xml new file mode 100644 index 0000000..43e4004 --- /dev/null +++ b/nbproject/build-impl.xml @@ -0,0 +1,1413 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set src.dir + Must set test.src.dir + Must set build.dir + Must set dist.dir + Must set build.classes.dir + Must set dist.javadoc.dir + Must set build.test.classes.dir + Must set build.test.results.dir + Must set build.classes.excludes + Must set dist.jar + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No tests executed. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must set JVM to use for profiling in profiler.info.jvm + Must set profiler agent JVM arguments in profiler.info.jvmargs.agent + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + To run this application from the command line without Ant, try: + + java -jar "${dist.jar.resolved}" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + Must select one file in the IDE or set run.class + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set debug.class + + + + + Must select one file in the IDE or set debug.class + + + + + Must set fix.includes + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + Must select one file in the IDE or set profile.class + This target only works when run from inside the NetBeans IDE. + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + This target only works when run from inside the NetBeans IDE. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select one file in the IDE or set run.class + + + + + + Must select some files in the IDE or set test.includes + + + + + Must select one file in the IDE or set run.class + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Must select some files in the IDE or set javac.includes + + + + + + + + + + + + + + + + + + + + Some tests failed; see details above. + + + + + + + + + Must select some files in the IDE or set test.includes + + + + Some tests failed; see details above. + + + + Must select some files in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + Some tests failed; see details above. + + + + + Must select one file in the IDE or set test.class + + + + Must select one file in the IDE or set test.class + Must select some method in the IDE or set test.method + + + + + + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + Must select one file in the IDE or set applet.url + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/nbproject/genfiles.properties b/nbproject/genfiles.properties new file mode 100644 index 0000000..51ea427 --- /dev/null +++ b/nbproject/genfiles.properties @@ -0,0 +1,8 @@ +build.xml.data.CRC32=5fcd4e03 +build.xml.script.CRC32=c8cda4df +build.xml.stylesheet.CRC32=8064a381@1.75.2.48 +# This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml. +# Do not edit this file. You may delete it but then the IDE will never regenerate such files for you. +nbproject/build-impl.xml.data.CRC32=5fcd4e03 +nbproject/build-impl.xml.script.CRC32=10cbaf2b +nbproject/build-impl.xml.stylesheet.CRC32=876e7a8f@1.75.2.48 diff --git a/nbproject/project.properties b/nbproject/project.properties new file mode 100644 index 0000000..cd3e715 --- /dev/null +++ b/nbproject/project.properties @@ -0,0 +1,74 @@ +annotation.processing.enabled=true +annotation.processing.enabled.in.editor=false +annotation.processing.processor.options= +annotation.processing.processors.list= +annotation.processing.run.all.processors=true +annotation.processing.source.output=${build.generated.sources.dir}/ap-source-output +build.classes.dir=${build.dir}/classes +build.classes.excludes=**/*.java,**/*.form +# This directory is removed when the project is cleaned: +build.dir=build +build.generated.dir=${build.dir}/generated +build.generated.sources.dir=${build.dir}/generated-sources +# Only compile against the classpath explicitly listed here: +build.sysclasspath=ignore +build.test.classes.dir=${build.dir}/test/classes +build.test.results.dir=${build.dir}/test/results +# Uncomment to specify the preferred debugger connection transport: +#debug.transport=dt_socket +debug.classpath=\ + ${run.classpath} +debug.test.classpath=\ + ${run.test.classpath} +# Files in build.classes.dir which should be excluded from distribution jar +dist.archive.excludes= +# This directory is removed when the project is cleaned: +dist.dir=dist +dist.jar=${dist.dir}/SetGame.jar +dist.javadoc.dir=${dist.dir}/javadoc +excludes= +includes=** +jar.compress=false +javac.classpath=\ + ${libs.absolutelayout.classpath} +# Space-separated list of extra javac options +javac.compilerargs= +javac.deprecation=false +javac.processorpath=\ + ${javac.classpath} +javac.source=1.8 +javac.target=1.8 +javac.test.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +javac.test.processorpath=\ + ${javac.test.classpath} +javadoc.additionalparam= +javadoc.author=false +javadoc.encoding=${source.encoding} +javadoc.noindex=false +javadoc.nonavbar=false +javadoc.notree=false +javadoc.private=false +javadoc.splitindex=true +javadoc.use=true +javadoc.version=false +javadoc.windowtitle= +main.class= +manifest.file=manifest.mf +meta.inf.dir=${src.dir}/META-INF +mkdist.disabled=false +platform.active=default_platform +run.classpath=\ + ${javac.classpath}:\ + ${build.classes.dir} +# Space-separated list of JVM arguments used when running the project. +# You may also define separate properties like run-sys-prop.name=value instead of -Dname=value. +# To set system properties for unit tests define test-sys-prop.name=value: +run.jvmargs= +run.test.classpath=\ + ${javac.test.classpath}:\ + ${build.test.classes.dir} +source.encoding=UTF-8 +src.dir=src +test.src.dir=test diff --git a/nbproject/project.xml b/nbproject/project.xml new file mode 100644 index 0000000..aaef623 --- /dev/null +++ b/nbproject/project.xml @@ -0,0 +1,15 @@ + + + org.netbeans.modules.java.j2seproject + + + SetGame + + + + + + + + + diff --git a/src/net/jrtechs/setgame/Card.java b/src/net/jrtechs/setgame/Card.java new file mode 100644 index 0000000..6128750 --- /dev/null +++ b/src/net/jrtechs/setgame/Card.java @@ -0,0 +1,158 @@ +package net.jrtechs.setgame; + +public class Card +{ + //color,number, shape, shading + private final int number; //0,1,2 + private final int color; //0-red,1-blue,2-green + private final int shape; //0-square,1-triangle,2-circle + private final int shading; //0-solid, 1-striped, 2-clear + private boolean inUse = true; + //constructor + Card(int num, int col, int shap, int shad) + { + number = num; + color = col; + shape = shap; + shading = shad; + } + public int getNumber() + { + return number; + } + public int getColor() + { + return color; + } + public int getShape() + { + return shape; + } + public int getShading() + { + return shading; + } + public boolean getInUse() + { + return inUse; + } + public void setInUse(boolean change) + { + inUse = change; + } + public String toString() + { + String dis = new String(); + switch(number) + { + case 0: dis = "1"; + break; + case 1: dis = "2"; + break; + case 2: dis = "3"; + } + switch(color) + { + case 0: dis += " red"; + break; + case 1: dis += " blue"; + break; + case 2: dis += " green"; + } + switch(shape) + { + case 0: dis += " square"; + break; + case 1: dis += " triangle"; + break; + case 2: dis += " circle"; + } + switch(shading) + { + case 0: dis += " solid"; + break; + case 1: dis += " striped"; + break; + case 2: dis += " clear"; + } + + return dis; + } + public boolean equals(Card check) + { + if(check.shape == this.shape && check.color == this.color && check.number == this.number && check.shading == this.shading) + { + return true; + } + return false; + } + public static boolean equals(Card one, Card two, Card three) + { + if(one.equals(two) || one.equals(three) || two.equals(three)) + { + return false; + } + return true; + } + //compares the colors of three cards + public static boolean compare_color(Card one, Card two, Card three) + { + if(one.color == two.color && one.color == three.color) + { + return true; + } + else if(one.color != two.color && one.color != three.color && two.color != three.color) + { + return true; + } + return false; + } + //compares the number of three cards + public static boolean compare_number(Card one, Card two, Card three) + { + if(one.number == two.number && one.number == three.number) + { + return true; + } + else if(one.number != two.number && one.number != three.number && two.number != three.number) + { + return true; + } + return false; + } + //compares the shading of the three cards + public static boolean compare_shading(Card one, Card two, Card three) + { + if(one.shading == two.shading && one.shading == three.shading) + { + return true; + } + else if(one.shading != two.shading && one.shading != three.shading && two.shading != three.shading) + { + return true; + } + return false; + } + //checks to see if three cards have the same shale + public static boolean compare_shape(Card one, Card two, Card three) + { + if(one.shape == two.shape && one.shape == three.shape) + { + return true; + } + else if(one.shape != two.shape && one.shape != three.shape && two.shape != three.shape) + { + return true; + } + return false; + } + //checks to see if three cards are a set + public static boolean isSet(Card one, Card two, Card three) + { + if(Card.compare_color(one, two, three) && Card.compare_number(one, two, three) && Card.compare_shading(one, two, three) && Card.compare_shape(one, two, three)) + { + return true; + } + return false; + } +} diff --git a/src/net/jrtechs/setgame/Deck.java b/src/net/jrtechs/setgame/Deck.java new file mode 100644 index 0000000..6a695e4 --- /dev/null +++ b/src/net/jrtechs/setgame/Deck.java @@ -0,0 +1,58 @@ +package net.jrtechs.setgame; + +import java.util.ArrayList; + +public class Deck +{ + private ArrayList deck; + + //constructor + Deck() + { + deck=new ArrayList(81); + //color,number, shape, shading + for(int c = 0; c < 3; c++) + for(int n = 0; n < 3; n++) + for(int s = 0; s < 3; s++) + for(int sa = 0; sa < 3; sa++) + deck.add(new Card(c,n,s,sa)); + } + public void shuffle() + { + int elem1, elem2; + for (int i=0; i<300; i++) + { + elem1=(int)(Math.random()*deck.size()); + elem2=(int)(Math.random()*deck.size()); + Card temp=deck.get(elem1); + deck.set(elem1, deck.get(elem2)); + deck.set(elem2, temp); + } + } + public void display() + { + System.out.println(deck.size()); + for(int i = 0; i < deck.size(); i++) + { + System.out.println(deck.get(i)); + } + + } + public Card[] dealMany(int num) + { + Card[] temp=new Card[num]; + for (int i=0; i sel; + sel = selected(cards); + if(sel.size() == 3) + { + //there is a set selected + if(Card.isSet(sel.get(0),sel.get(1), sel.get(2))) + { + sets++; + //calculates score to be given baised on time took and cards on board + if(currentDisplay ==12) + { + int temp = 100 - timeOnSet; + if(temp > 0) + { + score +=temp; + } + } + score += 50; //base score + timeOnSet = 0; + Card[] remove = {sel.get(0),sel.get(1), sel.get(2)}; + if(deck.cardsLeft() > 2) + { + hand.removePair(remove, deck); + if(currentDisplay > 12) + { + currentDisplay -= 3; + hand.resize(currentDisplay, deck); + for(int i = 12; i < 15; i ++) + { + cards[i].setVisible(false); + } + } + updateBoard(cards); + } + else + { + for(SetButton elem : cards) + { + if(elem.getPressed()) + { + hand.disableCard(elem.getCard()); + elem.setEnabled(false); + elem.setBackground(Color.black); + } + } + + } + if(deck.cardsLeft() < 3) + { + setsLeft = 0; + } + else + { + setsLeft= hand.setsLeft(); + } + } + diselectCards(cards); + } + } + public void openThree(SetButton[] cards) + { + if(currentDisplay == 12) + { + currentDisplay += 3; + hand.resize(currentDisplay, deck); + //hand.display(); + + for(int i = 12; i < cards.length; i++) + { + cards[i].setVisible(true); + } + this.updateBoard(cards); + } + else + { + + } + + } + public void updateBoard(SetButton[] cards) + { + int count = 0; + for(Card elem : hand.getHand()) + { + if(count >= currentDisplay) + { + + } + else + { + cards[count].setCard(elem); + count ++; + } + } + for(SetButton elem : cards) + { + elem.update(); + elem.setBackground(Color.white); + elem.setSelected(false); + elem.setEnabled(true); + } + } + public void findSet(SetButton[] cards) + { + Card[] set = hand.findSet(); + for(Card elem : set) + { + int loc = hand.location(elem); + //row * (4) + col + cards[loc].setBackground(Color.PINK); + } + } + public int getTime() + { + return time; + } + public int getNumSets() + { + return sets; + } + public int getScore() + { + return score; + } + public int modScore(int change) + { + score +=change; + return score; + } + public Deck getDeck() + { + return deck; + } + public int getSetsLeft() + { + setsLeft = hand.setsLeft(); + return setsLeft; + } + public void setScore(int newScore) + { + score = newScore; + } + private void diselectCards(SetButton[] cards) + { + for(SetButton elem : cards) + { + if(elem.getPressed()) + { + elem.setBackground(Color.white); + elem.setPressed(false); + } + } + } + private ArrayList selected(SetButton[] cards) + { + ArrayList selectedCards = new ArrayList(); + for(SetButton elem : cards) + { + if(elem.getPressed()) + { + selectedCards.add(elem.getCard()); + } + } + return selectedCards; + } +} diff --git a/src/net/jrtechs/setgame/Hand.java b/src/net/jrtechs/setgame/Hand.java new file mode 100644 index 0000000..ac26312 --- /dev/null +++ b/src/net/jrtechs/setgame/Hand.java @@ -0,0 +1,134 @@ +package net.jrtechs.setgame; + +public class Hand +{ + private Card[] hand; + + Hand(Card[] temp) + { + hand= temp; + } + public void resize(int newSize, Deck deckT) + { + + Card[] transfer = new Card[newSize]; + int count = 0; + for(Card c: hand) + { + if(c == null) + { + //skip the null cards + } + else + { + transfer[count] = c; + count++; + } + } + for(int i = count; i < newSize; i++) + { + transfer[i] = deckT.deal(); + } + hand = transfer; + } + public Card getCard(int e) + { + return hand[e]; + } + public void display() + { + + for(Card elem : hand) + System.out.print(elem + " "); + System.out.println(""); + + + } + public Card[] getHand() + { + return hand; + } + public Card[] findSet() + { + Card[] match = new Card[3]; + //checks each possible combination of three on the hand to find a set + for(Card one: hand) + for(Card two: hand) + for(Card three : hand) + if(Card.isSet(one, two, three) && Card.equals(one, two, three)) + if(one.getInUse() && two.getInUse() && three.getInUse()) + { + match[0] = one; + match[1] = two; + match[2] = three; + return match; + } + return match; + + } + public int setsLeft() + { + int count = 0; + for(Card one: hand) + for(Card two: hand) + for(Card three : hand) + if(Card.isSet(one, two, three) && Card.equals(one, two, three)) + if(one.getInUse() && two.getInUse() && three.getInUse()) + count++; + + //gets rid of all permutations + return count/6; + } + public int location(Card find) + { + for(int i = 0; i < hand.length; i++) + { + if(hand[i] == null) + { + + } + else if(find.equals(hand[i])) + { + return i; + } + } + return -1; + } + public void removePair(Card[] remove, Deck deckT) + { + if(deckT.cardsLeft() < 2) + { + //not enough cards in deck to replace w/ new cards + + for(Card c : remove) + { + hand[this.location(c)] = null; + } + } + else if(hand.length > 12) + { + for(Card c : remove) + { + hand[location(c)] = null; + } + //condense the deck + this.resize(hand.length -3, deckT); + } + else + { + //removes a set and replaces it with new cards + int i = 0; + Card[] replace = deckT.dealMany(remove.length); + for(Card c : remove) + { + hand[this.location(c)] = replace[i]; + i++; + } + } + + } + public void disableCard(Card c) + { + hand[this.location(c)].setInUse(false); + } +} diff --git a/src/net/jrtechs/setgame/SetButton.java b/src/net/jrtechs/setgame/SetButton.java new file mode 100644 index 0000000..604f2bc --- /dev/null +++ b/src/net/jrtechs/setgame/SetButton.java @@ -0,0 +1,70 @@ +package net.jrtechs.setgame; + +import java.awt.Color; +import javax.swing.JButton; + +public class SetButton extends JButton +{ + private boolean pressed; + private Card card; + private int loc; + SetButton() + { + pressed = false; + } + SetButton(int x) + { + pressed = false; + loc = x; + } + public void clicked() + { + if(pressed) + { + pressed = false; + this.setBackground(Color.WHITE); + } + else + { + this.setBackground(Color.gray); + pressed = true; + } + + } + public void update() + { + if(card == null) + { + //do nothing + } + else + { + //sets the image of the button baised on its properties + //images located in the /src folder, file are named as a 4 digit number + //each digit represents a property of the image(shape, number, color, shading) + String src = "/net/jrtechs/setgame/img/" + card.getShape() + card.getNumber() + card.getColor() + card.getShading() + ".png"; + //this.setText(card.toString()); + this.setIcon(new javax.swing.ImageIcon(getClass().getResource(src))); + } + } + public Card getCard() + { + return card; + } + public void setCard(Card newCard) + { + card = newCard; + } + public int getLoc() + { + return loc; + } + public boolean getPressed() + { + return pressed; + } + public void setPressed(boolean sel) + { + pressed = sel; + } +} \ No newline at end of file diff --git a/src/net/jrtechs/setgame/SetGame.form b/src/net/jrtechs/setgame/SetGame.form new file mode 100644 index 0000000..06cda19 --- /dev/null +++ b/src/net/jrtechs/setgame/SetGame.form @@ -0,0 +1,140 @@ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/net/jrtechs/setgame/SetGame.java b/src/net/jrtechs/setgame/SetGame.java new file mode 100644 index 0000000..9a33656 --- /dev/null +++ b/src/net/jrtechs/setgame/SetGame.java @@ -0,0 +1,276 @@ +package net.jrtechs.setgame; + +import javax.swing.JOptionPane; +import java.awt.event.*; +import javax.swing.Timer; +/* +jeffery R +12-26-15 +gui component for set +*/ +public class SetGame extends javax.swing.JFrame implements ActionListener +{ + private SetButton[] cards = new SetButton[15]; + private Game game; + + public SetGame() + { + initComponents(); + initSetButtons(); + showButtons(false); + cmdFindSet.setEnabled(false); + cmdOpen3.setEnabled(false); + + //creates an event listener for the timer + ActionListener actTimer = new ActionListener() + { + + public void actionPerformed(ActionEvent e) + { + if(game == null) + { + + } + else + { + game.timerTic(); + lblTime.setText("Time " + game.getTime()); + + } + } + }; + Timer timer = new Timer(1000, actTimer); + timer.start(); + } + public void showButtons(Boolean set) + { + for(int i = 0; i < 12; i++) + { + cards[i].setVisible(set); + } + } + private void initSetButtons() + { + //fills the array with new SetButtons and ands action listeners + for(int i = 0; i < cards.length; i++) + { + cards[i] = new SetButton(i); + cards[i].addActionListener(this); + } + + //sets the location of each of the buttons on the absolute layout + getContentPane().add(cards[0], new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 11, 146, 84)); + getContentPane().add(cards[1], new org.netbeans.lib.awtextra.AbsoluteConstraints(172, 11, 146, 84)); + getContentPane().add(cards[2], new org.netbeans.lib.awtextra.AbsoluteConstraints(336, 11, 146, 84)); + getContentPane().add(cards[3], new org.netbeans.lib.awtextra.AbsoluteConstraints(500, 11, 146, 84)); + getContentPane().add(cards[4], new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 121, 146, 84)); + getContentPane().add(cards[5], new org.netbeans.lib.awtextra.AbsoluteConstraints(172, 121, 146, 84)); + getContentPane().add(cards[6], new org.netbeans.lib.awtextra.AbsoluteConstraints(336, 121, 146, 84)); + getContentPane().add(cards[7], new org.netbeans.lib.awtextra.AbsoluteConstraints(500, 121, 146, 84)); + getContentPane().add(cards[8], new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 233, 146, 84)); + getContentPane().add(cards[9], new org.netbeans.lib.awtextra.AbsoluteConstraints(172, 233, 146, 84)); + getContentPane().add(cards[10], new org.netbeans.lib.awtextra.AbsoluteConstraints(336, 233, 146, 84)); + getContentPane().add(cards[11], new org.netbeans.lib.awtextra.AbsoluteConstraints(500, 233, 146, 84)); + + getContentPane().add(cards[12], new org.netbeans.lib.awtextra.AbsoluteConstraints(664, 11, 146, 84)); + getContentPane().add(cards[13], new org.netbeans.lib.awtextra.AbsoluteConstraints(664, 121, 146, 84)); + getContentPane().add(cards[14], new org.netbeans.lib.awtextra.AbsoluteConstraints(664, 233, 146, 84)); + for(int i = 12; i < 15; i++) + { + cards[i].setVisible(false); + } + } + + public void actionPerformed(ActionEvent e) + { + //System.out.println(e); + //casts the object of e to a setButton then calls the getLoc to find its index location in the cards "setButtons" array + SetButton clicked = (SetButton)e.getSource(); + cards[clicked.getLoc()].clicked(); + game.clicked(cards); + updateBoard(); + } + // //GEN-BEGIN:initComponents + private void initComponents() { + + cmdPlay = new javax.swing.JButton(); + lblScore = new javax.swing.JLabel(); + lblSets = new javax.swing.JLabel(); + lblCardsLeft = new javax.swing.JLabel(); + lblSetsOnBoard = new javax.swing.JLabel(); + cmdExit = new javax.swing.JButton(); + cmdFindSet = new javax.swing.JButton(); + cmdOpen3 = new javax.swing.JButton(); + lblTime = new javax.swing.JLabel(); + + setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); + setTitle("Set Game"); + setPreferredSize(new java.awt.Dimension(670, 500)); + getContentPane().setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout()); + + cmdPlay.setText("Play"); + cmdPlay.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmdPlayActionPerformed(evt); + } + }); + getContentPane().add(cmdPlay, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 343, 95, 38)); + + lblScore.setText("Score"); + getContentPane().add(lblScore, new org.netbeans.lib.awtextra.AbsoluteConstraints(390, 350, -1, -1)); + + lblSets.setText("Sets"); + getContentPane().add(lblSets, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 350, -1, -1)); + + lblCardsLeft.setText("Cards Left in Deck"); + getContentPane().add(lblCardsLeft, new org.netbeans.lib.awtextra.AbsoluteConstraints(390, 380, -1, -1)); + + lblSetsOnBoard.setText("Sets on board"); + getContentPane().add(lblSetsOnBoard, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 380, -1, -1)); + + cmdExit.setText("Exit"); + cmdExit.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmdExitActionPerformed(evt); + } + }); + getContentPane().add(cmdExit, new org.netbeans.lib.awtextra.AbsoluteConstraints(124, 400, 95, 38)); + + cmdFindSet.setText("Find a Set"); + cmdFindSet.setActionCommand("cmdFindaSet"); + cmdFindSet.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmdFindSetActionPerformed(evt); + } + }); + getContentPane().add(cmdFindSet, new org.netbeans.lib.awtextra.AbsoluteConstraints(124, 343, 95, 40)); + + cmdOpen3.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N + cmdOpen3.setText("Open 3 Cards"); + cmdOpen3.setToolTipText(""); + cmdOpen3.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(java.awt.event.ActionEvent evt) { + cmdOpen3ActionPerformed(evt); + } + }); + getContentPane().add(cmdOpen3, new org.netbeans.lib.awtextra.AbsoluteConstraints(10, 400, 95, 38)); + + lblTime.setText("Time"); + getContentPane().add(lblTime, new org.netbeans.lib.awtextra.AbsoluteConstraints(260, 410, -1, -1)); + + pack(); + }// //GEN-END:initComponents + + private void cmdPlayActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdPlayActionPerformed + cmdFindSet.setEnabled(true); + cmdOpen3.setEnabled(true); + game = new Game(); + showButtons(true); + for(int i = 12; i < 15; i++) + { + cards[i].setVisible(false); + } + cmdPlay.setText("New Game"); + game.updateBoard(cards); + this.updateBoard(); + }//GEN-LAST:event_cmdPlayActionPerformed + private void updateBoard() + { + lblScore.setText("Score " + game.getScore()); + lblSets.setText("Sets " + game.getNumSets()); + lblCardsLeft.setText("Cards Left in Deck " + game.getDeck().cardsLeft()); + lblSetsOnBoard.setText("Sets on board " + game.getSetsLeft()); + if(game.getSetsLeft() == 0) + { + + cmdFindSet.setEnabled(false); + endGame(); + } + else if(game.getHand().length==12 && game.getDeck().cardsLeft() > 2) + { + cmdOpen3.setEnabled(true); + + } + } + + private void cmdExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdExitActionPerformed + System.exit(-1); + }//GEN-LAST:event_cmdExitActionPerformed + private void endGame() + { + if(game.getHand().length ==12 && game.getDeck().cardsLeft() > 3) + { + JOptionPane.showMessageDialog(null,"There are no more sets left on the board. However, you can still open three cards.","",JOptionPane.WARNING_MESSAGE); + } + else + { + game = null; + cmdOpen3.setEnabled(false); + JOptionPane.showMessageDialog(null,"There are no more sets left on the board.","End of Game",JOptionPane.WARNING_MESSAGE); + + + } + } + private void cmdFindSetActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdFindSetActionPerformed + game.findSet(cards); + lblScore.setText("Score " + game.modScore(-150)); + }//GEN-LAST:event_cmdFindSetActionPerformed + + private void cmdOpen3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmdOpen3ActionPerformed + game.openThree(cards); + cmdOpen3.setEnabled(false); + updateBoard(); + this.setBounds(0,0, 830, 480); + if(game.getSetsLeft() == 0) + { + //end of game + endGame(); + } + else + { + //keep on playing game + cmdFindSet.setEnabled(true); + } + }//GEN-LAST:event_cmdOpen3ActionPerformed + public static void main(String args[]) { + // + /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel. + * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html + */ + try { + for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) { + if ("Nimbus".equals(info.getName())) { + javax.swing.UIManager.setLookAndFeel(info.getClassName()); + break; + } + } + } catch (ClassNotFoundException ex) { + java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (InstantiationException ex) { + java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (IllegalAccessException ex) { + java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } catch (javax.swing.UnsupportedLookAndFeelException ex) { + java.util.logging.Logger.getLogger(SetGame.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); + } + // + java.awt.EventQueue.invokeLater(new Runnable() { + public void run() { + new SetGame().setVisible(true); + } + }); + } + + // Variables declaration - do not modify//GEN-BEGIN:variables + private javax.swing.JButton cmdExit; + private javax.swing.JButton cmdFindSet; + private javax.swing.JButton cmdOpen3; + private javax.swing.JButton cmdPlay; + private javax.swing.JLabel lblCardsLeft; + private javax.swing.JLabel lblScore; + private javax.swing.JLabel lblSets; + private javax.swing.JLabel lblSetsOnBoard; + private javax.swing.JLabel lblTime; + // End of variables declaration//GEN-END:variables + +} diff --git a/src/net/jrtechs/setgame/img/0000.png b/src/net/jrtechs/setgame/img/0000.png new file mode 100644 index 0000000..7209cd4 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0000.png differ diff --git a/src/net/jrtechs/setgame/img/0001.png b/src/net/jrtechs/setgame/img/0001.png new file mode 100644 index 0000000..f800621 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0001.png differ diff --git a/src/net/jrtechs/setgame/img/0002.png b/src/net/jrtechs/setgame/img/0002.png new file mode 100644 index 0000000..2ab0197 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0002.png differ diff --git a/src/net/jrtechs/setgame/img/0010.png b/src/net/jrtechs/setgame/img/0010.png new file mode 100644 index 0000000..134a132 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0010.png differ diff --git a/src/net/jrtechs/setgame/img/0011.png b/src/net/jrtechs/setgame/img/0011.png new file mode 100644 index 0000000..f0bb945 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0011.png differ diff --git a/src/net/jrtechs/setgame/img/0012.png b/src/net/jrtechs/setgame/img/0012.png new file mode 100644 index 0000000..a583679 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0012.png differ diff --git a/src/net/jrtechs/setgame/img/0020.png b/src/net/jrtechs/setgame/img/0020.png new file mode 100644 index 0000000..63c0117 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0020.png differ diff --git a/src/net/jrtechs/setgame/img/0021.png b/src/net/jrtechs/setgame/img/0021.png new file mode 100644 index 0000000..d1685fb Binary files /dev/null and b/src/net/jrtechs/setgame/img/0021.png differ diff --git a/src/net/jrtechs/setgame/img/0022.png b/src/net/jrtechs/setgame/img/0022.png new file mode 100644 index 0000000..7ec513a Binary files /dev/null and b/src/net/jrtechs/setgame/img/0022.png differ diff --git a/src/net/jrtechs/setgame/img/0100.png b/src/net/jrtechs/setgame/img/0100.png new file mode 100644 index 0000000..954301e Binary files /dev/null and b/src/net/jrtechs/setgame/img/0100.png differ diff --git a/src/net/jrtechs/setgame/img/0101.png b/src/net/jrtechs/setgame/img/0101.png new file mode 100644 index 0000000..4ee8eb7 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0101.png differ diff --git a/src/net/jrtechs/setgame/img/0102.png b/src/net/jrtechs/setgame/img/0102.png new file mode 100644 index 0000000..c33061a Binary files /dev/null and b/src/net/jrtechs/setgame/img/0102.png differ diff --git a/src/net/jrtechs/setgame/img/0110.png b/src/net/jrtechs/setgame/img/0110.png new file mode 100644 index 0000000..09050d5 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0110.png differ diff --git a/src/net/jrtechs/setgame/img/0111.png b/src/net/jrtechs/setgame/img/0111.png new file mode 100644 index 0000000..b3513ed Binary files /dev/null and b/src/net/jrtechs/setgame/img/0111.png differ diff --git a/src/net/jrtechs/setgame/img/0112.png b/src/net/jrtechs/setgame/img/0112.png new file mode 100644 index 0000000..87aa692 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0112.png differ diff --git a/src/net/jrtechs/setgame/img/0120.png b/src/net/jrtechs/setgame/img/0120.png new file mode 100644 index 0000000..64364f9 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0120.png differ diff --git a/src/net/jrtechs/setgame/img/0121.png b/src/net/jrtechs/setgame/img/0121.png new file mode 100644 index 0000000..43c15ed Binary files /dev/null and b/src/net/jrtechs/setgame/img/0121.png differ diff --git a/src/net/jrtechs/setgame/img/0122.png b/src/net/jrtechs/setgame/img/0122.png new file mode 100644 index 0000000..3743693 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0122.png differ diff --git a/src/net/jrtechs/setgame/img/0200.png b/src/net/jrtechs/setgame/img/0200.png new file mode 100644 index 0000000..426a50a Binary files /dev/null and b/src/net/jrtechs/setgame/img/0200.png differ diff --git a/src/net/jrtechs/setgame/img/0201.png b/src/net/jrtechs/setgame/img/0201.png new file mode 100644 index 0000000..400d6b9 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0201.png differ diff --git a/src/net/jrtechs/setgame/img/0202.png b/src/net/jrtechs/setgame/img/0202.png new file mode 100644 index 0000000..81c0660 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0202.png differ diff --git a/src/net/jrtechs/setgame/img/0210.png b/src/net/jrtechs/setgame/img/0210.png new file mode 100644 index 0000000..d93980b Binary files /dev/null and b/src/net/jrtechs/setgame/img/0210.png differ diff --git a/src/net/jrtechs/setgame/img/0211.png b/src/net/jrtechs/setgame/img/0211.png new file mode 100644 index 0000000..07ae009 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0211.png differ diff --git a/src/net/jrtechs/setgame/img/0212.png b/src/net/jrtechs/setgame/img/0212.png new file mode 100644 index 0000000..c360d63 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0212.png differ diff --git a/src/net/jrtechs/setgame/img/0220.png b/src/net/jrtechs/setgame/img/0220.png new file mode 100644 index 0000000..548e7aa Binary files /dev/null and b/src/net/jrtechs/setgame/img/0220.png differ diff --git a/src/net/jrtechs/setgame/img/0221.png b/src/net/jrtechs/setgame/img/0221.png new file mode 100644 index 0000000..8c11232 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0221.png differ diff --git a/src/net/jrtechs/setgame/img/0222.png b/src/net/jrtechs/setgame/img/0222.png new file mode 100644 index 0000000..7e13cc6 Binary files /dev/null and b/src/net/jrtechs/setgame/img/0222.png differ diff --git a/src/net/jrtechs/setgame/img/1000.png b/src/net/jrtechs/setgame/img/1000.png new file mode 100644 index 0000000..882b8e3 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1000.png differ diff --git a/src/net/jrtechs/setgame/img/1001.png b/src/net/jrtechs/setgame/img/1001.png new file mode 100644 index 0000000..eb841b1 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1001.png differ diff --git a/src/net/jrtechs/setgame/img/1002.png b/src/net/jrtechs/setgame/img/1002.png new file mode 100644 index 0000000..8f96298 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1002.png differ diff --git a/src/net/jrtechs/setgame/img/1010.png b/src/net/jrtechs/setgame/img/1010.png new file mode 100644 index 0000000..8299906 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1010.png differ diff --git a/src/net/jrtechs/setgame/img/1011.png b/src/net/jrtechs/setgame/img/1011.png new file mode 100644 index 0000000..dfe6057 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1011.png differ diff --git a/src/net/jrtechs/setgame/img/1012.png b/src/net/jrtechs/setgame/img/1012.png new file mode 100644 index 0000000..c4498f3 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1012.png differ diff --git a/src/net/jrtechs/setgame/img/1020.png b/src/net/jrtechs/setgame/img/1020.png new file mode 100644 index 0000000..5b0d3f0 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1020.png differ diff --git a/src/net/jrtechs/setgame/img/1021.png b/src/net/jrtechs/setgame/img/1021.png new file mode 100644 index 0000000..1745ea9 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1021.png differ diff --git a/src/net/jrtechs/setgame/img/1022.png b/src/net/jrtechs/setgame/img/1022.png new file mode 100644 index 0000000..9193aa3 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1022.png differ diff --git a/src/net/jrtechs/setgame/img/1100.png b/src/net/jrtechs/setgame/img/1100.png new file mode 100644 index 0000000..2f497eb Binary files /dev/null and b/src/net/jrtechs/setgame/img/1100.png differ diff --git a/src/net/jrtechs/setgame/img/1101.png b/src/net/jrtechs/setgame/img/1101.png new file mode 100644 index 0000000..a2a4b10 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1101.png differ diff --git a/src/net/jrtechs/setgame/img/1102.png b/src/net/jrtechs/setgame/img/1102.png new file mode 100644 index 0000000..fdb3458 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1102.png differ diff --git a/src/net/jrtechs/setgame/img/1110.png b/src/net/jrtechs/setgame/img/1110.png new file mode 100644 index 0000000..834bf67 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1110.png differ diff --git a/src/net/jrtechs/setgame/img/1111.png b/src/net/jrtechs/setgame/img/1111.png new file mode 100644 index 0000000..0d267e4 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1111.png differ diff --git a/src/net/jrtechs/setgame/img/1112.png b/src/net/jrtechs/setgame/img/1112.png new file mode 100644 index 0000000..b9b96d8 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1112.png differ diff --git a/src/net/jrtechs/setgame/img/1120.png b/src/net/jrtechs/setgame/img/1120.png new file mode 100644 index 0000000..5da07e3 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1120.png differ diff --git a/src/net/jrtechs/setgame/img/1121.png b/src/net/jrtechs/setgame/img/1121.png new file mode 100644 index 0000000..3590b42 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1121.png differ diff --git a/src/net/jrtechs/setgame/img/1122.png b/src/net/jrtechs/setgame/img/1122.png new file mode 100644 index 0000000..d7ec2d2 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1122.png differ diff --git a/src/net/jrtechs/setgame/img/1200.png b/src/net/jrtechs/setgame/img/1200.png new file mode 100644 index 0000000..4a988e5 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1200.png differ diff --git a/src/net/jrtechs/setgame/img/1201.png b/src/net/jrtechs/setgame/img/1201.png new file mode 100644 index 0000000..d72f878 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1201.png differ diff --git a/src/net/jrtechs/setgame/img/1202.png b/src/net/jrtechs/setgame/img/1202.png new file mode 100644 index 0000000..b60ad05 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1202.png differ diff --git a/src/net/jrtechs/setgame/img/1210.png b/src/net/jrtechs/setgame/img/1210.png new file mode 100644 index 0000000..b24e9ac Binary files /dev/null and b/src/net/jrtechs/setgame/img/1210.png differ diff --git a/src/net/jrtechs/setgame/img/1211.png b/src/net/jrtechs/setgame/img/1211.png new file mode 100644 index 0000000..fb587d4 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1211.png differ diff --git a/src/net/jrtechs/setgame/img/1212.png b/src/net/jrtechs/setgame/img/1212.png new file mode 100644 index 0000000..eb36d97 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1212.png differ diff --git a/src/net/jrtechs/setgame/img/1220.png b/src/net/jrtechs/setgame/img/1220.png new file mode 100644 index 0000000..ec57f11 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1220.png differ diff --git a/src/net/jrtechs/setgame/img/1221.png b/src/net/jrtechs/setgame/img/1221.png new file mode 100644 index 0000000..ee1c333 Binary files /dev/null and b/src/net/jrtechs/setgame/img/1221.png differ diff --git a/src/net/jrtechs/setgame/img/1222.png b/src/net/jrtechs/setgame/img/1222.png new file mode 100644 index 0000000..0e2de6c Binary files /dev/null and b/src/net/jrtechs/setgame/img/1222.png differ diff --git a/src/net/jrtechs/setgame/img/2000.png b/src/net/jrtechs/setgame/img/2000.png new file mode 100644 index 0000000..fde046d Binary files /dev/null and b/src/net/jrtechs/setgame/img/2000.png differ diff --git a/src/net/jrtechs/setgame/img/2001.png b/src/net/jrtechs/setgame/img/2001.png new file mode 100644 index 0000000..e0bf5ee Binary files /dev/null and b/src/net/jrtechs/setgame/img/2001.png differ diff --git a/src/net/jrtechs/setgame/img/2002.png b/src/net/jrtechs/setgame/img/2002.png new file mode 100644 index 0000000..8c9b5b2 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2002.png differ diff --git a/src/net/jrtechs/setgame/img/2010.png b/src/net/jrtechs/setgame/img/2010.png new file mode 100644 index 0000000..8c76cb7 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2010.png differ diff --git a/src/net/jrtechs/setgame/img/2011.png b/src/net/jrtechs/setgame/img/2011.png new file mode 100644 index 0000000..0a27038 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2011.png differ diff --git a/src/net/jrtechs/setgame/img/2012.png b/src/net/jrtechs/setgame/img/2012.png new file mode 100644 index 0000000..a36e511 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2012.png differ diff --git a/src/net/jrtechs/setgame/img/2020.png b/src/net/jrtechs/setgame/img/2020.png new file mode 100644 index 0000000..8dea7da Binary files /dev/null and b/src/net/jrtechs/setgame/img/2020.png differ diff --git a/src/net/jrtechs/setgame/img/2021.png b/src/net/jrtechs/setgame/img/2021.png new file mode 100644 index 0000000..1a6f12a Binary files /dev/null and b/src/net/jrtechs/setgame/img/2021.png differ diff --git a/src/net/jrtechs/setgame/img/2022.png b/src/net/jrtechs/setgame/img/2022.png new file mode 100644 index 0000000..1b07e47 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2022.png differ diff --git a/src/net/jrtechs/setgame/img/2100.png b/src/net/jrtechs/setgame/img/2100.png new file mode 100644 index 0000000..9fbbcf1 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2100.png differ diff --git a/src/net/jrtechs/setgame/img/2101.png b/src/net/jrtechs/setgame/img/2101.png new file mode 100644 index 0000000..bab0242 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2101.png differ diff --git a/src/net/jrtechs/setgame/img/2102.png b/src/net/jrtechs/setgame/img/2102.png new file mode 100644 index 0000000..9d2e529 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2102.png differ diff --git a/src/net/jrtechs/setgame/img/2110.png b/src/net/jrtechs/setgame/img/2110.png new file mode 100644 index 0000000..fa266a7 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2110.png differ diff --git a/src/net/jrtechs/setgame/img/2111.png b/src/net/jrtechs/setgame/img/2111.png new file mode 100644 index 0000000..7a6be59 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2111.png differ diff --git a/src/net/jrtechs/setgame/img/2112.png b/src/net/jrtechs/setgame/img/2112.png new file mode 100644 index 0000000..27ce32e Binary files /dev/null and b/src/net/jrtechs/setgame/img/2112.png differ diff --git a/src/net/jrtechs/setgame/img/2120.png b/src/net/jrtechs/setgame/img/2120.png new file mode 100644 index 0000000..88bcfe0 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2120.png differ diff --git a/src/net/jrtechs/setgame/img/2121.png b/src/net/jrtechs/setgame/img/2121.png new file mode 100644 index 0000000..bb86617 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2121.png differ diff --git a/src/net/jrtechs/setgame/img/2122.png b/src/net/jrtechs/setgame/img/2122.png new file mode 100644 index 0000000..e0ec746 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2122.png differ diff --git a/src/net/jrtechs/setgame/img/2200.png b/src/net/jrtechs/setgame/img/2200.png new file mode 100644 index 0000000..1d804c6 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2200.png differ diff --git a/src/net/jrtechs/setgame/img/2201.png b/src/net/jrtechs/setgame/img/2201.png new file mode 100644 index 0000000..1dba739 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2201.png differ diff --git a/src/net/jrtechs/setgame/img/2202.png b/src/net/jrtechs/setgame/img/2202.png new file mode 100644 index 0000000..7770e87 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2202.png differ diff --git a/src/net/jrtechs/setgame/img/2210.png b/src/net/jrtechs/setgame/img/2210.png new file mode 100644 index 0000000..613f8cb Binary files /dev/null and b/src/net/jrtechs/setgame/img/2210.png differ diff --git a/src/net/jrtechs/setgame/img/2211.png b/src/net/jrtechs/setgame/img/2211.png new file mode 100644 index 0000000..4074cca Binary files /dev/null and b/src/net/jrtechs/setgame/img/2211.png differ diff --git a/src/net/jrtechs/setgame/img/2212.png b/src/net/jrtechs/setgame/img/2212.png new file mode 100644 index 0000000..d77239a Binary files /dev/null and b/src/net/jrtechs/setgame/img/2212.png differ diff --git a/src/net/jrtechs/setgame/img/2220.png b/src/net/jrtechs/setgame/img/2220.png new file mode 100644 index 0000000..8c1fc41 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2220.png differ diff --git a/src/net/jrtechs/setgame/img/2221.png b/src/net/jrtechs/setgame/img/2221.png new file mode 100644 index 0000000..71dbd17 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2221.png differ diff --git a/src/net/jrtechs/setgame/img/2222.png b/src/net/jrtechs/setgame/img/2222.png new file mode 100644 index 0000000..2bd65e7 Binary files /dev/null and b/src/net/jrtechs/setgame/img/2222.png differ