java 汉诺塔的演示程序

本文介绍了一个使用Java Swing实现的汉诺塔游戏示例。该程序允许用户输入盘子数量和移动频率,通过递归算法解决汉诺塔问题,并动态展示盘子的移动过程。
import javax.swing.JOptionPane;
import javax.swing.*;
import java.awt.*;
import java.awt.Graphics;


public class Hanoi extends JFrame
{
        static int n=Integer.parseInt(JOptionPane.showInputDialog("Enter number of disks:"));
        static int time=Integer.parseInt(JOptionPane.showInputDialog("Enter the move frequency of disks:"));
        static int num=0;
        static char[] array=new char[n];
        private static Thread animate;
       
        MyPanel panel =new MyPanel();
        static String string="";
        static JTextArea text=new JTextArea();
       
       
       
        public Hanoi()
        {
                getContentPane ().setLayout (new BorderLayout());
                getContentPane ().add (new JScrollPane(text),BorderLayout.EAST);       
                getContentPane ().add (panel,BorderLayout.CENTER);
               

        }
       
        public static void main (String[] args)
        {
                for(int i=0;i<n;i++)
                {
                        array[i]='A';
                }
                Hanoi hanoi=new Hanoi();
                hanoi.setTitle("Hanoi Tower");
                hanoi.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                hanoi.setSize(1450, 400);
                hanoi.setVisible(true);
                hanoi.moveDisks(n, 'A', 'C', 'B');
        }
       
        public class MyPanel extends JPanel
        {
               
                public void paintComponent(Graphics g)
                {
                super.paintComponent(g);
                        g.setColor(Color.RED);
                        g.drawLine(50,310,1100,310);
                        g.fillRect(200,10,10,300);
                        g.drawString("A", 203, 340);
                        g.fillRect(500,10,10,300);
                        g.drawString("B", 503, 340);
                        g.fillRect(800,10,10,300);
                        g.drawString("C", 803, 340);
                        draw(g);
                        repaint();
                }
                void draw(Graphics g)
                {
                        g.setColor(Color.YELLOW);
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                               
                                if(array[(int)(i-1.0)]=='A')
                                {
                                        g.fillOval(205-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 203, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                               
                        }
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                               
                                if(array[(int)(i-1)]=='B')
                                {
                                        g.fillOval(505-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 503, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                               
                        }
                        num=0;
                        for(int  i=n;i>0;i--)
                        {
                               
                                if(array[(int)(i-1)]=='C')
                                {
                                        g.fillOval(805-(int)((i-1+1.0)/n*150),290-20*num,2*(int)((i-1+1.0)/n*150),20);
                                        g.setColor(Color.BLACK);
                                        g.drawString(""+i, 803, 304-20*num);
                                        g.setColor(Color.YELLOW);
                                        num++;
                                }
                               
                        }
                       
                       
                       
                        g.setColor(Color.BLACK);
                }
               
               
        }
        public  void moveDisks(int a, char fromTower,char toTower, char auxTower)
        {
               
                       
               
                if (a == 1) // Stopping condition
                {
                        System.out.println("Move disk " + a + " from " +fromTower + " to " + toTower);
                        string+="Move disk " + a + " from " +fromTower + " to " + toTower+"         ./n";
                        text.setText(string);
                        array[a-1]=toTower;
                        pause();
                }
                else
                {
                        moveDisks(a - 1, fromTower, auxTower, toTower);
                        System.out.println("Move disk " + a + " from " +fromTower + " to " + toTower);
                        string+="Move disk " + a + " from " +fromTower + " to " + toTower+ "         ./n";
                        text.setText(string); 
                        array[a-1]=toTower;
                        pause();
                        moveDisks(a - 1, auxTower, toTower, fromTower);

                }
       
        }
               
        public static void pause()
        {
                try
                {
                        Thread.sleep(time*100);//可以修改此值加快盘子移动的速度
                }
                catch(InterruptedException e)
                {
                }
        }
       
}
如果您下载了本程序,但是该程序存在问题无法运行,那么您可以选择退款或者寻求我们的帮助(如果找我们帮助的话,是需要追加额外费用的)。另外,您不会使用资源的话(这种情况不支持退款),也可以找我们帮助(需要追加额外费用) 随着移动互联网技术的发展和用户需求的变化,【小程序名称】应运而生,以其轻量化、便捷化的设计理念为用户提供了一种全新的服务模式。作为一款无需下载安装即可使用的应用,【小程序名称】依托于微信庞大的生态系统,让用户在微信内就能轻松实现各种功能操作。 【小程序名称】的核心功能主要集中在【具体服务领域】,例如在线购物、本地生活服务、教育学习或健康管理等。它简化了传统APP繁琐的注册登录流程,支持微信一键授权登录,极大地提升了用户体验。用户通过搜索或扫描二维码,瞬间即可开启使用,享受快速加载、流畅运行的服务。 该小程序界面设计简洁明了,布局合理,易于上手。同时,其特色功能如实时更新的信息推送、个性化推荐以及社交分享功能,让用户能够及时获取所需信息,并方便地将优质内容分享至朋友圈或好友,实现信息的高效传播与互动。 【小程序名称】注重数据安全与隐私保护,严格遵守国家法律法规和微信平台的规定,确保用户数据的安全无虞。此外,其背后的开发团队持续迭代更新,根据用户反馈不断优化产品性能,提升服务质量,致力于打造一个贴近用户需求、充满活力的小程序生态。 总结来说,【小程序名称】凭借其小巧便携、快捷高效的特性,不仅节省了用户的手机存储空间,更为用户提供了无缝衔接的便利服务,是现代生活中不可或缺的一部分,真正实现了“触手可及”的智能生活新体验。只需轻点屏幕,无限精彩尽在掌握之中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值