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

📄 myjpanel.java

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

import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.image.*;

import javax.swing.*;

public class MyJPanel extends JPanel {

	Image img;

	BufferedImage bimg, subimg, imgs;

	int[][] num;

	int dx, dy;

	// --------
	Graphics gs, gs2;

	int a, b;
	int no=3;

	// ---------
	boolean running = false,shengli=false,jixu=true,move=false;

	// ---------------
	int bs=0;
	//-------------------------------------
	JPanel jp_bs=new JPanel();
	JLabel jl_bs=new JLabel("步数");
	JTextField jtf_bs=new JTextField("0",4);

	//--------------------------------
	public void init(int n,String s) {
		setLayout(new BorderLayout());
		jp_bs.add(jl_bs);
		jp_bs.add(jtf_bs);
		add(jp_bs,"South");

		img = getToolkit().getImage(s);
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(img, 0);
		try {
			mt.waitForAll();
		} catch (InterruptedException e) {
			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);

		imgs = new BufferedImage(img.getWidth(this), img.getHeight(this),
				BufferedImage.TYPE_INT_ARGB);

		gs = bimg.getGraphics();
		gs.drawImage(img, 0, 0, this);

		gs2 = imgs.getGraphics();
		no=n;
		drawMap(n);
		addMouseListener(new MoveMap());
	}

	public void paintComponent(Graphics g) {
		if (running) {
			g.drawImage(imgs, 0, 0, this);
		}

		else{
			g.drawImage(img,0,0,this);
			//running=true;
		}
		if(shengli){
			Font font=new Font("宋体",1,50);
			g.setFont(font);
			g.setColor(Color.red);
			g.drawImage(img,0,0,this);
			g.drawString("恭喜您获胜!", 90, 150);
			shengli=false;

			/*try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				// TODO 自动生成 catch 块
				e.printStackTrace();
			}*/

		}
	}

	public void initMap(int n) {
		java.util.Random rnd = new java.util.Random(); // 创建随机发生器
		int temp, x, y, x2, y2;
		a=n-1;b=n-1;
		num = new int[n][n];
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				num[i][j] = i * n + j;
			}
		}
		for (int i = 0; i < 1000; i++) { // 循环100次
			// 选中任意位置的图像数组下标,即选中任意位置的两个图像块
			x = rnd.nextInt(n); // 产生0-n之间的随机数
			y = rnd.nextInt(n);
			/*y1 = rnd.nextInt(n);
			y2 = rnd.nextInt(n);*/
			// 交换两个图像块的位置
			if (Math.abs(a - x) + Math.abs(b - y) <2){
				temp = num[a][b];
				num[a][b] = num[x][y];
				num[x][y] = temp;
				a=x;
				b=y;
			}
		System.out.println(a+","+b);
		}
	}

	public void drawMap(int n) {
		initMap(n);
		drawMap2(n);

	}

	public void drawMap2(int n) {
		gs2.clearRect(0, 0, dx * n, dy * n);
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < n; j++) {
				if (num[i][j] == n * n - 1) {
					a = i;
					b = j;
					//gs2.set(Color.blue);
					continue;
				} else {
					subimg = bimg.getSubimage(dx * (num[i][j] % n), dy* (num[i][j] / n), dx - 1, dy - 1);
					// subimg=bimg.getSubimage(0,0,dx-1,dy-1);
					gs2.drawImage(subimg, dx * j, dy * i, this);
				}
			}
		}
	}

	// -------------------------------
	class MoveMap implements MouseListener {

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

		}

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

		}

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

		}

		public void mousePressed(MouseEvent me) {
			if(move){
			int x = me.getX() / dx; // x,y wei shu zu xia biao yu zuoshangjiao
			// zuobiao guanxi buduiying
			int y = me.getY() / dy;
			if (Math.abs(b - x) + Math.abs(a - y) >= 2)
				return;
			else if (num[y][x] ==no*no-1)
				return;
			else {
				int m = num[a][b];
				num[a][b] = num[y][x];
				num[y][x] = m;
				// a = x;
				// b = y;
				// a=x;b=y;
				// getGraphics().drawImage(imgs,0,0,new MyJPanel());
				// System.out.println("123");
				drawMap2(no);
				repaint();
				shengFu(no);
			}
			bs++;
			jtf_bs.setText(""+bs);}
		}

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

		}

	}
	// -------------------------------------
	public void shengFu(int n){
		int pd=0;
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				if(num[i][j]==i*n+j){
					pd++;
				}
			//	System.out.println(i*n+j);
			}
		}
		if(pd==n*n){
			System.out.println("胜利");

			shengli=true;
			jixu=false;
			move=false;
		}

	}
}

⌨️ 快捷键说明

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