Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. import java.awt.Color;
  2. import java.awt.Font;
  3. import java.awt.Graphics;
  4. import java.awt.Graphics2D;
  5. import java.awt.event.KeyAdapter;
  6. import java.awt.event.KeyEvent;
  7. import java.awt.event.MouseEvent;
  8. import java.awt.event.MouseMotionAdapter;
  9.  
  10. import javax.swing.JOptionPane;
  11. import javax.swing.JPanel;
  12.  
  13.  
  14. public class SlidingPuzzlePanel extends JPanel {
  15.    
  16.     private static final long serialVersionUID = 4501938941435763747L;
  17.  
  18.     private static final int SIDE = 4;
  19.     private static final int FONT_SIZE = 40;
  20.     private static int LEVEL = 10;
  21.    
  22.     private Game game;
  23.     private Font font;
  24.     private Color background, foreground, borderColor;
  25.    
  26.     private int slotWidth, slotHeight, slotXOffset, slotYOffset;
  27.    
  28.     private int inX, inY, xOffset, yOffset;
  29.     private boolean dragged;
  30.    
  31.     public SlidingPuzzlePanel() {
  32.         game = new Game(SIDE, LEVEL);
  33.         font = new Font(Font.SERIF, Font.BOLD, FONT_SIZE);
  34.        
  35.         slotWidth = SlidingPuzzle.WIDTH / SIDE;
  36.         slotHeight = SlidingPuzzle.HEIGHT / SIDE;
  37.         slotXOffset = slotWidth / 2 - FONT_SIZE / 4;
  38.         slotYOffset = slotHeight / 2 + FONT_SIZE / 3;
  39.        
  40.         background = new Color(123, 155, 232);
  41.         foreground = new Color(123, 255, 132);
  42.         borderColor = new Color(223, 255, 132);
  43.         dragged = false;
  44.        
  45.         setFocusable(true);
  46.         requestFocus();
  47.        
  48.         addMouseMotionListener(new MouseMotionAdapter() {
  49.             @Override
  50.             public void mouseDragged(MouseEvent e) {
  51.                 if(dragged) {
  52.                     inX = e.getXOnScreen() - xOffset;
  53.                     inY = e.getYOnScreen() - yOffset;
  54.                     SlidingPuzzle.frame.setLocation(inX, inY);
  55.                 }
  56.                 else {
  57.                     dragged = true;
  58.                     xOffset = e.getX();
  59.                     yOffset = e.getY();
  60.                 }
  61.             }
  62.            
  63.             @Override
  64.             public void mouseMoved(MouseEvent e) {
  65.                 dragged = false;
  66.             }
  67.         });
  68.        
  69.         addKeyListener(new KeyAdapter() {
  70.             @Override
  71.             public void keyPressed(KeyEvent e) {
  72.                 int key = e.getKeyCode();
  73.                 switch(key) {
  74.                 case KeyEvent.VK_ESCAPE:
  75.                     SlidingPuzzle.frame.dispose();
  76.                     break;
  77.                 default:
  78.                     game.keyPressed(key);
  79.                     repaint();
  80.                     if(game.isCorrect()) {
  81.                         JOptionPane.showMessageDialog(SlidingPuzzle.frame, "You Win!");
  82.                         LEVEL += 10;
  83.                         game = new Game(SIDE, LEVEL);
  84.                         repaint();
  85.                     }
  86.                 }
  87.             }
  88.         });
  89.     }
  90.    
  91.     @Override
  92.     public void paint(Graphics g) {
  93.         Graphics2D g2d = (Graphics2D)g;
  94.         g2d.setFont(font);
  95.         g2d.setColor(background);
  96.         g2d.fillRect(0, 0, getWidth(), getHeight());
  97.         drawBorders(g2d);
  98.        
  99.         g2d.setColor(foreground);
  100.         for(int i = 0; i < 4; i++) {
  101.             for(int j = 0; j < 4; j++) {
  102.                 if(game.getValueAt(j, i) != 0)
  103.                     g2d.drawString(""+game.getValueAt(j, i), slotXOffset + j * slotWidth,
  104.                             slotYOffset + i * slotHeight);
  105.             }
  106.         }
  107.     }
  108.     private void drawBorders(Graphics2D g2d) {
  109.         g2d.setColor(borderColor);
  110.         for(int i = 0; i < 3; i++)
  111.             g2d.drawRect(i, i, SlidingPuzzle.WIDTH - 1 - 2 * i, SlidingPuzzle.HEIGHT - 1 - 2 * i);
  112.        
  113.         for(int  i = 1; i < 4; i++) {
  114.             int level = i * slotHeight;
  115.             g2d.drawLine(0, level, SlidingPuzzle.WIDTH, level);
  116.             g2d.drawLine(0, level + 1, SlidingPuzzle.WIDTH, level + 1);
  117.             g2d.drawLine(0, level + 2, SlidingPuzzle.WIDTH, level + 2);
  118.  
  119.             g2d.drawLine(level, 0, level, SlidingPuzzle.HEIGHT);
  120.             g2d.drawLine(level + 1, 0, level + 1, SlidingPuzzle.HEIGHT);
  121.             g2d.drawLine(level + 2, 0, level + 2, SlidingPuzzle.HEIGHT);
  122.         }
  123.     }
  124. }