Guest User

Untitled

a guest
Jun 7th, 2014
1,172
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import java.awt.Color;
  2. import java.awt.GraphicsDevice;
  3. import java.awt.GraphicsEnvironment;
  4. import java.awt.MouseInfo;
  5. import java.awt.Point;
  6. import java.awt.Rectangle;
  7. import java.awt.Robot;
  8. import java.awt.Toolkit;
  9. import java.awt.event.InputEvent;
  10. import java.awt.geom.Point2D;
  11. import java.awt.image.BufferedImage;
  12. import java.io.File;
  13. import java.io.FileOutputStream;
  14. import java.io.IOException;
  15. import java.net.MalformedURLException;
  16. import java.net.URL;
  17. import java.nio.channels.Channels;
  18. import java.nio.channels.ReadableByteChannel;
  19. import java.nio.file.Files;
  20. import java.nio.file.Paths;
  21. import java.util.ArrayList;
  22.  
  23.  
  24. import javax.imageio.ImageIO;
  25.  
  26. class Card{
  27.    
  28.     int id;
  29.     String shape;
  30.     String color;
  31.     String infill;
  32.     int shapeCount;
  33.     byte[] fileBytes;
  34.     Point position;
  35.    
  36.     Card(int id, String shape, String color, String infill, int shapeCount) throws Exception{
  37.         this.id = id;
  38.         this.shape = shape;
  39.         this.color = color;
  40.         this.infill = infill;
  41.         this.shapeCount = shapeCount;
  42.         this.fileBytes = Files.readAllBytes(Paths.get(id+".png"));
  43.     }
  44. }
  45.  
  46. public class SetBeater {
  47.  
  48.     public static void main(String[] args) throws Exception {
  49.        
  50.         Card[] allCards = new Card[81];
  51.         allCards[0] = new Card(1, "squiggle", "red", "solid", 1);
  52.         allCards[1] = new Card(2, "squiggle", "red", "solid", 2);
  53.         allCards[2] = new Card(3, "squiggle", "red", "solid", 3);
  54.         allCards[3] = new Card(4, "squiggle", "purple", "solid", 1);
  55.         allCards[4] = new Card(5, "squiggle", "purple", "solid", 2);
  56.         allCards[5] = new Card(6, "squiggle", "purple", "solid", 3);
  57.         allCards[6] = new Card(7, "squiggle", "green", "solid", 1);
  58.         allCards[7] = new Card(8, "squiggle", "green", "solid", 2);
  59.         allCards[8] = new Card(9, "squiggle", "green", "solid", 3);
  60.        
  61.         allCards[9] = new Card(10, "diamond", "red", "solid", 1);
  62.         allCards[10] = new Card(11, "diamond", "red", "solid", 2);
  63.         allCards[11] = new Card(12, "diamond", "red", "solid", 3);
  64.         allCards[12] = new Card(13, "diamond", "purple", "solid", 1);
  65.         allCards[13] = new Card(14, "diamond", "purple", "solid", 2);
  66.         allCards[14] = new Card(15, "diamond", "purple", "solid", 3);
  67.         allCards[15] = new Card(16, "diamond", "green", "solid", 1);
  68.         allCards[16] = new Card(17, "diamond", "green", "solid", 2);
  69.         allCards[17] = new Card(18, "diamond", "green", "solid", 3);
  70.        
  71.         allCards[18] = new Card(19, "oval", "red", "solid", 1);
  72.         allCards[19] = new Card(20, "oval", "red", "solid", 2);
  73.         allCards[20] = new Card(21, "oval", "red", "solid", 3);
  74.         allCards[21] = new Card(22, "oval", "purple", "solid", 1);
  75.         allCards[22] = new Card(23, "oval", "purple", "solid", 2);
  76.         allCards[23] = new Card(24, "oval", "purple", "solid", 3);
  77.         allCards[24] = new Card(25, "oval", "green", "solid", 1);
  78.         allCards[25] = new Card(26, "oval", "green", "solid", 2);
  79.         allCards[26] = new Card(27, "oval", "green", "solid", 3);
  80.        
  81.         allCards[27] = new Card(28, "squiggle", "red", "stripe", 1);
  82.         allCards[28] = new Card(29, "squiggle", "red", "stripe", 2);
  83.         allCards[29] = new Card(30, "squiggle", "red", "stripe", 3);
  84.         allCards[30] = new Card(31, "squiggle", "purple", "stripe", 1);
  85.         allCards[31] = new Card(32, "squiggle", "purple", "stripe", 2);
  86.         allCards[32] = new Card(33, "squiggle", "purple", "stripe", 3);
  87.         allCards[33] = new Card(34, "squiggle", "green", "stripe", 1);
  88.         allCards[34] = new Card(35, "squiggle", "green", "stripe", 2);
  89.         allCards[35] = new Card(36, "squiggle", "green", "stripe", 3);
  90.        
  91.         allCards[36] = new Card(37, "diamond", "red", "stripe", 1);
  92.         allCards[37] = new Card(38, "diamond", "red", "stripe", 2);
  93.         allCards[38] = new Card(39, "diamond", "red", "stripe", 3);
  94.         allCards[39] = new Card(40, "diamond", "purple", "stripe", 1);
  95.         allCards[40] = new Card(41, "diamond", "purple", "stripe", 2);
  96.         allCards[41] = new Card(42, "diamond", "purple", "stripe", 3);
  97.         allCards[42] = new Card(43, "diamond", "green", "stripe", 1);
  98.         allCards[43] = new Card(44, "diamond", "green", "stripe", 2);
  99.         allCards[44] = new Card(45, "diamond", "green", "stripe", 3);
  100.        
  101.         allCards[45] = new Card(46, "oval", "red", "stripe", 1);
  102.         allCards[46] = new Card(47, "oval", "red", "stripe", 2);
  103.         allCards[47] = new Card(48, "oval", "red", "stripe", 3);
  104.         allCards[48] = new Card(49, "oval", "purple", "stripe", 1);
  105.         allCards[49] = new Card(50, "oval", "purple", "stripe", 2);
  106.         allCards[50] = new Card(51, "oval", "purple", "stripe", 3);
  107.         allCards[51] = new Card(52, "oval", "green", "stripe", 1);
  108.         allCards[52] = new Card(53, "oval", "green", "stripe", 2);
  109.         allCards[53] = new Card(54, "oval", "green", "stripe", 3);
  110.        
  111.         allCards[54] = new Card(55, "squiggle", "red", "empty", 1);
  112.         allCards[55] = new Card(56, "squiggle", "red", "empty", 2);
  113.         allCards[56] = new Card(57, "squiggle", "red", "empty", 3);
  114.         allCards[57] = new Card(58, "squiggle", "purple", "empty", 1);
  115.         allCards[58] = new Card(59, "squiggle", "purple", "empty", 2);
  116.         allCards[59] = new Card(60, "squiggle", "purple", "empty", 3);
  117.         allCards[60] = new Card(61, "squiggle", "green", "empty", 1);
  118.         allCards[61] = new Card(62, "squiggle", "green", "empty", 2);
  119.         allCards[62] = new Card(63, "squiggle", "green", "empty", 3);
  120.        
  121.         allCards[63] = new Card(64, "diamond", "red", "empty", 1);
  122.         allCards[64] = new Card(65, "diamond", "red", "empty", 2);
  123.         allCards[65] = new Card(66, "diamond", "red", "empty", 3);
  124.         allCards[66] = new Card(67, "diamond", "purple", "empty", 1);
  125.         allCards[67] = new Card(68, "diamond", "purple", "empty", 2);
  126.         allCards[68] = new Card(69, "diamond", "purple", "empty", 3);
  127.         allCards[69] = new Card(70, "diamond", "green", "empty", 1);
  128.         allCards[70] = new Card(71, "diamond", "green", "empty", 2);
  129.         allCards[71] = new Card(72, "diamond", "green", "empty", 3);
  130.        
  131.         allCards[72] = new Card(73, "oval", "red", "empty", 1);
  132.         allCards[73] = new Card(74, "oval", "red", "empty", 2);
  133.         allCards[74] = new Card(75, "oval", "red", "empty", 3);
  134.         allCards[75] = new Card(76, "oval", "purple", "empty", 1);
  135.         allCards[76] = new Card(77, "oval", "purple", "empty", 2);
  136.         allCards[77] = new Card(78, "oval", "purple", "empty", 3);
  137.         allCards[78] = new Card(79, "oval", "green", "empty", 1);
  138.         allCards[79] = new Card(80, "oval", "green", "empty", 2);
  139.         allCards[80] = new Card(81, "oval", "green", "empty", 3);
  140.        
  141.         GraphicsEnvironment ge = GraphicsEnvironment.getLocalGraphicsEnvironment();  
  142.         GraphicsDevice[] screens = ge.getScreenDevices();  
  143.        
  144.         Rectangle screenBounds = screens[1].getDefaultConfiguration().getBounds();
  145.         BufferedImage image = new Robot().createScreenCapture(screenBounds);
  146.        
  147.         int rows = 3, cols = 4;
  148.         BufferedImage[][] cards = new BufferedImage[rows][cols];
  149.         cards[0][0] = image.getSubimage(245, 499, 95, 62);
  150.         cards[0][1] = image.getSubimage(394, 499, 95, 62);
  151.         cards[0][2] = image.getSubimage(543, 499, 95, 62);
  152.         cards[0][3] = image.getSubimage(693, 499, 95, 62);
  153.        
  154.         cards[1][0] = image.getSubimage(245, 588, 95, 62);
  155.         cards[1][1] = image.getSubimage(394, 588, 95, 62);
  156.         cards[1][2] = image.getSubimage(543, 588, 95, 62);
  157.         cards[1][3] = image.getSubimage(693, 588, 95, 62);
  158.        
  159.         cards[2][0] = image.getSubimage(245, 677, 95, 62);
  160.         cards[2][1] = image.getSubimage(394, 677, 95, 62);
  161.         cards[2][2] = image.getSubimage(543, 677, 95, 62);
  162.         cards[2][3] = image.getSubimage(693, 677, 95, 62);
  163.        
  164.         ArrayList<Byte> [][] cardBytes = new ArrayList[rows][cols];
  165.         for(int i=0; i<rows; i++)
  166.             for(int j=0; j<cols; j++){
  167.                 cardBytes[i][j] = new ArrayList<Byte>();
  168.                 ImageIO.write(cards[i][j], "png", new File("card-"+i+","+j+".png"));
  169.                 byte[] bytes = Files.readAllBytes(Paths.get("card-"+i+","+j+".png"));
  170.                 for(int k=0; k<bytes.length; k++)
  171.                     cardBytes[i][j].add(bytes[k]);
  172.             }
  173.        
  174.         int checkBoxSides = 12;
  175.         Point checkBoxes[][] = new Point[rows][cols];
  176.         for(int i=0; i<rows; i++)
  177.             for(int j=0; j<cols; j++)
  178.                 checkBoxes[i][j] = new Point();
  179.        
  180.         int xOffset = -1600;
  181.         checkBoxes[0][0].setLocation(xOffset+292,575);
  182.         checkBoxes[0][1].setLocation(xOffset+441,575);
  183.         checkBoxes[0][2].setLocation(xOffset+591,575);
  184.         checkBoxes[0][3].setLocation(xOffset+741,575);
  185.        
  186.         checkBoxes[1][0].setLocation(xOffset+292,663);
  187.         checkBoxes[1][1].setLocation(xOffset+441,663);
  188.         checkBoxes[1][2].setLocation(xOffset+591,663);
  189.         checkBoxes[1][3].setLocation(xOffset+741,663);
  190.        
  191.         checkBoxes[2][0].setLocation(xOffset+292,752);
  192.         checkBoxes[2][1].setLocation(xOffset+441,752);
  193.         checkBoxes[2][2].setLocation(xOffset+591,752);
  194.         checkBoxes[2][3].setLocation(xOffset+741,752);
  195.        
  196.         ArrayList<Card> dealtCards = new ArrayList<Card>();
  197.         for(int i=0; i<rows; i++)
  198.             for(int j=0; j<cols; j++)
  199.                 for(int k=0; k<allCards.length; k++)
  200.                     if (cardBytes[i][j].size() == allCards[k].fileBytes.length){
  201.                         //System.out.println("Same length detected");
  202.                         boolean matched = true;
  203.                         for(int l=0; l<allCards[k].fileBytes.length; l++)
  204.                             if (cardBytes[i][j].get(l) != allCards[k].fileBytes[l]){
  205.                                 matched = false;
  206.                                 break;
  207.                             }
  208.  
  209.                         if (matched){
  210.                             allCards[k].position = new Point(i,j);
  211.                             dealtCards.add(allCards[k]);
  212.                         }
  213.                     }
  214.        
  215.         ArrayList<ArrayList<Card>> setsFound;
  216.         setsFound = new ArrayList<ArrayList<Card>>();
  217.        
  218.         for(int i=0; i<dealtCards.size(); i++)
  219.             for(int j=i+1; j<dealtCards.size(); j++)
  220.                 for(int k=j+1; k<dealtCards.size(); k++){
  221.                     boolean sameColor = (dealtCards.get(i).color == dealtCards.get(j).color && dealtCards.get(i).color == dealtCards.get(k).color && dealtCards.get(j).color == dealtCards.get(k).color);
  222.                     boolean sameInfill = (dealtCards.get(i).infill == dealtCards.get(j).infill && dealtCards.get(i).infill == dealtCards.get(k).infill && dealtCards.get(j).infill == dealtCards.get(k).infill);
  223.                     boolean sameShape = (dealtCards.get(i).shape == dealtCards.get(j).shape && dealtCards.get(i).shape == dealtCards.get(k).shape && dealtCards.get(j).shape == dealtCards.get(k).shape);
  224.                     boolean sameShapeCount = (dealtCards.get(i).shapeCount == dealtCards.get(j).shapeCount && dealtCards.get(i).shapeCount == dealtCards.get(k).shapeCount && dealtCards.get(j).shapeCount == dealtCards.get(k).shapeCount);
  225.                    
  226.                     int sameTotal = 0;
  227.                     if (sameColor)
  228.                         sameTotal++;
  229.                     if (sameInfill)
  230.                         sameTotal++;
  231.                     if (sameShape)
  232.                         sameTotal++;
  233.                     if (sameShapeCount)
  234.                         sameTotal++;
  235.                    
  236.                     boolean allDifferentColor = (dealtCards.get(i).color != dealtCards.get(j).color && dealtCards.get(i).color != dealtCards.get(k).color && dealtCards.get(j).color != dealtCards.get(k).color);
  237.                     boolean allDifferentInfill = (dealtCards.get(i).infill != dealtCards.get(j).infill && dealtCards.get(i).infill != dealtCards.get(k).infill && dealtCards.get(j).infill != dealtCards.get(k).infill);
  238.                     boolean allDifferentShape = (dealtCards.get(i).shape != dealtCards.get(j).shape && dealtCards.get(i).shape != dealtCards.get(k).shape && dealtCards.get(j).shape != dealtCards.get(k).shape);
  239.                     boolean allDifferentShapeCount = (dealtCards.get(i).shapeCount != dealtCards.get(j).shapeCount && dealtCards.get(i).shapeCount != dealtCards.get(k).shapeCount && dealtCards.get(j).shapeCount != dealtCards.get(k).shapeCount);
  240.                    
  241.                     int allDifferentTotal = 0;
  242.                     if (allDifferentColor)
  243.                         allDifferentTotal++;
  244.                     if (allDifferentInfill)
  245.                         allDifferentTotal++;
  246.                     if (allDifferentShape)
  247.                         allDifferentTotal++;
  248.                     if (allDifferentShapeCount)
  249.                         allDifferentTotal++;
  250.                    
  251.                     boolean setFound = false;
  252.                    
  253.                     if (allDifferentTotal == 4)
  254.                         setFound = true;
  255.                     else if (allDifferentTotal == 3 && sameTotal == 1)
  256.                         setFound = true;
  257.                     else if (allDifferentTotal == 2 && sameTotal == 2)
  258.                         setFound = true;
  259.                     /*
  260.                     if (sameShape && sameColor && allDifferentInfill && allDifferentShapeCount)
  261.                         setFound = true;
  262.                     else if (sameShape && allDifferentColor && sameInfill && allDifferentShapeCount)
  263.                         setFound = true;
  264.                     else if (sameShape && allDifferentColor && allDifferentInfill && sameShapeCount)
  265.                         setFound = true;
  266.                     else if (sameShape && allDifferentColor && allDifferentInfill && allDifferentShapeCount)
  267.                         setFound = true;
  268.                     else if (allDifferentShape && sameColor && allDifferentInfill && allDifferentShapeCount)
  269.                         setFound = true;
  270.                     else if (allDifferentShape && allDifferentColor && sameInfill && allDifferentShapeCount)
  271.                         setFound = true;
  272.                     else if (allDifferentShape && allDifferentColor && allDifferentInfill && sameShapeCount)
  273.                         setFound = true;
  274.                     else if (allDifferentShape && allDifferentColor && allDifferentInfill && allDifferentShapeCount)
  275.                         setFound = true;
  276.                     */
  277.                     if (setFound == true){
  278.                         ArrayList<Card> set = new ArrayList<Card>();
  279.                         set.add(dealtCards.get(i));
  280.                         set.add(dealtCards.get(j));
  281.                         set.add(dealtCards.get(k));
  282.                    
  283.                         setsFound.add(set);
  284.                     }
  285.                 }
  286.         System.out.println(setsFound.size());
  287.        
  288.         Point okButtonShort = new Point(xOffset+926,182);
  289.         Point okButtonLong = new Point(xOffset+926,213);
  290.         boolean clickedOkButtonSimple = false;
  291.        
  292.         Robot robot = new Robot();
  293.         int checked = 0;
  294.        
  295.         int mouseActionDelay = 500;
  296.        
  297.         for(int i=0; i<setsFound.size(); i++){
  298.             ArrayList<Card> cardSet = setsFound.get(i);
  299.            
  300.             for(int j=0; j<cardSet.size(); j++){
  301.                 robot.mouseMove((int) checkBoxes[(int) cardSet.get(j).position.getX()][(int) cardSet.get(j).position.getY()].getX(), (int) checkBoxes[(int) cardSet.get(j).position.getX()][(int) cardSet.get(j).position.getY()].getY());
  302.                 robot.mousePress(InputEvent.BUTTON1_MASK);
  303.                 robot.mouseRelease(InputEvent.BUTTON1_MASK);
  304.                 checked++;
  305.                 Thread.sleep(mouseActionDelay);
  306.                
  307.                 if (checked == 3){
  308.                     if (clickedOkButtonSimple == false || mouseActionDelay >= 250){
  309.                         robot.mouseMove((int) okButtonShort.getX(), (int) okButtonShort.getY());
  310.                         clickedOkButtonSimple = true;
  311.                     }
  312.                     else
  313.                         robot.mouseMove((int) okButtonLong.getX(), (int) okButtonLong.getY());
  314.                
  315.                     robot.mousePress(InputEvent.BUTTON1_MASK);
  316.                     robot.mouseRelease(InputEvent.BUTTON1_MASK);
  317.                     Thread.sleep(mouseActionDelay);
  318.                     checked = 0;
  319.                 }
  320.             }
  321.         }
  322.     }
  323.    
  324.     static void downloadAllSetCards() throws Exception{
  325.         for(int i=1; i<=3*3*3*3; i++){
  326.             String filename = "";
  327.             if (i < 10)
  328.                 filename = "0"+i;
  329.             else
  330.                 filename = i+"";
  331.            
  332.             filename += ".gif";
  333.             URL website = new URL("http://www.puzzles.setgame.com/images/setcards/small/"+filename);
  334.             ReadableByteChannel rbc = Channels.newChannel(website.openStream());
  335.             FileOutputStream fos = new FileOutputStream(i+".gif");
  336.             fos.getChannel().transferFrom(rbc, 0, Long.MAX_VALUE);
  337.         }
  338.     }
  339.    
  340.     void convertCards() throws Exception{
  341.         for(int i=1; i<82; i++){
  342.             BufferedImage bufferedImage = ImageIO.read(new File(i+".gif"));
  343.             BufferedImage newBufferedImage = new BufferedImage(bufferedImage.getWidth(), bufferedImage.getHeight(), BufferedImage.TYPE_INT_RGB);
  344.             newBufferedImage.createGraphics().drawImage(bufferedImage, 0, 0, Color.WHITE, null);
  345.             ImageIO.write(newBufferedImage, "png", new File(i+".png"));
  346.         }
  347.     }
  348.    
  349. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×