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

📄 hnt.java

📁 胡乱写的一个汉诺塔游戏,界面简单,大家看看吧!
💻 JAVA
字号:
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.util.*;
public class HNT
{
	public static void main(String[] args)
	{
		HNTFrame frame=new HNTFrame();
		frame.setSize(600,450);
		frame.setLocation(200,200);
		frame.setTitle("汉诺塔");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setVisible(true);
	}
}
class HNTFrame extends JFrame
{
	public HNTFrame()
	{
		n=null;
		bnt=new JButton("确定");
		tf=new JTextField(5);
		panel1=new JPanel();
		//*******************
		sourcePanel=new DrawPanel(false);
		sourcePanel.setPreferredSize(new Dimension(180,350));
		sourcePanel.setBackground(Color.WHITE);
		sourcePanel.setAction("out");
		//**********************
		aimPanel=new DrawPanel(true);
		aimPanel.setPreferredSize(new Dimension(180,350));
		aimPanel.setBackground(Color.WHITE);
		aimPanel.setAction("in");
		//*************************
		standbyPanel=new DrawPanel(false);
		standbyPanel.setPreferredSize(new Dimension(180,350));
		standbyPanel.setBackground(Color.WHITE);
		standbyPanel.setAction("in");
		//************
		sourcePanel.setEnabled(false);
		aimPanel.setEnabled(false);
		standbyPanel.setEnabled(false);
		//************
		sList=new ArrayList<NewRect>();
		aList=new ArrayList<NewRect>();
		stList=new ArrayList<NewRect>();
		aList.clear();
		stList.clear();
		sourcePanel.setList(sList);
		aimPanel.setList(aList);
		standbyPanel.setList(stList);
		panel1.add(new JLabel("输入层数"));
		panel1.add(tf);
		panel1.add(bnt);
		label=new JLabel();
		panel1.add(new JLabel("步数:"));
		panel1.add(label);
		add(panel1,BorderLayout.NORTH);
		//add(b,BorderLayout.CENTER);
		JPanel panel=new JPanel();
		panel.add(sourcePanel);
		panel.add(aimPanel);
		panel.add(standbyPanel);
		add(panel,BorderLayout.CENTER);									
		bnt.addActionListener(new ActionListener()
														{
															public void actionPerformed(ActionEvent e)
															{
																count=0;
																String n=tf.getText();
																if(!n.trim().equals(""))
																{
																	num=Integer.parseInt(n);
																	//System.out.println(num);
																	aimPanel.setLength(num);
																	for(int i=0;i<num;i++)
																	{
																		NewRect nr=new NewRect(WIDTH-(i*20),sourcePanel);
																		//System.out.println(nr);
																		sList.add(nr);
																	}
																	sourcePanel.setList(sList);
																	sourcePanel.repaint();
																	aList.clear();
																	stList.clear();
																	aimPanel.setList(aList);
																	standbyPanel.setList(stList);
																	aimPanel.repaint();
																	standbyPanel.repaint();
																	bnt.setEnabled(false);
																	tf.setEnabled(false);
																	sourcePanel.setEnabled(true);
																	aimPanel.setEnabled(true);
																	standbyPanel.setEnabled(true);
																}
																else 
																{
																	JOptionPane.showMessageDialog(null,"输入层数");
																	tf.grabFocus();
																	return;
																}
															}
														}
														);
		//******************************
		sourcePanel.addMouseListener(new MouseAdapter()
																	{
																		public void mouseClicked(MouseEvent e)
																		{
																			label.setText((count++)+"");
																			//source.action();
																			if(e.getButton()==MouseEvent.BUTTON1)
																			{
																				if(n==null)
																				{
																					/*aimPanel.setAction("in");
																					standbyPanel.setAction("in");*/
																					if(!sList.isEmpty())
																					{
																						int size=sList.size();
																						n=(NewRect)sList.remove(size-1);
																						sourcePanel.setList(sList);
																						sourcePanel.repaint();
																					}
																					else return;
																				}
																				else
																				{
																					/*aimPanel.setAction("in");
																					standbyPanel.setAction("in");*/
																					al=sourcePanel.getList();
																					int size=al.size();
																					if(size>0)
																					{
																						if(n.getW()<al.get(size-1).getW())
																						{
																							n.setPanel(sourcePanel);
																							sList.add(n);
																							sourcePanel.setList(sList);
																							sourcePanel.repaint();
																							n=null;
																						}
																						else
																						{
																							DrawPanel pp=n.getPanel();
																							al=pp.getList();
																							al.add(n);
																							n=null;
																							pp.setList(al);
																							pp.repaint();
																						}
																					}
																					else if(size==0)
																					{
																						n.setPanel(sourcePanel);
																						sList.add(n);
																						sourcePanel.setList(sList);
																						sourcePanel.repaint();
																						n=null;
																					}
																				}
																			}
																			else return;
																		}
																	}
																	);
		aimPanel.addMouseListener(new MouseAdapter()
																	{
																		public void mouseClicked(MouseEvent e)
																		{
																			label.setText((count++)+"");
																			if(e.getButton()==MouseEvent.BUTTON1)
																			{
																				if(n==null)
																				{
																					/*aimPanel.setAction("in");
																					standbyPanel.setAction("in");*/
																					if(!aList.isEmpty())
																					{
																						int size=aList.size();
																						n=(NewRect)aList.remove(size-1);
																						aimPanel.setList(aList);
																						aimPanel.repaint();
																					}
																					else return;
																				}
																				else 
																				{
																					al=aimPanel.getList();
																					int size=al.size();
																					if(size>0)
																					{
																						if(n.getW()<al.get(size-1).getW())
																						{
																							n.setPanel(aimPanel);
																							aList.add(n);
																							aimPanel.setList(aList);
																							aimPanel.repaint();
																							n=null;
																							al=aimPanel.getList();
																							int s=al.size();
																							//System.out.println(s);
																							if(s==num)
																							{
																								JOptionPane.showMessageDialog(null,"成功");
																								sourcePanel.setEnabled(false);
																								aimPanel.setEnabled(false);
																								standbyPanel.setEnabled(false);
																								tf.setEnabled(true);
																								bnt.setEnabled(true);
																							}
																						}
																						else
																						{
																							DrawPanel pp=n.getPanel();
																							al=pp.getList();
																							al.add(n);
																							n=null;
																							pp.setList(al);
																							pp.repaint();
																							al=aimPanel.getList();
																							int s=al.size();
																							//System.out.println(s);
																							if(s==num)
																							{
																								JOptionPane.showMessageDialog(null,"成功");
																							}
																						}
																					}
																					else if(size==0)
																					{
																						n.setPanel(aimPanel);
																						aList.add(n);
																						aimPanel.setList(aList);
																						aimPanel.repaint();
																						n=null;
																					}
																				}
																			}
																			else return;
																		}
																	}
																	);
		standbyPanel.addMouseListener(new MouseAdapter()
																	{
																		public void mouseClicked(MouseEvent e)
																		{
																			label.setText((count++)+"");
																			if(e.getButton()==MouseEvent.BUTTON1)
																			{
																				if(n==null)
																				{
																					/*aimPanel.setAction("in");
																					standbyPanel.setAction("in");*/
																					if(!stList.isEmpty())
																					{
																						int size=stList.size();
																						n=(NewRect)stList.remove(size-1);
																						standbyPanel.setList(stList);
																						standbyPanel.repaint();
																					}
																					else return;
																				}
																				else
																				{
																					/*aimPanel.setAction("in");
																					standbyPanel.setAction("in");*/
																					/*stList.add(n);
																					standbyPanel.setList(stList);
																					standbyPanel.repaint();
																					n=null;*/
																					al=standbyPanel.getList();
																					int size=al.size();
																					if(size>0)
																					{
																						if(n.getW()<al.get(size-1).getW()||size==0)
																						{
																							n.setPanel(standbyPanel);
																							stList.add(n);
																							standbyPanel.setList(stList);
																							standbyPanel.repaint();
																							n=null;
																						}
																						else
																						{
																							DrawPanel pp=n.getPanel();
																							al=pp.getList();
																							al.add(n);
																							n=null;
																							pp.setList(al);
																							pp.repaint();
																						}
																					}
																					else if(size==0)
																					{
																						n.setPanel(standbyPanel);
																						stList.add(n);
																						standbyPanel.setList(stList);
																						standbyPanel.repaint();
																						n=null;
																					}
																				}
																			}
																			else return;
																		}
																	}
																	);
	}
	private JLabel label;
	private static int count=0;
	private ArrayList<NewRect> al;
	private int num;
	private JButton bnt;
	private final int WIDTH=150;
	private JPanel panel1;
	private JTextField tf;
	private DrawPanel sourcePanel;
	private DrawPanel aimPanel;
	private DrawPanel standbyPanel;
	private ArrayList<NewRect> sList,aList,stList;
	private NewRect n;
}
class DrawPanel extends JPanel
{
	public DrawPanel(boolean b)
	{
		final boolean bb=b;
		//System.out.println(ac);
		final DrawPanel dp=this;
		r=null;
	}
	public void setLength(int len)
	{
		this.len=len;
	}
	public int getLength()
	{
		return len;
	}
	public void paintComponent(Graphics g)
	{
		super.paintComponent(g);
		Graphics2D g2=(Graphics2D)g;
		int size=list.size();
		int height=getHeight()-size*20;
		//g2.translate(0,0);
		int i=list.size();
		//System.out.println(i);
		if(i==0) return;
		while(i>0)
		{
			//System.out.println(i);
			/*if(ac.equals("out")&&i==list.size())
				g2.setPaint(Color.BLACK);
			else */
			NewRect r=(NewRect)list.get(i-1);
			r.setRect(((double)getWidth()-r.getW())/2,(double)height,r.getW(),20);
			g2.setPaint(Color.RED);
			g2.fill(r);
			//g2.setForeground(Color.YELLOW);
			//super.paintComponent(g);
			i--;
			height=height+21;
			//g2.translate(0,hight);
		}
	}
	public void setAction(String ac)
	{
		this.ac=ac;
	}
	public String getAction()
	{
		return ac;
	}
	public void action()
	{
		if(ac.equals("out")) ac="in";
		else ac="out";
	}
	public void setList(ArrayList<NewRect> list)
	{
		this.list=list;
	}
	public ArrayList<NewRect> getList()
	{
		return list;
	}
	private NewRect r;
	private int len;
	private String ac="";
	private ArrayList<NewRect> list;
}
//*********************
class NewRect extends Rectangle2D.Double
{
	public NewRect(int width,DrawPanel panel)
	{
		this.width=width;
		this.panel=panel;
	}
	public DrawPanel getPanel()
	{
		return panel;
	}
	public void setPanel(DrawPanel panel)
	{
		this.panel=panel;
	}
	public int getW()
	{
		return width;
	}
	public String toString()
	{
		return ""+width;
	}
	private DrawPanel panel;
	private int width;
}

⌨️ 快捷键说明

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