首页>代码>java swing开发的拼图小游戏项目>/Puzzle/src/demo/MainPanel.java
package demo;
import java.awt.GridLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import java.io.File;
import java.util.Random;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class MainPanel extends JPanel{
	Button[] button=new Button[25];//按钮数组
	ImageIcon[] icon=new ImageIcon[25];//图片数组,默认值8位空白照片
	int state[]=new int[25];//照片存放顺序
	int NullButton;//空白照片按钮
	int pattern;
	int total;
	int count;
	public MainPanel(String path,int pattern){
		this.pattern=pattern;
		total=pattern*pattern;
		this.setSize(300,300);
	    breakRandom(path,pattern);
	    
	}
	//重新设置Buttont图片
	public void breakRandom(String path,int pattern){
		count=0;
		this.pattern=pattern;
		total=pattern*pattern;
		ImageCutUtil.cutImage(new File(path+"\\"+"index.jpg"),pattern,path);
		
		System.out.println("");
		for(int i=0;i<total-1;i++){
			ImageIcon image=new ImageIcon(path+"\\"+i+".jpg");
			System.out.println("height: "+image.getIconHeight()+" width: "+image.getIconWidth());
		}
		this.removeAll();
		updateUI();
		this.setLayout(new GridLayout(pattern,pattern));
		NullButton=total-1;
		random(state);
		for(int i=0;i<total;i++){   
	    	//初始化按钮
	    	button[i]=new Button();
	    	button[i].setRow(i/pattern);//初始化每一个按钮所在的行
	    	button[i].setCol(i%pattern);//初始化每一个按钮所在的列
		    this.add(button[i]);
	    }
		
		for(int i=0;i<total-1;i++)
		System.out.print(state[i]+" ");
	    for(int i=0;i<total-1;i++){
			icon[i]=new ImageIcon(path+"\\"+state[i]+".jpg");
			//System.out.println("height: "+icon[i].getIconHeight()+" width: "+icon[i].getIconWidth());
			button[i].setImageIcon(icon[i]);
		}
	    button[total-1].setImageIcon(null);
		
		
		for(int i=0;i<total;i++){   
	    	
	    	//给每一个按钮添加监听事件
	    	button[i].addMouseListener(new MouseAdapter(){
				@Override
				public void mousePressed(MouseEvent e) {
					// TODO Auto-generated method stub
					Button button=(Button)e.getSource();
					System.out.println("点击按钮的横纵坐标为");
					System.out.println("x="+button.getRow()+"|"+"y="+button.getCol());
					remove(button);
					count++;
					System.out.println("pattern: "+pattern+"total: "+total);
					System.out.println("当前空白按钮是第几个");
					System.out.println("nullButton="+NullButton);//打印现在的空白按钮是哪个
					//打印此时的图片顺序
					System.out.println("当前图片顺序状态为");
					for(int i=0;i<total;i++){
						System.out.print(state[i]+"  ");
					}
					System.out.println();
				}
	    	});
	    }
		
	}
    public boolean isOdd(int a[]){
    	int sum=0;
    	for(int i=0;i<total;i++)
    		for(int j=i+1;j<total;j++)
    		{
    			if(a[i]>a[j])
    				sum++;
    		}
    	if(sum%2==0)
    		return true;
    	else
    		return false;
    	
    }
	//产生随机数组,打乱图片位置
	public void random(int a[]){   
	    while(true){
		Random cd=new Random();
		int i=0;
		a[0]=cd.nextInt(total-1);
		for(i=1;i<total-1;i++)
		{
			int temp=cd.nextInt(total-1);
			for(int j=0;j<i;j++)
			{
				if(a[j]!=temp)
				{
					a[i]=temp;
				}
				else
				{
					i--;
					break;
				}
			}
		}
		a[i]=total-1;
		if(isOdd(a)){
			System.out.println("图片的初始顺序状态为");
			for(i=0;i<total;i++)
				System.out.print(a[i]+"  ");
			System.out.println("isOdd"+isOdd(a));
			return ;
	    }
	   }
	}
	public void remove(Button clicked){
		System.out.println("当前  pattern: "+pattern+" total "+total+" nullButton "+NullButton);
		int rowN=button[NullButton].getRow();//得到空白按钮横坐标
		int colN=button[NullButton].getCol();//得到空白按钮纵坐标
		int rowC=clicked.getRow();//得到点击按钮横坐标
		int colC=clicked.getCol();//得到点击按钮纵坐标
		if(((rowN-rowC)==1&&(colN-colC)==0)||
		   ((rowN-rowC)==-1&&(colN-colC)==0)||
		   ((rowN-rowC)==0&&(colN-colC)==1)||
		   ((rowN-rowC)==0&&(colN-colC)==-1))
		{
			ImageIcon icon=(ImageIcon) clicked.getIcon();//得到点击按钮的图片
			button[NullButton].setImageIcon(icon);//设置空白按钮的图片,即交换空白按钮与点击按钮的图片
			clicked.setImageIcon(null);//设置点击按钮图片为空白
		    int clickState=rowC*pattern+colC;//获得点击按钮是第几个按钮(0-8)
		    NullButton=rowN*pattern+colN;//获得空白按钮是几个(0-8)
		    state[NullButton]=state[clickState];//交换图片数组的顺序状态
		    state[clickState]=total-1;
		    NullButton=clickState;//设置空白按钮是第几个
		    check();
		}
		else
		{
			return;
		}
	}
	//判断拼图是否完成
	public  void check(){
		for(int i=0;i<total;i++)
			if(state[i]!=i)
			{
				return;
			}
		JOptionPane.showMessageDialog(this, "拼图完成");
	}
	public int getCount(){
		return count;
	}

}
最近下载更多
1112WHQ  LV7 2023年11月3日
applejack  LV1 2023年6月11日
当代大学生  LV1 2023年5月3日
huangzy  LV12 2023年4月6日
alexcheung  LV3 2022年12月17日
微信网友_5992582549164032  LV6 2022年6月15日
nikki0401  LV1 2022年3月22日
13112360  LV2 2022年1月20日
dwaddwadaw  LV1 2022年1月11日
KillerMain  LV1 2021年12月28日
最近浏览更多
2890892945  LV2 2023年12月31日
shajunming  LV2 2023年11月6日
1112WHQ  LV7 2023年11月3日
applejack  LV1 2023年6月11日
当代大学生  LV1 2023年5月3日
huangzy  LV12 2023年4月6日
win1991  LV6 2023年3月27日
alexcheung  LV3 2022年12月17日
103463  LV1 2022年12月5日
wangroot98  LV1 2022年11月14日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友