基于JSSE的汉诺塔游戏设计与实现

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:xinpasi
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:对汉诺塔游戏问题进行了研究,发现了对汉诺塔游戏用递归算法实现符合问题逻辑结构。设计了基于JSSE的递归算法实现了手动移盘和自动移盘的游戏功能。
  关键词:汉诺塔;盘子问题;游戏设计
  中图分类号:TP311文献标识码:A文章编号:1009-3044(2008)08-10ppp-0c
  
  1 引言
  
  相传在古印度的布拉玛婆罗门圣庙的僧侣在进行一种被称为汉诺塔的游戏,其装置是一块铜板,上面有三根杆(编号A、B、C),A杆上自下而上、由大到小按顺序串上64个金盘。游戏的目标是把 A杆上的金盘全部移到C杆上,并仍原有顺序叠好。条件是每次只能移动一个盘,并且在每次移动都不允许大盘移到小盘之上。僧侣们说游戏结束的时候就是世界末日。现要求利用递归调用技术把N个盘从A杆移到C杆的移动过程演示出来。
  
  2 问题分析
  
  这是一个著名的问题,几乎所有的教材上都有这个问题。由于条件是一次只能移动一个盘,且不允许大盘放在小盘上面,所以64个盘的移动次数是:18,446,744,073,709,551,615 这是一个天文数字,若每一微秒可能计算(并不输出)一次移动,那么也需要几乎一百万年。我们仅能找出问题的解决方法并解决较小N值时的汉诺塔,但很难用计算机解决64层的汉诺塔。
  分析问题,找出移动盘子的正确算法。
  这个移动过程很复杂与烦琐,但规律性却很强。使用递归调用技术来解决这个移动过程,先得找到一个递归调用模型。想要得到汉诺塔问题的简单解法,着眼点应该是移动A杆最底部的大盘,而不是其顶部的小盘。不考虑64个盘而考虑N个盘的一般情况。要想将A杆上的N个盘移至C杆,我们可以这样设想:
  (1)以C盘为临时杆,从A杆将1至N-1号盘移至B杆。
  (2)将A杆中剩下的第N号盘移至C杆。
  (3)以A杆为临时杆,从B杆将1至N-1号盘移至C杆。
  我们看到,步骤2只需移动一次就可以完成;步骤1与3的操作则完全相同, 唯一区别仅在于各杆的作用有所不同。这样,原问题被转换为与原问题相同性质的、规模小一些的新问题。 这就是需要找的递归调用模型。
  
  3 递归算法设计
  
  根据以上分析,在三个柱子中选择一个作为临时杆,可得到基本递归算法如下:
  public class TowersOfHanoi//实现递归算法的类
  {
  private int totalDisks;
  public TowersOfHanoi(int disks)
  {
  totalDisks=disks;
  }
  public void solve()
  {
  moveTower (totalDisks,1,3,2);
  }
  private void moveTower(int numDisks,int start,int end,int temp)
  {
  if(numDisks==1)
  moveOneDisk(start,end);
  else
  {
  moveTower(numDisks-1,start,temp,end);
  moveOneDisk(start,end);
  moveTower(numDisks-1,temp,end,start);
  }
  }
  private void moveOneDisk(int start,int end)
  {
  System.out.println("Move one disk from" start "to" end);
  }
  }
  
  4 游戏界面设计
  
  4.1 布局设计
  在Java的GUI界面设计中,布局控制是通过为容器设置布局编辑器来实现的。java.awt包中共定义了五种布局编辑类,每个布局编辑类对应一种布局编辑策略,分别是FlowLayout、BorderLayout、CardLayout、GridLayout和GridBagLayout。当一个容器选定一种布局编辑策略时,它应该创建该策略对应的布局编辑类的对象,并将此对象设置为自己的布局编辑器。没有设置布局编辑器的容器,其中的对象会互相覆盖,影响使用,所以必须为每个容器设置一个合适的布局编辑器。
  本游戏界面采用BorderLayout布局编辑器实现布局控制,它把容器内的空间简单地划分为东、西、南、北、中五个区域,每加入一个组件都应该指明把这个组件加在哪个区域中。
  BorderLayout只能指定五个区域位置,如果容器中需要加入超过五个组件,就必须使用容器的嵌套或改用其他的布局策略。
  4.2 GUI组件设计
  4.2.1 容器设计
  容器组件的主要作用是包容其他组件并按一定的方式组织排列它们,同一个容器中的所有部件通常总是同时被显示和同时被隐藏的。从AWT组件体系结构中可以看出,所有的容器组件都是Container类的子类,而Container类又是Component类的子类。作为Container子类的容器可以分为三组:Panel和Applet一组的容器都是无边框的;ScrollPane一组是可以自动处理滚动操作的容器;Windows、Frame、Dialog和FileDialog是一组大都含有边框,可以移动、放大、缩小、关闭,功能较强的容器。
  4.2.2 盘子组件设计
  游戏界面中的盘子类继承Button按钮,按钮一般都对应一种特定的功能或操作,当用户鼠标点击按钮时,系统就执行这个预先定义好的操作。本游戏中有手动移盘的操作,故将盘子类设计为按钮Button类的子类,以方便手工移动。另外为每个盘子设置唯一的编号以区别大小不同的盘子。最后为盘子类设置属性上方有盘,以判断每个盘子对象上面是否还有其他盘子。如果该属性值为真,表示不能移动该盘子。
  class Disk extends Button {
  private static final long serialVersionUID = -6174681128406353175L;
  int number;
  boolean 上方有盘 = false;
  public Disk(int number, HannoiTower con) {
  this.number = number;
  setBackground(Color.blue);
  addMouseMotionListener(con);
  addMouseListener(con);
  }
  public boolean get上方有盘() {
  return 上方有盘;
  }
  public void set上方有盘(boolean b) {
  上方有盘 = b;
  }
  public int getNumber() {
  return number;
  }
  }
  4.2.3 塔节点设计
  塔节点的功能是实现盘子在移动过程中的定位。故应为该类的对象设置横纵坐标属性。塔节点表示盘子放置的位置,还应该设置一个布尔属性表示该节点现在有没有盘子,只有当没有盘子时才能放置。最后还要设置返回该属性值的方法等。
  class TowerPoint {
  int x, y;
  boolean 有盘子;
  Disk 盘子 = null;
  HannoiTower con = null;
  public TowerPoint(int x, int y, boolean boo) {
  this.x = x;
  this.y = y;
  有盘子 = boo;
  }
  public boolean 是否有盘子() {
  return 有盘子;
  }
  public void set有盘子(boolean boo) {
  有盘子 = boo;
  }
  public int getX() {
  return x;
  }
  public int getY() {
  return y;
  }
  public void 放置盘子(Disk 盘子, HannoiTower con) {
  this.con = con;
  con.setLayout(null);
  this.盘子 = 盘子;
  con.add(盘子);
  int w = 盘子.getBounds().width;
  int h = 盘子.getBounds().height;
  盘子.setBounds(x - w / 2, y - h / 2, w, h);
  有盘子 = true;
  con.validate();
  }
  public Disk 获取盘子() {
  return 盘子;
  }
  }
  4.3 事件处理机制
  图形用户界面之所以能为广大用户所喜爱并最终成为事实上的标准,很重要的一点就在与它可以用更灵活、简便的方式来接收用户命令。用户在图形用户界面中输入命令是通过移动鼠标对特定图形界面元素单击、双击鼠标或击键来实现的,为了能够接受用户命令,图形用户界面首先应该能够识别这些操作并做出相应的响应。通常每一个键盘或鼠标操作会引发一个系统预先定义好的事件,用户程序只须编制代码定义每个特定事件发生时程序应作出何种响应即可。这些代码会在它们对应的事件发生时由系统自动调用,这就是图形用户界面中事件和事件响应的基本原理。如下代码是鼠标拖动事件的处理:
  public void mouseDragged(MouseEvent e) {
  Disk disk = null;
  if (e.getSource() instanceof Disk) {
  disk = (Disk) e.getSource();
  move = true;
  e = SwingUtilities.convertMouseEvent(disk, e, this);
  }
  if (e.getSource() == this) {
  if (move
其他文献
摘要:本文提出了一种基于GPRS技术构建空气质量监测系统的方案,前端监测站采用单片机嵌入式系统技术构建,后端则是采用Delphi编程工具实现中心服务器以及采集数据库,它们之间通过GPRS网络进行数据通信。其中重点讨论了前端监测站的硬件选型以及软件设计、前后端通信的数据结构定义以及后端数据库接口的构建。该方案结构清晰,可实施性强,GPRS技术的应用保证了前后端系统之间的无缝链接,能够实现真正意义上的
摘要:Web2.0网站在现有网站中的比例越来越高,其具有的互动性、提倡个人体验等特点给信息搜索带来了新的挑战。该文分析了Web2.0的特点,指出Web2.0的某些特点会导致很多信息隐蔽化,并从隐蔽信息检索的角度尝试性地提出了解决办法。  关键词: Web2.0;隐蔽化;信息检索  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)25-1404-03  Informati
摘要:研究实现了一种可跨平台的视频会议系统。该系统采用了基于RIA的Flex技术,可在Windows和Linux操作系统平台下运行,其B/S结构适合在Internet上部署使用。在系统中,设计了一种基于轮播的交互策略,减小了带宽的占用,并利用服务器主动推送技术实现了即时消息和控制信息的发送。实际测试结果表明,本系统实现了系统的平台无关性,适用于在Internet上的视频会议。  关键词:视频会议;
摘要:为了保证农产品的质量安全,从而对其供应链的全过程进行有效跟踪,本文介绍了IPTV平台及其两个关键技术——视频压缩和流媒体,阐述了农产品质量安全追溯系统的追溯方法及流程,追溯机制及平台结构,并对当前依托IPTV平台的该系统进行了总结和展望。  关键词:农产品质量安全;追溯;IPTV;视频压缩;流媒体  中图分类号:TP393文献标识码:A文章编号:1009-3044(2009)22-pppp-
摘要:随着互联网的发展,电子商务己经逐渐成为人们进行商务活动的新模式。同时,电子商务的安全问题也变得越来越突出。公开密钥基础设施(Public Key Infrastructure,PKI)是实现电子商务安全的关键基础技术,是解决电子商务发展中安全问题的最可行、有效的措施。对基于PKI技术的电子商务身份认证系统进行了研究,并提出了具体的实施方案。  关键词:电子商务;身份认证;PKI;实施方案  
摘要:互联网是一把双刃剑,它给人们的生活、工作带来便利的同时也造成了诸多不安全因素,如黑客攻击、病毒肆掠、木马入侵等等。校园网作为学校重要的基础设施,肩负着教学、科研、管理和对外交流等多重角色,如何确保校园网络信息的安全,是校园网建设中的首要问题,必须花大力气解决此问题。  关键词:校园网;信息;安全  中图分类号:TP393 文献标识码:A 文章编号:1009-3044(2012)34-8122
摘要:网络课程设计思想日趋成熟和完善,在教学实践中得到广泛利用。但网络课程的设计仍存在一些问题。本文从网络课程各个模块的可更新性和各个模块的具体设计分析,提出网络课程存在的一些问题及解决策略。  关键词:网络课程;教学设计;协作学习  中图分类号:G434文献标识码:A文章编号:1009-3044(2008)20-30386-02    The Problems and Solutions in
搞要:VFP是Microsoft公司推出的可视化数据库信息管理系统的开发工具。以数据库中表的基本操作为基础,创建视图、查询、报单、报表等,其功能强大,操作快捷方便。该文通过四个方面探讨了VFP数据库是理论与实际中的应用。  关键词:VFP;数据库;表;理论  中图分类号:TP311文献标识码:A 文章编号:1009-3044(2008)22-615-02  数据库因为具有强大的功能和灵活性,是计算
透视Pointpower教学公开课  李雪  (江苏徐州高等师范学校 现代教育系,江苏 徐州 221116)  摘要:该文是针对一堂Pointpower公开课的设计和教学体会所写,信息技术课是实践性强,信息量大的特点,结合计算机课堂教学方法的研究和实践,对一堂教学课进行剖析,从设计项目任务、创设教学情境、总结评价及反思等方面,透视“任务驱动教学法”教学的基本要点。  关键词:课件;情境;任务;学生
摘要:ERP系统是一项先进的管理工具,实质上是以业务流程为主线,对企业资源进行全面整合的高度集成和标准化的企业管理系统。其目的是在企业资源最优化配置的前提下,用来固化和优化企业的业务流程,整合企业的实时信息,加强企业管理,提升企业竞争力,以达到效率化经营的目标。本文就ERP系统应用的风险意识进行了分析和论述,并对企业应用ERP系统过程中容易产生的风险提出了相应防范和规避策略。  关键词:ERP;风