版权声明:您好,欢迎来到我的技术博客。 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) {}
}