Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. import java.awt.Color;
  2. import java.awt.Graphics;
  3. import java.awt.Graphics2D;
  4. import java.awt.event.KeyAdapter;
  5. import java.awt.event.KeyEvent;
  6. import java.awt.event.MouseEvent;
  7. import java.awt.event.MouseMotionAdapter;
  8. import java.io.File;
  9.  
  10. import javax.swing.JFileChooser;
  11. import javax.swing.JOptionPane;
  12. import javax.swing.JPanel;
  13. import javax.swing.filechooser.FileFilter;
  14.  
  15.  
  16. public class PicturePuzzlePanel extends JPanel {
  17.  
  18.     private static final long serialVersionUID = 5106570002791771952L;
  19.    
  20.     private Game game;
  21.    
  22.     private boolean dragged;
  23.     private int time;
  24.    
  25.     public PicturePuzzlePanel() {
  26.         game = new Game();
  27.         time = 0;
  28.        
  29.         dragged = false;
  30.        
  31.         setFocusable(true);
  32.         requestFocus();
  33.        
  34.         addMouseMotionListener(new MouseMotionAdapter() {
  35.             @Override
  36.             public void mouseDragged(MouseEvent e) {
  37.                 if(!dragged) {
  38.                     dragged = true;
  39.                     game.fixOffsets(e.getX(), e.getY());
  40.                 }
  41.                 game.updateOffsets(e.getX(), e.getY());
  42.                 repaint();
  43.             }
  44.            
  45.             @Override
  46.             public void mouseMoved(MouseEvent e) {
  47.                 if(dragged) {
  48.                     game.releaseOffsets();
  49.                     dragged = false;
  50.                     repaint();
  51.                     if(game.gameOver()) {
  52.                         JOptionPane.showMessageDialog(PicturePuzzle.frame, "Congratulations! You win... Time taken in seconds : " + time);
  53.                         game = new Game();
  54.                         time = 0;
  55.                         repaint();
  56.                     }
  57.                 }
  58.             }
  59.         });
  60.        
  61.         addKeyListener(new KeyAdapter() {
  62.             public void keyPressed(KeyEvent e) {
  63.                 if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {
  64.                     PicturePuzzle.frame.dispose();
  65.                 }
  66.                 if(e.getKeyCode() == KeyEvent.VK_SPACE) {
  67.                     JFileChooser fileChooser = new JFileChooser();
  68.                     fileChooser.setAcceptAllFileFilterUsed(false);
  69.                     fileChooser.setFileFilter(new ImageFilter());
  70.                     int ret = fileChooser.showOpenDialog(PicturePuzzle.frame);
  71.                     if(ret == JFileChooser.APPROVE_OPTION) {
  72.                         PuzzlePic.setPuzzlePicture(fileChooser.getSelectedFile());
  73.                         game = new Game();
  74.                         time = 0;
  75.                         repaint();
  76.                     }
  77.                 }
  78.             }
  79.         });
  80.        
  81.         PicturePuzzle.frame.setVisible(true);
  82.        
  83.         Thread th = new Thread(new Timer());
  84.         th.start();
  85.     }
  86.    
  87.     @Override
  88.     public void update(Graphics g) {
  89.         paint(g);
  90.     }
  91.    
  92.     @Override
  93.     public void paint(Graphics g) {
  94.         Graphics2D g2d = (Graphics2D)g;
  95.         g2d.setColor(Color.black);
  96.         g2d.fillRect(0, 0, getWidth(), getHeight());
  97.         for(int i = 0; i < 36; i++) {
  98.             g2d.drawImage(game.getImage(i), game.getX(i), game.getY(i), this);
  99.         }
  100.     }
  101.    
  102.     private class ImageFilter extends FileFilter {
  103.         public boolean accept(File f) {
  104.             if (f.isDirectory())
  105.                 return true;
  106.             String s = f.getName();
  107.             s=s.toLowerCase();
  108.             if (s.endsWith(".jpg") || s.endsWith(".png") || s.endsWith(".gif"))
  109.                 return true;
  110.  
  111.             return false;
  112.         }
  113.  
  114.         public String getDescription() {
  115.             return "Image Files(*.jpg  *.png  *.gif)";
  116.         }
  117.     }
  118.    
  119.     private class Timer implements Runnable {
  120.         @Override
  121.         public void run() {
  122.             while(PicturePuzzle.frame.isVisible()) {
  123.                 try {
  124.                     Thread.sleep(1000);
  125.                 }
  126.                 catch(InterruptedException e) {
  127.                     e.printStackTrace();
  128.                 }
  129.                 time++;
  130.             }
  131.         }
  132.     }
  133. }