java拼图游戏--面向对象实现+数组实现--swing界面

版权声明:您好,欢迎来到我的技术博客。 https://blog.csdn.net/zwyjg/article/details/7420478

 面向对象

 

import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.awt.*;
public class Hufan extends JFrame{
	HuPanel hp;
	public static void main(String[] args) {
		new Hufan();
	}
	public Hufan(){
		hp=new HuPanel();
		this.add(hp);
		hp.addMouseListener(hp);
		this.setTitle("拼图");
		this.setSize(180, 200);
		this.setLocation(400, 300);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}
class HuPanel extends JPanel implements MouseListener{
	ArrayList<Act> al=new ArrayList<Act>();
	int start=5;//空格位置
	int kgX=1;//空格坐标
	int kgY=1;
	public HuPanel(){
		int shu=0;
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				shu+=1;
				Act act=new Act(shu,i,j);//16格子对象
				al.add(act);
			}
		}
		Collections.shuffle(al);//乱序
		al.get(5).str="";//空格值为空
	}
	public void paint(Graphics g){
		super.paint(g);
		for(int i=0;i<5;i++){
			g.drawLine(0, i*40, 160, i*40);
			g.drawLine(i*40, 0, i*40, 160);
		}
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				g.setColor(Color.red);
				g.drawString(al.get(j+i*4).str, j*40+20,i*40+20);
			}
		}
	}
	public void access(){//判断是否成功
		int hu=0;
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				if (al.get(j + i * 4).x == i && al.get(j + i * 2).y == j) {
					hu++;
				}
			}
		}
		if(hu==16){
			JOptionPane.showMessageDialog(this,"报告长官,任务完成!");
		}
	}
	public void mouseClicked(MouseEvent e) {
		int x=e.getX();
		int y=e.getY();
		int a=x/40;
		int b=y/40;
		if(a>=0&&a<=4&&b>=0&&b<=4){
			int end=b*4+a*1;
			Act aa=al.get(start);
			if(Math.abs((a-kgX)+(b-kgY))==1){
				al.set(start, al.get(end));//交换位置
				al.set(end, aa);//交换位置
				start=end;//重新设置空格位置
				kgX=a;
				kgY=b;
				this.access();
			}
			this.repaint();
		}
	}
	public void mouseEntered(MouseEvent arg0) {}
	public void mouseExited(MouseEvent arg0) {}
	public void mousePressed(MouseEvent arg0) {}
	public void mouseReleased(MouseEvent arg0) {}
}
class Act{
	int x;
	int y;
	String str;
	public Act(int str,int x,int y){
		this.x=x;
		this.y=y;
		this.str=str+"";
	}
}


数组的,未添加验证游戏成功代码

import javax.swing.*;
import java.util.*;
import java.awt.event.*;
import java.awt.*;
public class Hufan extends JFrame{
	HuPanel hp;
	public static void main(String[] args) {
		new Hufan();
	}
	public Hufan(){
		hp=new HuPanel();
		this.add(hp);
		hp.addMouseListener(hp);
		this.setTitle("数组拼图");
		this.setLocation(400, 300);
		this.setSize(180, 200);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setVisible(true);
	}
}
class HuPanel extends JPanel implements MouseListener{
	int[][] hu;//二维方格
	int xx=1;//空格坐标
	int yy=1;
	int t;
	Random r,r2;
	int shu;
	public HuPanel(){
		hu=new int[4][4];
		int shu=0;
		for(int i=0;i<4;i++){//方格赋值
			for(int j=0;j<4;j++){
				hu[i][j]=j*4+i+1;
			}
		}
		for(int i=0;i<4;i++){//乱序
			for(int j=0;j<4;j++){
				r=new Random();
				int a=r.nextInt(3);
				r2=new Random();
				int b=r.nextInt(3);
				t=hu[i][j];
				hu[i][j]=hu[a][b];
				hu[a][b]=t;
			}
		}
		hu[xx][yy]=0;//空格值
	}
	public void paint(Graphics g){
		super.paint(g);
		for(int i=0;i<5;i++){
			g.drawLine(0, i*40, 160, i*40);
			g.drawLine(i*40, 0, i*40, 160);
		}
		for(int i=0;i<4;i++){
			for(int j=0;j<4;j++){
				g.setColor(Color.red);
				g.drawString(hu[i][j]+"", i*40+20, j*40+20);
			}
		}
	}
	public void mouseClicked(MouseEvent e) {
		int a=e.getX()/40;
		int b=e.getY()/40;
		if(a>=0&&a<=4&&b>=0&&b<=4){
			if(Math.abs((a-xx)+(b-yy))==1){//空格与所点的坐标相减的和是1,就是相邻
				//交换值
				int aa=hu[xx][yy];
				hu[xx][yy]=hu[a][b];
				hu[a][b]=aa;
				//重新设置空格坐标
				xx=a;
				yy=b;
			}
			this.repaint();
		}
	}
	public void mouseEntered(MouseEvent arg0) {}
	public void mouseExited(MouseEvent arg0) {}
	public void mousePressed(MouseEvent arg0) {}
	public void mouseReleased(MouseEvent arg0) {}
}


 

猜你喜欢

转载自blog.csdn.net/zwyjg/article/details/7420478