ImageVerifierCode 换一换
格式:DOCX , 页数:20 ,大小:265.78KB ,
资源ID:8288727      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8288727.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(骑士游历JAVA程序设计课程设计报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

骑士游历JAVA程序设计课程设计报告.docx

1、骑士游历JAVA程序设计课程设计报告一 设计课题名称 骑士游历程序的开发二 设计目的与意义Java是目前最流行的软件开发语言之一,有Sun Microsystem 公司推出,成为网络上的“世界语”。Java适合开发基于多媒体、与平台无关、面向对象的方法进行的基于Internet、Intranet、Extranet的Applet和应用程序。Java课程设计是计算机科学与技术专业学生必做的集中实践性环节之一,是学习完Java程序设计课程后进行的一次全面的综合练习。其目的在于通过课程设计,使学生能够得到较系统的技能训练,从而巩固和加深对Java 编程的基础理论知识的理解,培养学生综合运用所学理论解决

2、实际问题的能力,使学生成为具有扎实的计算机理论基础和较强的独立动手能力的复合型、应用型人才。三 系统描述骑士游历问题是一个古老而著名的问题,它最初是由大数学家Euler提出的.问题是这样的:国际象棋中的棋子(叫作骑士)在一个空棋盘内移动,问它能否经过64格中的每一格且只经过一次?(骑士按L行移动,即在某方向前进两格接着在与原方向垂直的方向上前进一格)本程序实现了骑士游历问题的求解,并能够演示起始位置在棋盘上任何位置的游历问题的实现.程序采用动态的图形演示,使算法的描述更形象,更生动,使教学能产生良好的效果.本程序采用Applet来编制整个程序,这样既可以使大家对算法的实现有了一定的了解,也可以

3、熟悉一下Java图形界面, Applet以及Java语言的命名规范.作为本书的第一例子,希望能让大家熟悉Java的基本语言结构和强大的开发能力.在骑士游历的课程设计中,我们严格按照面向对象的思想进行开发,其中有AccessibleSquare 类,MyPanel类和KnightsTour类.读者应注意各个类之间的关系,以便更深入地理解Java中类的思想.四 运行环境本程序是在windows xp,JBuild 9的环境下运行的.五 系统的分析与设计此次骑士游历问题,在JBuild 9集成开发环境下完成编写调试等工作.JBuilder是Borland公司开发的针对java的开发工具,使用JBui

4、lder将可以快速,有效的开发各类java应用,它使用的JDK与sun公司标准的JDK不同,它经过了较多的修改,以便开发人员能够像开发Delphi应用那样开发java应用。 JBuilder的核心有一部分采用了VCL技术,使得程序的条理非常清晰,就算是初学者,也能完整的看完整个代码。JBuilder另一个特点是简化了团队合作,它采用的互联网工作室技术使不同地区,甚至不同国家的人联合开发一个项目成为了可能。Jbuilder 9是功能强大的可视化Java集成开发工具,可以快速开发包括复杂企业级应用系统的各种Java程序,包括独立运行程序、Applet程序、Servlet、JSP、EJB、Web S

5、ervice等,最新的Jbuilder 9版本支持Sun的J2SE 1.4和J2EE 1.4。 使用可视化工具开发程序有很多好处,其中最显著的是能够快速生成程序框架、设计图形界面、调试程序等,此外Jbuilder 9内置了对一些企业级服务器的支持,包括Borland服务器、Bea公司的WebLogic服务器、IBM的WebSphere服务器和iPlanet服务器。Jbuilder 9在以前版本的基础上,增强和增加了许多功能。JBuilder9的代码预览功能(CodeInsight)可以在编辑器中显示一个与上下文相关的弹出窗口。它可以帮助用户快速、准确地编写Java代码。例如,单击一个对象,马上

6、在相应位置出现其所有的属性和方法等内容,用户可以快速地选择所需要的内容。代码预览功能可帮助用户显示与上下文相关的数据成员与方法列表(MemberInsight)、当前代码中要使用的方法的参数列表(ParameterInsight)、可以通过当前类路径访问的类列表(ClassInsight)、结构窗口中的错误(ErrorInsight)以及在调试时显示变量值及表达式的值。5.1 创建骑士游历程序在对Jbuilder9的基本常识有了初步的了解后,就可以起步创建骑士游历程序了。创建过程如下:(1)单击桌面图标,启动Jbuilder9开发平台进入一个新的工程界面。(2)命名新的工程并保存文件,方法是单

7、击菜单File New Project,出现一个对话框窗口,将工程名为Knighttour,选择保存工程文件目录之后,单击Finish按钮完成骑士游历工程的创建。5.2 程序的基本组成 下面着重介绍一下骑士游历程序的界面、程序结构以及程序效果显示图。程序运行的界面上主要包括6个按钮:(1)Info:帮助信息。(2)Start:开始游历。(3)Stop:停止游历。(4)Exit:退出游历。(5)NextTour:重新开始一个新的游历。(6)NextMoving:骑士要走的下一步5.3 程序结构说明 整个程序界面由三部分组成,上方是由Info、Start、Stop和Exit四个按钮的工具栏,可以执

8、行相应的操作;中间是骑士游历效果显示图,动态演示骑士游历的过程;最下边一排是Next Tour和Next Moving两个按钮,单击Next Tour按钮,可重新开始一个新的游历,单击Next Moving按钮,可显示骑士要走的下一步。如图 5-1 所示。(这是骑士在第一个格子起始位置进行游历的情况,如果想在其他位置开始游历,直接单击Next Tour按钮就可以了,程序实现的骑士骑士位置的方式是按照顺序从第一列第一个开始、直到组后一列、最后一行)。另外,可以由边框颜色的不同,判断骑士初始的位置、上一步所走的位置和现在所处的位置。单击Next Moving按钮可以显示骑士游历的下一步。连续单击直

9、到64个格子全部走完,可以清晰地显示整个游历的过程。图5-2显示的是骑士起始位置在第一个格子的游历的一个中间状态。当然,骑士可以在棋盘的任何位置开始,操作者可以自己运行程序,以获得更深的认识。 图5-1 骑士在第一个格子的请况 图5-2 骑士在第一个格子游历的中间状态 本程序由三个类组成一个工程文件.其中KnightsTour是主类,或者说是控制类, AccessibleSquare类主要是算法实现, MyPanel实现图形化显示结果. 程序的运行关系如图5-3. 图5-3 程序运行关系图5.4 AccessibleSquare算法实现AccessibleSquare类主要是算法实现,采用启发

10、式算法. 先把八个可能走的方向用两个数组(horizontal 和vertical )表示出来,选择走哪个方向就在原坐标上进行相应的加法,表示骑士到了一个新的位置. horizontal 和vertical 表示骑士8个方向走L形状所需的X坐标和Y坐标的变化量: horizontal = 2,1,-1,-2,-2,-1,1,2, vertical = -1,-2,-2,-1,1,2,2,1. 坐标图如下:65432187 图5-4 骑士游历走向坐标图 (1) 由于程序采用启发式算法,应考察每一方格的可到达性.使用数组accessibility 表示可达到数,并当骑士游历时,程序动态修正剩余格子

11、的可达到数. accessibility arrayPos = 0 表明格子已经被占据. (2) 使用冒泡法来查询最小数. 冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两个数,将大数放前,小数放后,此时第一趟结束,在最后的数必是所有数中的最小数。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将大数放前,小数放后,一直比较到最小数前的一对相邻数,将大数放前,小数放后,第二趟结束,在倒数第

12、二个数中得到一个新的最小数。如此下去,直至最终完成排序。由于在排序过程中总是大数往前放,小数往后放,相当于气泡往上升,所以称作冒泡排序。5.5 图形化界面由于目前用户对界面的要求逐步提高,因此,现在的可视化编程已经取代了传统的用户界面的设计方法。而在可视化编程中,人机之间的直接联系主要是通过一些窗口和对话框来实现。JBuilder9也不例外,它也是通过这些窗口和对话框来实现窗体。用户需要的控件则可以直接放置在窗体上,利用这些控件来实现复杂的功能。 用户界面设计器是用户在编写程序过程中最常用到的工具。用户在进行界面设计时,只需单击文件视图标签中的Design页,就会出现该用户界面设计器。用户可以

13、利用JBuilder提供的各种控件来搭建自己的程序界面。而且同时,JBuilder9还为这些界面自动生成了相应的代码,为用户提供了程序的环境。接下来,就要由用户设置属性,来编写一些实现用户特定功能的代码。这在很大程度上减少了用户界面设计的复杂度,使用户的主要精力投入到如何实现和加强功能上来。本程序是Applet的图形界面以及如何利用图形用户界面的控件接受用户信息,并用图形或图像显示结果.(1) MyPanel函数实现图形化显示结果, MyPanel类就是画图类.首先用两种不同颜色的方块(WHITE和BIACK)显示出棋盘,还有其他两种方块(WKNIGHT和BKNIGHT),这两种方块上都有骑士

14、,但颜色不一样.在骑士游历过程中不断用后来两种有骑士的方块代替前两种方块,其中需要注意的是保持棋盘的颜色一致性.如5-3图所示.将其设置为静态变量,方便使用,防止修改时出错. 5-5 骑士游历游戏中的棋盘用图(2) 其次就是要显示骑士起始位置,刚走过的步的位置和现在的位置,用边框的不同来加以区别,采用函数g.setColor(Color.green)(刚走过的步显示为绿色)和g.setColor(Color.biue)(当步显示为蓝色)实现.这个类的对象在主类KnightsTour中被实例化.5.6 主调用程序的设计和开发 KnightsTour类是控制类,它完成对算法类和画图类的调用.由于J

15、AVA的GUI编程是事件驱动的,因此在KnightsTour类中,通过监听前面介绍的几个Button的事件相应,完成程序的调用过程.采用二维数组表示初始位置位于某个位置的可达到数, 即以棋盘任意一点为初试位置,骑士游历完整个棋盘的路径数.利用access数组来表示这个二维数组. 2, 3, 4, 4, 4, 4, 3, 2 , 3, 4, 6, 6, 6, 6, 4, 3 , 4, 6, 8, 8, 8, 8, 6, 4 , 4, 6, 8, 8, 8, 8, 6, 4 , 4, 6, 8, 8, 8, 8, 6, 4 , 4, 6, 8, 8, 8, 8, 6, 4 , 3, 4, 6, 6

16、, 6, 6, 4, 3 , 2, 3, 4, 4, 4, 4, 3, 2 ;本程序中在KnightsTour类中添加了两个按钮JButton nextMoving = new JButton( 下一步 ); JButton nextTour = new JButton( 新起点重新开始 );用于用户对游戏进行操作,这两个按钮分别有事件响应.5.7 程序的源程序package gao;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.image.*;public class Knight

17、sTour extends JApplet / 初始位置位于某个位置的可达到数采用二维数组表示 /即以棋盘任意一点为初试位置,骑士游历完整个棋盘的路径数 public static int access = 2,3,4,4,4,4,3,2, 3,4,6,6,6,6,4,3, 4,6,8,8,8,8,6,4, 4,6,8,8,8,8,6,4, 4,6,8,8,8,8,6,4, 4,6,8,8,8,8,6,4, 3,4,6,6,6,6,4,3, 2,3,4,4,4,4,3,2; public static int accessbak = arrayCopy ( access ) ; int cou

18、ntMoving = -1 ; int tourXpos = new int 64 ;/游历中,X,Y都有64个位置 int tourYpos = new int 64 ; private int recordXpos ; private int recordYpos ; private int recordCount = - 1 ; private int startx ; private int starty ; private boolean success = false; MyPanel myPanel ;/声明 MyPanel的一个对象 public void tour ( int

19、 xpos ,int ypos )/成员函数/ int x,y; countMoving + ; /如果64个格子都被走过,则返回 if (countMoving = 63 ) tourXpos countMoving = xpos ; tourYpos countMoving = ypos ; success = true ; countMoving - ; return ; AccessibleSquares nextSquare = new AccessibleSquares( xpos, ypos ); /初试化 AccessibleSquares对象,给nextSquare分配内存

20、while (nextSquare.hasMoreAccessible() /利用AccessibleSquares()对象调用hasMoreAccessible()成员函数 / 开始移动 nextSquare.domoving();/调用 nextSquare.domoving()函数 /把这一步记录下来 tourXpos countMoving = xpos ; tourYpos countMoving = ypos ; / 尝试下一步的移动 nextSquare.nextAccessible(); tour ( nextSquare.getXpos() , nextSquare.getY

21、pos() ); /如果64个格子都被走过,则返回 if ( success ) countMoving - ; return ; /如果失败,则从起始位置从新开始 nextSquare.undomoving(); countMoving - ; /游历方法结束 /定义棋盘行和列 /先定义一行棋盘 public static int arrayCopy ( int array1 )/定义一个整形数组arrayCopy intarray2 = new int array1.length; for ( int row = 0 ; row array1.length ; row + ) array2

22、 row = array1 row ; ; return array2; /复制数组,即定义出棋盘列 public static int arrayCopy ( int array1 ) int array2 = new int array1.lengtharray10.length; for ( int row = 0 ; row array1.length ; row + ) for ( int column = 0 ; column array10.length ; column + ) array2 row column = array1 row column ; ; ; return

23、 array2; /棋盘数组函数初始化 public void initialArray ( int chessBoard ) for ( int row = 0 ; row 8 ; row + ) for ( int column = 0 ; column 8 ; column + ) chessBoard row column = 0 ; ; ; public static void main( String args ) KnightsTour application = new KnightsTour(); application.tour( 0 , 0 ); public void

24、init () recordCount = -1 ; recordXpos = new int 64 64 ; recordYpos = new int 64 64 ; for (int row = 0 ; row 8 ;row +) for ( int column = 0 ; column 8 ; column + ) success = false ; countMoving = -1; startx = row ; starty = column ; access = arrayCopy ( accessbak ); tour ( row ,column ); recordCount

25、+ ; recordXpos recordCount = arrayCopy ( tourXpos ) ; recordYpos recordCount = arrayCopy ( tourYpos ) ; recordCount = 0 ; myPanel = new MyPanel( recordXpos 0 ,recordYpos 0 ) ; JPanel buttonPanel = new JPanel(); JButton nextMoving = new JButton( 下一步 ); JButton nextTour = new JButton( 新起点重新开始 ); butto

26、nPanel.add( nextTour ); buttonPanel.add( nextMoving ); getContentPane().add( buttonPanel, BorderLayout.SOUTH ); getContentPane().add( myPanel ); nextMoving.addActionListener(/匿名内部类,定义了actionPerformed函数,调用showNext函数响应Next Moving Button事件 new ActionListener() public void actionPerformed ( ActionEvent

27、e ) myPanel.showNext() ; );/end call to addActionListener nextTour.addActionListener(/内部类定义了actionPerformed函数,响应Next Tour Button事件 new ActionListener() public void actionPerformed ( ActionEvent e ) if ( recordCount recordXpos.length - 1 ) recordCount + ; else recordCount = 0 ; myPanel.initboard ( re

28、cordXpos recordCount , recordYpos recordCount ); myPanel.repaint(); );/end call to addActionListener public void paint (Graphics g ) super.paint( g ); /end of class KnightsTourclass AccessibleSquares /骑士8个方向走L形状所需的X坐标和Y坐标的变化量 private static int horizontal = 2,1,-1,-2,-2,-1,1,2; private static int ve

29、rtical = -1,-2,-2,-1,1,2,2,1; private int xpos ;/骑士所处X轴的坐标 private int ypos ;/骑士所处y轴的坐标 private int accessibility ;/表示可达到数 private int ownxpos ,ownypos ; private int ownAccessibility ; private int arrayPos ; private int countAccessibility; public AccessibleSquares(int x , int y )/构造函数 int testXPos; int testYPos; xpos = new int 8 ;/骑士所处X轴的坐标 ypos = new int 8 ; accessibility = new int 8 ; arrayPos = 0 ; ownxpos = x ; ownypos = y ; ownAccessibility = KnightsTour.access x y ; for (int i = 0 ; i = 0 ) & ( testXPos = 0 ) & ( testY

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1