⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 myjpanel2.java

📁 java拼图 分为3个等级 两种不同的玩法 一个是移动的 一个是跳动的
💻 JAVA
字号:
//package pt2;

import java.awt.BorderLayout;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.awt.image.BufferedImage;

import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;

/*public class MyJFrame {
 JFrame jf;
 MyJPanel2 mj;
 public void init(){
 mj=new MyJPanel2();
 jf=new JFrame();
 jf.add(mj);
 mj.init(3);
 jf.setSize(450,337);
 jf.setVisible(true);
 jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 }
 public static void main(String[] args) {
 new MyJFrame().init();

 }

 }*/
public class MyJPanel2 extends JPanel implements MouseListener {

	JButton[] jb;

	Image img;

	Image img2;

	BufferedImage bimg;

	BufferedImage[] bufimg, bufimg2;

	Graphics gs;

	int dx, dy;

	ImageIcon[] icons, icons2;

	int[][] map;

	JPanel jp0;

	JPanel jp_bs = new JPanel();

	JLabel jl_bs = new JLabel("步数");

	JTextField jtf_bs = new JTextField("0", 4);

	// -----------
	MyJPanel mjp;

	// ---------------
	int bs2 = 0;

	int no2 = 3;

	// -------------------------------------
	boolean running2 = false, jixu2 = true, move2 = false,shengli2=false;

	public MyJPanel2() {
		setLayout(new BorderLayout());
		jp_bs.add(jl_bs);
		jp_bs.add(jtf_bs);
		add(jp_bs, "South");
	}

	public void init(int n, String s) {
		no2 = n;
		// ------
		jp0 = new JPanel(new GridLayout(n, n));
		add(jp0, "Center");
		// ----------------------
		map = new int[n][n];
		jb = new JButton[n * n];
		icons = new ImageIcon[n * n];
		icons2 = new ImageIcon[n * n];
		bufimg = new BufferedImage[n * n];
		bufimg2 = new BufferedImage[n * n];
		// setLayout(new GridLayout(n,n));
		for (int i = 0; i < n * n; i++) {
			jb[i] = new JButton();
			jb[i].addMouseListener(this);
			jp0.add(jb[i]);
		}

		// bimg2=bimg.getSubimage(0,0,dx,dy);

		// ii.setImage(bimg2);
		// ---
		// --------
		img = getToolkit().getImage(s);

		MediaTracker mt = new MediaTracker(this);
		mt.addImage(img, 0);
		try {
			mt.waitForAll();
		} catch (InterruptedException e) {
			// TODO 自动生成 catch 块
			e.printStackTrace();
		}
		dx = img.getWidth(this) / n;
		dy = img.getHeight(this) / n;

		bimg = new BufferedImage(img.getWidth(this), img.getHeight(this),
				BufferedImage.TYPE_INT_ARGB);
		gs = bimg.getGraphics();
		gs.drawImage(img, 0, 0, this);
		// -----------------
		for (int i = 0; i < n * n; i++) {
			icons[i] = new ImageIcon();
			icons2[i] = new ImageIcon();
			bufimg[i] = new BufferedImage(img.getWidth(this) / n-11, img
					.getWidth(this)
					/ n-55, BufferedImage.TYPE_INT_ARGB);
			bufimg2[i] = new BufferedImage(img.getWidth(this) / n-11, img
					.getWidth(this)
					/ n-55, BufferedImage.TYPE_INT_ARGB);
		}
		// -------

		int temp, x1, y1, x2, y2;
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				map[i][j] = i * n + j;
			}
		}
		for (int i = 0; i < 100; i++) {
			java.util.Random rnd = new java.util.Random(); // 创建随机发生器
			x1 = rnd.nextInt(n); // 产生0-n之间的随机数
			x2 = rnd.nextInt(n);
			y1 = rnd.nextInt(n);
			y2 = rnd.nextInt(n);
			// 交换两个图像块的位置
			temp = map[x1][y1];
			map[x1][y1] = map[x2][y2];
			map[x2][y2] = temp;
		}
		// moveMap(n);
		// --------------------
		// initMap(n,s);
	}

	public void paintComponent(Graphics g) {
		if (running2) {
			moveMap(no2);
			for (int i = 0; i < no2 * no2; i++)
				jb[i].setIcon(icons[i]);
		} else {
			moveMap(no2);
			for (int i = 0; i < no2 * no2; i++)
				jb[i].setIcon(icons2[i]);
		}
		if(shengli2){
			System.out.println("adsf");
		}

	}

	// public void initMap(int n,String s){

	// }
	public void moveMap(int n) {
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				bufimg[i * n + j] = bimg.getSubimage(map[i][j] % n * dx,
						map[i][j] / n * dy, dx, dy);
				// icons[i*n+j]=new ImageIcon();
				icons[i * n + j].setImage(bufimg[i * n + j]);
				bufimg[i * n + j] = bimg.getSubimage(j * dx, i * dy, dx, dy);
				icons2[i * n + j].setImage(bufimg[i * n + j]);

			}
		}
	}

	public void mouseClicked(MouseEvent arg0) {
		// TODO 自动生成方法存根

	}

	public void mouseEntered(MouseEvent arg0) {
		// TODO 自动生成方法存根

	}

	public void mouseExited(MouseEvent arg0) {
		// TODO 自动生成方法存根

	}

	public void mousePressed(MouseEvent e) {
		if (move2) {
			for (int i = 0; i < no2 * no2; i++) {
				if (e.getSource() == jb[i]) {
					int sx, sy, temp;
					sx = i / no2;
					sy = i % no2;
					temp = map[sx][sy];
					map[sx][sy] = map[0][0];
					map[0][0] = temp;
				}
			}
			repaint();
			bs2++;
			jtf_bs.setText("" + bs2);
			shengFu2();
		}
	}

	public void mouseReleased(MouseEvent arg0) {

	}

	public void shengFu2() {
		int pd = 0;
		for (int i = 0; i < no2; i++) {
			for (int j = 0; j < no2; j++) {
				if (map[i][j] == i * no2 + j) {
					pd++;
				}
				System.out.println(pd);
			}
		}
		if (pd == no2 * no2) {
			System.out.println("胜利");
			jixu2 = false;
			move2 = false;
			shengli2=true;
			 JOptionPane.showMessageDialog(this, "恭喜您获胜!");
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -