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

📄 hannuota.java

📁 汉诺塔 一种可以实现汉诺塔的c语言开发源程序
💻 JAVA
字号:
/**
***
**/
import java.awt.*;
import java.applet.*;
import java.awt.event.*;
/**
***
**/

public class HanNuoTa extends Applet implements ActionListener,Runnable{

	public int TaGao,TaFromTa,TaMidTa,TaToTa;
	public int DuiZhan[][];
	public int TopPoint[];
	public int i,j,times,fullnumber,delay,welcome,minite,second;
	private Thread hnt;
	public String TextString;

	Label TaNumber,NumberFrom,NumberTo;
	TextField TaText,FromText,ToText;
	Button StartToMove,StartGame;
	Graphics OfGraphics;
	/**
	***
	**/

	public void init(){

		DuiZhan=new int[3][20];
		TopPoint=new int[3];
		TaGao=7;
		TaFromTa=0;
		TaMidTa=1;
		TaToTa=2;
		welcome=-1;
		i=0;
		j=0;
		for(i=0;i<3;i++)
			for(j=0;j<20;j++)
				DuiZhan[i][j]=0;
		for(i=0;i<3;i++)
			TopPoint[i]=0;
		TextString=new String(" ");

		TaNumber=new Label("塔高层数");
		NumberFrom=new Label("原来塔位置");
		NumberTo=new Label("最后塔位置");
		TaText=new TextField(10);
		FromText=new TextField(10);
		ToText=new TextField(10);
		StartToMove=new Button("常速移动");
		StartGame=new Button("快速移动");

		add(TaNumber);
		add(TaText);
		add(NumberFrom);
		add(FromText);
		add(NumberTo);
		add(ToText);
		add(StartToMove);
		add(StartGame);
		StartToMove.addActionListener(this);
		StartGame.addActionListener(this);
	}
	/**
	***
	**/
	public void paint(Graphics g){

		g.setColor(Color.gray);
		g.fillRect(0,0,980,450);
		g.setColor(Color.black);
		g.drawString("第0座",155,70);
		g.drawString("第1座",475,70);
		g.drawString("第2座",795,70);
		if(welcome>0){
			
			paintmain(g);
		}
		else{
			
			g.setColor(Color.red);
			Image MyImages[];
			MyImages=new Image[1];
			MyImages[0]=getImage(getDocumentBase(),"hnt.class");
			g.drawImage(MyImages[0],0,0,this);
			welcome++;
			for(i=0;i<6;i++)
				pause();
		}
	}
	public void update(Graphics g)
	{
		paint(g);
	}
	public void paintmain(Graphics g){

		g.setColor(Color.black);
		g.drawLine(20,380,320,380);
		g.drawLine(340,380,640,380);
		g.drawLine(660,380,960,380);
		g.drawLine(170,80,170,380);
		g.drawLine(490,80,490,380);
		g.drawLine(810,80,810,380);
		for(i=0;i<3;i++){
			
			for(j=0;j<TopPoint[i];j++){
				
				switch(DuiZhan[i][j]%7){
					case 0:g.setColor(Color.green);break;
					case 1:g.setColor(Color.blue);break;
					case 2:g.setColor(Color.cyan);break;
					case 3:g.setColor(Color.magenta);break;
					case 4:g.setColor(Color.pink);break;
					case 5:g.setColor(Color.red);break;
					case 6:g.setColor(Color.yellow);break;
					default:break;
				}
				g.fillRect(170+320*i-8*DuiZhan[i][j],364-j*16,16*DuiZhan[i][j],15);
				g.drawString("第"+i+"座",160+320*i,400);
			}
		}

		if(fullnumber!=0){
			
			g.setColor(Color.red);
			minite=times*delay/1000/60;
			second=times*delay/1000-minite*60;
			g.drawString("进度:"+times*100/fullnumber+"%",30,416);
			g.drawString("   耗时:"+minite+"分"+second+"秒",110,416);
			g.drawRect(50,420,600,20);
			g.setColor(Color.green);
			g.fillRect(53,423,times*596/fullnumber,16);
		}
	}
	public void NuoYiWei(int FromTa,int ToTa){

		TopPoint[FromTa]--;
		DuiZhan[ToTa][TopPoint[ToTa]]=DuiZhan[FromTa][TopPoint[FromTa]];
		DuiZhan[FromTa][TopPoint[FromTa]]=0;
		TopPoint[ToTa]++;
		repaint();
		pause();
		times++;
	}
	/**
	***
	**/
	public void Nuo(int FromTa,int MidTa,int ToTa,int NeedMove){

		if(NeedMove>=2){
			Nuo(FromTa,ToTa,MidTa,NeedMove-1);
			NuoYiWei(FromTa,ToTa);
			Nuo(MidTa,FromTa,ToTa,NeedMove-1);
			StartToMove.setVisible(true);
			StartGame.setVisible(true);
		}
		else{
			NuoYiWei(FromTa,ToTa);
			StartToMove.setVisible(true);
			StartGame.setVisible(true);
		}
	}
	public void dealevent(){
		
		String str;
		times=0;
		fullnumber=0;
		for(i=0;i<3;i++)
			for(j=0;j<20;j++)
				DuiZhan[i][j]=0;
		for(i=0;i<3;i++)
			TopPoint[i]=0;
		str=TaText.getText();
		for(i=1;i<20;i++){
			
			if(str.equals(String.valueOf(i)))
				break;
		}
		if(i==20){
			
			TaText.setText("请输入1-19的数");
		}
		else{
			
			TaGao=Integer.parseInt(TaText.getText());
		}
		str=FromText.getText();
		for(i=0;i<3;i++){
			
			if(str.equals(String.valueOf(i)))
				break;
		}
		if(i==3){
			
			FromText.setText("应输入0-2的数");
		}
		else{
			
			TaFromTa=Integer.parseInt(FromText.getText());
		}
		str=ToText.getText();
		for(i=0;i<3;i++){
			
			if(str.equals(String.valueOf(i)))
				break;
		}
		if(i==3){
			
			ToText.setText("应输入0-2的数");
		}
		else{
			
			TaToTa=Integer.parseInt(ToText.getText());
		}
		if(TaFromTa!=TaToTa){

			StartToMove.setVisible(false);
			StartGame.setVisible(false);
			for(i=0;i<TaGao;i++){
				
				fullnumber=2*fullnumber+1;
			}
			TaMidTa=3-TaFromTa-TaToTa;
			for(i=0;i<TaGao;i++)
				DuiZhan[TaFromTa][i]=TaGao-i;
			TopPoint[TaFromTa]=TaGao;
			times=0;
			hnt=new Thread(this);
			hnt.start();
			hnt=null;
		}
		else{
			
			FromText.setText("不用挪动");
			ToText.setText("不用挪动");
		}
	}
	public void actionPerformed(ActionEvent e){

		if(e.getSource()==StartGame){
			
			delay=250;
		}
		if(e.getSource()==StartToMove){
			
			delay=750;
		}
		dealevent();
	}
	public void run(){
		
		repaint();
		pause();
		Nuo(TaFromTa,TaMidTa,TaToTa,TaGao);
		repaint();
	}
	void pause(){
	
		try{

			Thread.sleep(delay);
		}
		catch(InterruptedException e){

			showStatus(e.toString());
		}
	}
}

⌨️ 快捷键说明

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