Yard.java
package jigsaw;
import javax.swing.JFrame;
public class Yard extends JFrame {
Win win = new Win();
public Yard()
{
this.setTitle("朱冠亚的拼图游戏");
this.setSize(500,500);
this.setLocation(200,100);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.add(win);
this.setVisible(true);
}
public static void main(String args[])
{
new Yard();
}
}
Win.java
package jigsaw;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import java.io.IOException;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JPanel;
public class Win extends JPanel implements MouseListener {
private int[][] tus = new int[3][3];
private boolean flag = false;
private boolean start;
private int row, col;
Font font = new Font("宋体", Font.BOLD, 50);
private JButton b = new JButton("开始");
public Win() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
tus[i][j] = i * 3 + j + 1;
}
start = true;
b.addMouseListener(new MouseAdapter() {
public void mouseClicked(MouseEvent e) {
if (e.getSource() == b) {
flag = false;
start = false;
disOrder();
repaint();
}
}
});
this.add(b);
this.addMouseListener(this);
}
private void disOrder()
{
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
tus[i][j] = i * 3 + j + 1;
}
Random r = new Random();
int rand;
for (int count = 0; count < 200; ) {
rand = r.nextInt(4)+1;
//UP
if (rand==1)
for (int i = 0;i<3;i++)
for(int j = 0;j<3;j++)
if(tus[i][j]==9 && i!=0)
{
tus[i][j] = tus[i-1][j];
tus[i-1][j] = 9;
count++;
}
//DOWN
if (rand==2)
for (int i = 0;i<3;i++)
for(int j = 0;j<3;j++)
if(tus[i][j]==9 && i!=2)
{
tus[i][j] = tus[i+1][j];
tus[i+1][j] = 9;
count++;
}
//LEFT
if (rand==3)
for (int i = 0;i<3;i++)
for(int j = 0;j<3;j++)
if(tus[i][j]==9 && j!=0)
{
tus[i][j] = tus[i][j-1];
tus[i][j-1] = 9;
count++;
}
//RIGHT
if (rand==4)
for (int i = 0;i<3;i++)
for(int j = 0;j<3;j++)
if(tus[i][j]==9 && j!=2)
{
tus[i][j] = tus[i][j+1];
tus[i][j+1] = 9;
count++;
}
}
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.drawRect(100, 100, 300, 300);
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
// tus[i][j] = i*3+j+1;
if (!(tus[i][j] == 9 && !start)) {
Image image = null;
try {
String str = "img/tu" + tus[i][j] + ".jpg";
image = ImageIO.read(new File(str));
} catch (IOException e) {
e.printStackTrace();
}
g.drawImage(image, 100 + 100 * j, 100 + 100 * i, 100, 100,
this);
// showImage(g,this,"img/tu"+tus[i][j]+".jpg",100+100*j,100+100*i);
}
}
g.setColor(Color.RED);
g.setFont(font);
if (flag)
g.drawString("你这厉害爸妈造不?", 25, 150);
}
/*
* void showImage(Graphics g,ShellWin win,String img_source,int x,int y) {
* try { Image image=ImageIO.read(new File(img_source)); g.drawImage(image,
* x, y, win); } catch (IOException e) { e.printStackTrace(); } }
*/
@Override
public void mouseClicked(MouseEvent e) {
if (flag)
return; // 如果已经成功完成
int x = e.getX();
int y = e.getY();
row = y / 100 - 1;
col = x / 100 - 1; // 得到行数和列数 图片位置
swap();
if (isWin()) {
flag = true;
}
repaint();
}
private boolean isWin() {
for (int i = 0; i < 3; i++)
for (int j = 0; j < 3; j++) {
if (tus[i][j] != i * 3 + j + 1) {
return false;
}
}
return true;
}
private void swap() {
if (row != 0 && tus[row - 1][col] == 9) {
tus[row - 1][col] = tus[row][col];
tus[row][col] = 9;
}
else if (row != 2 && tus[row + 1][col] == 9) {
tus[row + 1][col] = tus[row][col];
tus[row][col] = 9;
} else if (col != 0 && tus[row][col - 1] == 9) {
tus[row][col - 1] = tus[row][col];
tus[row][col] = 9;
}
else if (col != 2 && tus[row][col + 1] == 9) {
tus[row][col + 1] = tus[row][col];
tus[row][col] = 9;
}
}
@Override
public void mouseEntered(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseExited(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mousePressed(MouseEvent arg0) {
// TODO Auto-generated method stub
}
@Override
public void mouseReleased(MouseEvent arg0) {
// TODO Auto-generated method stub
}
}