Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. import java.awt.image.BufferedImage;
  2. import java.util.Random;
  3.  
  4.  
  5. public class Game {
  6.     private PuzzlePiece[] puzzlePieces;
  7.     private PuzzlePiece selected;
  8.     private int xOffset, yOffset;
  9.    
  10.     private BufferedImage image;
  11.    
  12.     public static int pieceWidth, pieceHeight;
  13.    
  14.     public Game() {
  15.         puzzlePieces = new PuzzlePiece[36];
  16.         image = PuzzlePic.getPuzzlePicture();
  17.         pieceWidth = image.getWidth() / 6;
  18.         pieceHeight = image.getHeight() / 6;
  19.        
  20.         Random random = new Random();
  21.         int ctr = 0;
  22.         for(int i = 0; i < 6; i++) {
  23.             for(int j = 0; j < 6; j++) {
  24.                 BufferedImage img = image.getSubimage(j * pieceWidth , i * pieceHeight,
  25.                         pieceWidth, pieceHeight);
  26.                 puzzlePieces[ctr] = new PuzzlePiece(img);
  27.                 puzzlePieces[ctr++].setPos(random.nextInt(PicturePuzzle.WIDTH - pieceWidth - 1),
  28.                         random.nextInt(PicturePuzzle.HEIGHT - pieceHeight - 1));
  29.             }
  30.         }
  31.        
  32.         for(int i = 0; i < 36; i++) {
  33.             if(i >= 6) {
  34.                 linkNorth(puzzlePieces[i], puzzlePieces[i - 6]);
  35.             }
  36.             if(i <= 29) {
  37.                 linkSouth(puzzlePieces[i], puzzlePieces[i + 6]);
  38.             }
  39.             if(i % 6 > 0) {
  40.                 linkWest(puzzlePieces[i], puzzlePieces[i - 1]);
  41.             }
  42.             if(i % 6 < 5) {
  43.                 linkEast(puzzlePieces[i], puzzlePieces[i + 1]);
  44.             }
  45.         }
  46.     }
  47.  
  48.     private void linkNorth(PuzzlePiece a, PuzzlePiece b) {
  49.         a.setNorthLink(b);
  50.         b.setSouthLink(a);
  51.     }
  52.     private void linkEast(PuzzlePiece a, PuzzlePiece b) {
  53.         a.setEastLink(b);
  54.         b.setWestLink(a);
  55.     }
  56.     private void linkSouth(PuzzlePiece a, PuzzlePiece b) {
  57.         a.setSouthLink(b);
  58.         b.setNorthLink(a);
  59.     }
  60.     private void linkWest(PuzzlePiece a, PuzzlePiece b) {
  61.         a.setWestLink(b);
  62.         b.setEastLink(a);
  63.     }
  64.     private PuzzlePiece getPuzzlePieceAt(int x, int y) {
  65.         for(int i = 0; i < 36; i++) {
  66.             PuzzlePiece p = puzzlePieces[i];
  67.             if(x >= p.getX() && x <= p.getX() + pieceWidth && y >= p.getY() && y <= p.getY() + pieceHeight) {
  68.                 return p;
  69.             }
  70.         }
  71.         return null;
  72.     }
  73.    
  74.     public int getX(int index) {
  75.         return puzzlePieces[index].getX();
  76.     }
  77.     public int getY(int index) {
  78.         return puzzlePieces[index].getY();
  79.     }
  80.     public BufferedImage getImage(int index) {
  81.         return puzzlePieces[index].getImage();
  82.     }
  83.     public PuzzlePiece getPiece(int index) {
  84.         return puzzlePieces[index];
  85.     }
  86.    
  87.     public void fixOffsets(int x, int y) {
  88.         PuzzlePiece pp = getPuzzlePieceAt(x, y);
  89.         if(pp != null) {
  90.             selected = pp;
  91.             xOffset = x - selected.getX();
  92.             yOffset = y - selected.getY();
  93.         }
  94.     }
  95.     public void updateOffsets(int x, int y) {
  96.         if(selected != null)
  97.             selected.setPos(x - xOffset, y - yOffset);
  98.     }
  99.     public void releaseOffsets() {
  100.         if(selected != null)
  101.             selected.updateConnections();
  102.         xOffset = 0;
  103.         yOffset = 0;
  104.         selected = null;
  105.     }
  106.     public boolean gameOver() {
  107.         int x = puzzlePieces[0].getX();
  108.         int y = puzzlePieces[0].getY();
  109.         int ctr = 0;
  110.         for(int i = 0; i < 6; i++) {
  111.             for(int j = 0; j < 6; j++) {
  112.                 PuzzlePiece p = puzzlePieces[ctr++];
  113.                 if(p.getX() - x == j * pieceWidth && p.getY() - y == i * pieceHeight) {
  114.                     continue;
  115.                 }
  116.                 return false;
  117.             }
  118.         }
  119.         return true;
  120.     }
  121. }