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

📄 blockface.java

📁 该算法首先根据输入的节点数(该程序可选的有3X3
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

public class BlockFace extends JFrame{
	 
	 private JPanel firstPanel;
	 private JPanel secondPanel;
	 private JPanel thirdPanel;
	 private JComboBox c1;
	 private Container pane=this.getContentPane();
	 private JTextField []secondT;
	 private JTextField []thirdT;
	 private int space;
	 private String []xBlock;
	 private String []yBlock;
	 private Block block;

	 public BlockFace(int blockNUM,Point p){
	 	 super("移动方块");
	 	 pane.setLayout(new BorderLayout());
	 	 this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	 	 this.setResizable(false);
	 	 this.setLocation(p);
	 	 
	 	 space=(int)(Math.random()*(blockNUM-2)+1);
	 	 initFirstPanel();
	 	 initSecondPanel(blockNUM);
	 	 initThirdPanel(blockNUM);
	 	 initXYBlock();
	 	 
	 	 pane.add(firstPanel,BorderLayout.NORTH);
	 	 pane.add(secondPanel,BorderLayout.CENTER);
	 	 pane.add(thirdPanel,BorderLayout.SOUTH);
	 	 pack();
	 	 this.setVisible(true);
	 	}
	 	
	 private void miss(){this.dispose();} 
	 
	 private void initFirstPanel(){
	 	 firstPanel=new JPanel();
	 	 firstPanel.setLayout(new BorderLayout());
	 	 JLabel l1=new JLabel("第一步:初始化方块个数");
	 	 l1.setForeground(Color.blue);
	 	 firstPanel.add(l1,BorderLayout.NORTH);
	 	 
	 	 JPanel p1=new JPanel();
	 	 p1.setLayout(new FlowLayout());
	 	 JLabel l2=new JLabel("请选择方块个数:");
	 	 l2.setForeground(Color.blue);
	 	 p1.add(l2);
	 	 String []items={"3X3","4X4","5X5","6X6","7X7","8X8","9X9"};
	 	 c1=new JComboBox(items);
	 	 p1.add(c1);
	 	 JButton b1=new JButton("确定");
	 	 b1.setForeground(Color.red);
	 	 b1.addActionListener(new ChooseBlockNUM());
	 	 p1.add(b1);
	 	 firstPanel.add(p1,BorderLayout.CENTER);
	 	}	
	 	
	 private void initSecondPanel(int blockNUM){
	 	 secondPanel=new JPanel();
	 	 secondPanel.setLayout(new BorderLayout());
	 	 JLabel l1=new JLabel("第二步:初始化开始时方块");
	 	 l1.setForeground(Color.blue);
	 	 secondPanel.add(l1,BorderLayout.NORTH);
	 	 
	 	 JPanel p1=new JPanel();
	 	 p1.setLayout(new GridLayout((int)Math.sqrt(blockNUM),(int)Math.sqrt(blockNUM),2,2));
	 	 secondT=new JTextField[blockNUM];
	 	 if(blockNUM==9){
	 	 	 for(int i=0,s=1;i<blockNUM;i++){
	 	 	  secondT[i]=new JTextField();
	 	      secondT[i].setHorizontalAlignment(SwingConstants.CENTER);
	 	     }
	 	     secondT[0].setText("2");p1.add(secondT[0]);
	 	     secondT[1].setText("8");p1.add(secondT[1]);
	 	     secondT[2].setText("3");p1.add(secondT[2]);
	 	     secondT[3].setText("1");p1.add(secondT[3]);
	 	     secondT[4].setText("");p1.add(secondT[4]);
	 	     secondT[5].setText("4");p1.add(secondT[5]);
	 	     secondT[6].setText("7");p1.add(secondT[6]);
	 	     secondT[7].setText("6");p1.add(secondT[7]);
	 	     secondT[8].setText("5");p1.add(secondT[8]);
	 	 	}
	 	 else{
	 	   for(int i=0,s=1;i<blockNUM;i++){
	 	 	  secondT[i]=new JTextField();
	 	      secondT[i].setHorizontalAlignment(SwingConstants.CENTER);
	 	      if(i!=space)secondT[i].setText(""+(s++));
	 	      p1.add(secondT[i]);
	 	     }
	 	   }  
	 	 secondPanel.add(p1,BorderLayout.CENTER);
	 	 
	 	 JPanel p2=new JPanel();
	 	 p2.setLayout(new FlowLayout());
	 	 JButton b1=new JButton("确定");
	 	 b1.setForeground(Color.red);
	 	 b1.addActionListener(new checkFirst());
	 	 p2.add(b1);
	 	 secondPanel.add(p2,BorderLayout.SOUTH);
	 	}	
	 	
	 private void initThirdPanel(int blockNUM){
	 	 thirdPanel=new JPanel();
	 	 thirdPanel.setLayout(new BorderLayout());
	 	 JLabel l1=new JLabel("第三步:初始化终点方块");
	 	 l1.setForeground(Color.blue);
	 	 thirdPanel.add(l1,BorderLayout.NORTH);
	 	 
	 	 JPanel p1=new JPanel();
	 	 p1.setLayout(new GridLayout((int)Math.sqrt(blockNUM),(int)Math.sqrt(blockNUM),2,2));
	 	 thirdT=new JTextField[blockNUM];
	 	 if(blockNUM==9){
	 	 	 for(int i=0,s=1;i<blockNUM;i++){
	 	 	  thirdT[i]=new JTextField();
	 	      thirdT[i].setHorizontalAlignment(SwingConstants.CENTER);
	 	     }
	 	     thirdT[0].setText("1");p1.add(thirdT[0]);
	 	     thirdT[1].setText("2");p1.add(thirdT[1]);
	 	     thirdT[2].setText("3");p1.add(thirdT[2]);
	 	     thirdT[3].setText("8");p1.add(thirdT[3]);
	 	     thirdT[4].setText("");p1.add(thirdT[4]);
	 	     thirdT[5].setText("4");p1.add(thirdT[5]);
	 	     thirdT[6].setText("7");p1.add(thirdT[6]);
	 	     thirdT[7].setText("6");p1.add(thirdT[7]);
	 	     thirdT[8].setText("5");p1.add(thirdT[8]);
	 	 	}
	 	 else{
	 	   for(int i=0,s=1;i<blockNUM;i++){
	 	 	  thirdT[i]=new JTextField();
	 	      thirdT[i].setHorizontalAlignment(SwingConstants.CENTER);
	 	      if(i!=space)thirdT[i].setText(""+(s++));
	 	      p1.add(thirdT[i]);
	 	     }
	 	   }  
	 	 thirdPanel.add(p1,BorderLayout.CENTER);
	 	 
	 	 JPanel p2=new JPanel();
	 	 p2.setLayout(new FlowLayout());
	 	 JButton b1=new JButton("确定");
	 	 b1.setForeground(Color.red);
	 	 b1.addActionListener(new checkObject());
	 	 p2.add(b1);
	 	 thirdPanel.add(p2,BorderLayout.SOUTH);
	 	}	
	 	
	 private class ChooseBlockNUM implements ActionListener{
	 	 public void actionPerformed(ActionEvent e){
	 	 	 int blockNUM=(c1.getSelectedIndex()+3)*(c1.getSelectedIndex()+3);
	 	 	 Point p=gLoacation();
	 	 	 miss();
	 	 	 new BlockFace(blockNUM,p);
	 	 	}
	 	}
	 	
	 private Point gLoacation(){
	 	 return this.getLocation();
	 	}
	 	
	 private void initXYBlock(){
	 	 xBlock=new String[secondT.length];
	 	 for(int i=0;i<xBlock.length;i++)xBlock[i]=secondT[i].getText().toString();
	 	 yBlock=new String[thirdT.length];
	 	 for(int i=0;i<yBlock.length;i++)yBlock[i]=thirdT[i].getText().toString();
	 	}
	 	
	 private class checkFirst implements ActionListener{
	 	 public void actionPerformed(ActionEvent e){
	 	 	 xBlock=new String[secondT.length];
	 	 	 for(int i=0;i<xBlock.length;i++)xBlock[i]=secondT[i].getText().toString();	 	 	 
	 	 	}
	 	}
	 	
	 private class checkObject implements ActionListener{
	 	 public void actionPerformed(ActionEvent e){
	 	 	 yBlock=new String[thirdT.length];
	 	 	 int dm=5;
	 	 	 boolean t=false;
	 	 	 for(int i=0;i<yBlock.length;i++)yBlock[i]=thirdT[i].getText().toString();
	 	 	 block=new Block(xBlock);
	 	 	 System.out.println("Now the system's thinking step:"+dm);
	 	 	 while(!(t=block.createBlockTree(yBlock,dm))){
	 	 	 	block=new Block(xBlock);
	 	 	 	if(dm<30){dm+=1;System.out.println(dm);}
	 	 	 	else if(dm<70){dm+=10;System.out.println(dm);}
	 	 	 	else {
	 	 	 	   System.out.println("Cann't find answer!");
	 	 	 	   JOptionPane.showMessageDialog(new JFrame(),"移动失败!!!");
	 	 	 	   break;}
	 	 	   }
	 	     if(t){
	 	     	   block.transRoute(yBlock);
	 	           block.reverseRoute();
	 	           miss();
	 	           Point p=gLoacation();
	 	           new MoveBlock(block,p);
	 	       }
	 	 	}
	 	}	
	}	
	
class test{
	 public static void main(String args[]){
	     Point p=new Point(250,200);
	 	 new BlockFace(9,p);
	 	}
	}

⌨️ 快捷键说明

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