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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

本文(中国象棋打谱系统Java语言毕业设计内附详细的Java程序.docx)为本站会员(b****3)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

中国象棋打谱系统Java语言毕业设计内附详细的Java程序.docx

1、中国象棋打谱系统Java语言毕业设计内附详细的Java程序1.绪论1.1引言象棋水平的发展是需要靠信息技术来推动的,国际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台WinBoard平台,另一个是商业的国际象棋数据库和对弈软件ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。国际象棋软件有着成功的商业运作,已发展成一种产业。然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。例如

2、B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎Ferret的开发,他的一系列关于国际象棋程序设计的文章非常值得其他棋类程序设计人员借鉴。然而,中国象棋与国际象棋存在着很大的差异,因此国际象棋的某些成熟技术,无法直接应用于中国象棋,需要对其加以改进和创新。1.2主要设计内容本课题采用Java语言编写这个中国象棋对弈系统程序。主要工作内容:搜集相关资料,准备参考资料,学习掌握开发方法、开发工具,需求分析,确定游戏程序实施方案,根据要求设计具体的流程图,编写程序,修改、完善程序,系统调试、测试,优化处理。2.开发工具简介2.1 java语言概述Java是由Sun

3、 Microsystems公司于1995年5月推出的Java程序设计语言和Java平台的总称。用Java实现的HotJava浏览器(支持Java applet)显示了Java的魅力:跨平台、动感的Web、Internet计算。从此,Java被广泛接受并推动了Web的迅速发展,常用的浏览器现在均支持Java applet。另一方面,Java技术也不断更新。Java平台由Java虚拟机(Java Virtual Machine)和Java 应用编程接口(Application Programming Interface、简称API)构成。Java 应用编程接口为Java应用提供了一个独立于操作系统

4、的标准接口,可分为基本部分和扩展部分。在硬件或操作系统平台上安装一个Java平台之后,Java应用程序就可运行。现在Java平台已经嵌入了几乎所有的操作系统。这样Java程序可以只编译一次,就可以在各种系统中运行。Java应用编程接口已经从1.1x版发展到1.2版。目前常用的Java平台基于Java1.4,最近版本为Java1.6。2.2 java语言的特点Java语言是一个支持网络计算的面向对象程序设计语言。Java语言吸收了Smalltalk语言和C+语言的优点,并增加了其它特性,如支持并发程序设计、网络通信、和多媒体数据控制等。主要特性如下:1. Java语言是简单的。Java语言的语法

5、与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。2. Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C+ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。3. Java

6、语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。4. Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。5. Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除

7、了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。 6. Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。 7. Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类

8、型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。8. Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。9. Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C+。 10. Java语言是多线程的。在Java

9、语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。11. Java语言是动态的。Java语言

10、的设计目标之一是适应于动态变化的环境。Java程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统

11、提供了有关技术和丰富的类库。2.3 关于ECLIPSEEclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development Tools,JDT)。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人

12、员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用 Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse 是一个开放源代码的、基于 Java 的可

13、扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。3.程序设计需求分析3.1任务概述用java实现具有一定功能的中国象棋对弈软件,主要功能如下:a.象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。b.新游戏:任何时候可以重新开始一盘新的对弈。c.悔棋:当走错棋的时候可以悔棋。d.信息提示:提示当前信息状态。e.简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明。3.2综合要求1. 硬件配置 CPU:Pentium 4 1.6G 内存:512MB 硬盘剩余空间:2GB2. 软件环境操作系统:Microsoft Windows XP安装Sun公司的J

14、ava运行环境JRE 1.5,安装Java开发工具包(JDK 1.5)及ECLIPSE3.3 设计基本要求1 中国象棋是双方在由9条和10条横线分割而成的棋盘对弈。竖线与横线的交叉点称做棋点,每个棋子都放置在棋点上 ,而不是方格中。河界将棋盘分为两个等分=份,没一边都有一个由9个点组成的区域“将”,“帅”,“士”只能在“九宫”内移动,并且“将”,“帅”,的每一步只可以水平或垂直移动一个棋点。士:“士”只能在“九宫”内移动,并且每一步只可以沿对角线方向移动一个棋点。象;一步必须沿对角线方向走两个棋点。但它既不能过河,也不能跳过或穿越障碍,即象征走的过程不能被“别眼”。马:每一步只可以水平或垂直移

15、动一个棋点。但它必须沿对角线方向,向左或向右移动,中国象棋的马不能跳过障碍,即在走的过程不能被“别腿”。车:可以沿水平或垂直方向移动任意个无障碍的点。炮:行走规则和车很类似,但它必须跳过一个棋子来吃掉对方的一个棋子。被跳过的棋子被称为桥或者屏风。兵:过河前每步只能向前移动一个棋点。过河后,它便增加了向左右移动的能力。并不允许向后移动。2单击“中国象棋”菜单可以选择“制作棋谱”,“保存棋谱 ”和“演示棋谱”菜单项。3选择“制作棋谱”,将出现相应的棋盘,该棋盘可进行实战对弈,可以随时选择“保存棋谱”,将对弈过程保存成一个棋谱文件。选择“演示棋谱”将显示打开文件对话框供用户选择以保存的棋谱文件。选择

16、棋谱文件后,将显示用来演示棋谱的棋盘,用户可以选择自动或者手动来演示对弈过程。4.程序的总体设计4.1线程的设计在Java中,创建线程的方法有两种:一种是通过创建Thread类的子类来实现;另一种是通过实现Runnable接口的类来实现。这两种创建线程方法并没有本质上的区别,但是由于Java不允许多重继承,所以当一个类要继承另一个非Thread类而实现多线程的话,只能通过实现Runnable接口的方式来实现。4.1.1 通过Thread类实现 定义一个线程类,他继承类Thread并重写其中的run()方法。这时在初始化这个类的实例时,目标对象target可以为null,表示这个实例本身具有线程

17、体。由于Java只支持单继承,用这种方法定义的类不能再继承其他类。Thread类定义的用来帮助管理线程的方法主要包括以下内容。 void run()方法:线程的入口点,运行线程中的代码。 void start()方法:通过调用运行方法来启动线程,使之由出生状态转入就绪状态。 void sleep(long milis):在一段时间内挂起线程,令线程睡眠,在此期间,线程不消耗CPU资源;以毫秒为单位。 void interrupt():中断线程。 boolean isAlive():判定线程是否仍在在运行,出于活动状态。 void stName(String threadName):改变线程的名

18、字。 String getName():获取由setName()方法实质的线程名字的字符串。 Yield():将CPU控制权主动移交到下一个可运行的线程。 setPriority(int p):设置线程优先级。 getPriority():获得线程优先级。 Join():等待一个线程终止。4.1.2 实现Runnable接口创建线程的最简单的方法就是创建一个实现Runnable接口的类。然后根据工作需要重新设计线程的run方法;再建立该类的对象。Runnable抽象了一个执行代码单元。你可以通过实现Runnable接口的方法创建每一个对象的线程。为实现Runnable接口,一个类仅需实现一个r

19、un()的简单方法。4.2线程的生命周期 每个线程的生命周期一共包括5种状态:出生,就绪,运行,阻塞和死亡。线程从出生到死亡的过程称为线程的生命周期。通过特定的操作可以进行状态间的转换。4.2.1 出生当用关键字new和thread类或其子类建立了一个线程对象后,该线程就处于出生状态。 Thread线程名=new Thread();处于新建状态的线程只是一个空闲的线程对象,系统并没有为他分配资源。在调用start方法之前,线程就一直处于出生状态。4.2.2 就绪在调用了start方法之后,线程就进入就绪状态,即被加入到处于就绪状态的线程序列中,在等待CPU时间片。线程名。Start();4.2

20、.3 运行 当处于线程序列中的线程获得CPU时间片的时候,该线程就会自动调用其run方法,进入运行状态。4.2.4 阻塞线程能够运行,但有某个条件能阻止它的运行。当线程处于阻塞状态时,调度机制将忽略线程,不会分配给线程任何处理器时间。直到线程重新进入了就绪状态,它才有可能执行操作。导致线程进入阻塞状态原因主要包括以下几种。 通过调用wait()方法使线程挂起。直到线程得到了notify()或notifyAll()消息,线程才会进入就绪状态。当与某对象相关的一个线程调用了notify()方法时,那么等待该特定对象的一个线程便进入就绪状态;当与某对象相关的线程调用了notifyAll()方法后,等

21、待该对象的所有线程都会回到就绪状态。 通过调用sleep()方法使线程进入休眠状态。在这种情况下,线程在指定的时间内不会运行。只能等待其结束期后,线程才可以自动进入就绪状态。 线程在等待某个输入/输出完成。只能等待该输入/输出操作完成后,线程才可以自动进入就绪状态。 调用suspend()方法挂起程序。可以通过调用resume()方法使其进入就绪状态。 线程试图在某个对象上调用其同步控制方法,但是对象锁不可用。4.2.5 死亡死亡状态是线程生命周期中的最后一个阶段。一共有两种方式可以导致一个线程的死亡。 自然死亡:线程的run()方法正常结束。 强制死亡:通过执行stop()或destroy(

22、)方法使线程终止。5.程序的详细设计5.1程序流程图中国象棋对弈系统共有8个Java源文件。重要之间的关系如下图; 图1 类之间的关系Chess.Java该Java文件生成的类负责创建程序的主窗口。该类含有main方法,程序从该类开始执行。ChessBoard.java该文件生成的类负责创建“对弈棋盘”,用户可以用鼠标拖动棋盘上的棋子,当松开鼠标是则将棋子放在棋点。该棋盘不允许用户将棋子拖放到非棋点上。棋盘上的rule对象负责判断走棋是否遵守了中国象棋的规则,例如“马”走日,“象”走田,“小卒”一去不回头等等。如果用户的走法不符合规则,棋子将被放回原处,重新走着。棋盘的MakeChessMan

23、ual对象负责记录棋谱,当用户选择“保存棋谱 ”菜单项时,可以将当前棋谱保存成文件。另外,该棋盘还能进行悔棋,悔棋将不被记录到棋谱。Chesspoint.Java该文件生成的类负责创建棋点对象。棋点对象可以判断该棋点上是否有棋子, 指定当前棋点上的棋子 ,获取当前棋点上的棋子,移动当前棋点上的棋子。ChessPiece.java该文件生成的类负责创建棋子对象。并绘制棋子的外观。棋子对象可以获取本身的颜色,大小,名字,也可以设置和获取本身的类别,即红棋和黑棋。MakeChessManual,java该文件生成的类负责创建记录棋谱的对象,该对象可以将棋谱记录到一个链接表中,并在一个文本区显示棋谱。

24、当对弈者悔棋时,该对象将修改棋谱,并更新文本区域的信息。Ruler.java该文件生成的类负责创建“走棋规则”对象,该对象负责用户用户的走法是否符合规则。Demon.java该文件生成的类负责创建“棋谱演示”对象,该对象可以演示以保存的棋谱。MoveStep.java该类创建的对象记录一个棋步。5.2数据字典5.2.1 主类Chess1.成员变量(见表11.1)表1 主要成员变量(属性)成员变量描述变量类型名称菜单条JMenuBarbar菜单JMenuItemfileMenu菜单项JMenuBar制作棋谱,保存棋谱,演示棋谱对弈的棋盘ChessBoardboard演示棋谱的棋盘Demondem

25、on棋谱记录者MakeChessManualrecord保存棋谱的链表LinkedList棋谱2.方法(见表11.2)表2 主要方法名称功能备注Chess创建程序主窗口构造方法actionPerformed处理ActionEvent事件接口方法main程序开始运行5.2.2对弈棋盘ChessBoard1.成员变量(见表11.3) 表3 主要成员变量(属性)描述变量类型名称棋点数组ChessPointpoint棋点的水平和垂直距离intUnitWidth,unit Height棋盘的行数和列数intX轴长,y轴长棋子颜色String红方颜色、黑方颜色棋子对象ChessPiece红车1黑炮2走棋规

26、则对象Rulerule负责记录棋谱的对象MakeChessManualrecord2.方法(见表11.4)表4 主要方法名称功能备注ChessBoard创建对弈棋盘构造方法paintComponent绘制棋盘mousePressed返回棋子接口方法mouseMoved无接口方法mouseDragged拖动棋子移动接口方法mouseReleased将棋子放到棋点接口方法mouseEntered无接口方法mouseExited无接口方法mouseClicked无接口方法5.2.3棋子ChesePiece1.成员变量(见表11.5)表5 主要成员变量(属性)描述变量类型名称棋子的名字Stringna

27、me棋子的背景色(和棋盘颜色一致)ColorbackColor棋子的前景色(作为棋子的颜色)ColorforeColor颜色的类别(黑方、红方)String颜色类别2.方法 (见表11.6)表6 主要方法名称功能备注ChesePiece创建棋子对象构造方法paint绘制棋子的外观getWidth获取棋子的宽度getHeigt获取棋子的高度getName获取棋子的名字获取棋子颜色获取棋子的颜色Set棋子类别设置棋子的类别棋子类别获取棋子的类别5.2.4棋点ChessPoint 1成员变量(见表11.7) 表7 主要成员变量(属性)描述变量类型名称棋点的位置坐标IntX, y棋点上是否有棋子Boo

28、ean有棋子2.方法(见表11.8) 表8 主要方法名称功能备注Chesspoint创建棋点对象构造方法ispiece判断棋点是否有棋子set有棋子设置棋点上是否有棋子setpiece在棋点上放置棋子getpiece获取棋点上的棋子removepiece移掉棋点上的棋子5.2.5 走棋规则Rule 1.成员变量(见表11.9) 表9主要成员变量(属性)描述变量类型名称走着棋子的起始棋点intstartI, startJ走着棋子的终止棋点intendI, endJ2.方法(见表11.10) 表10 主要方法名称功能备注Rule创建走棋规则对象构造方法movepieceRule判断走棋规则5.2.

29、6记录棋谱MakeChessManual 1.成员变量(见表11.11) 表11主要成员变量(属性)描述变量类型名称显示棋盘的文本区JTextAreatext激励棋谱列表LinkedList棋谱记录吃掉的棋子的列表,备悔棋用LinkedList吃掉的棋子 2.方法(见表11.12) 表12主要方法名称功能备注MakeChessManual创建“记录棋谱”对象构造方法记录棋谱记录棋谱actionperformed处理Actionevent事件,悔棋 接口方法5.2.7棋谱演示Demon 1.成员变量(11.13) 表13主要成员变量(属性)描述变量类型名称保存棋谱的链表LinkedList棋谱自

30、动演示棋谱的线程Thread自动演示用户输入的时间间隔JTextField时间间隔按顺序手动演示JButtonnext重新演示JButtonreplay开始自动演示JButtonauto暂停或继续自动演示JButtonstop 2.方法(见表11.14) 表14 主要方法名称功能备注Demon创建棋谱演示对象构造方法Set棋谱设置棋谱actionperformed处理Actionevent事件 接口方法5.3运行结果及界面1.主界面 2.象棋对弈实现:红方先走,然后黑方再走,红黑交替,直到一方获胜。并且可记录所走步骤。3.悔棋:当走错棋的时候可以悔棋。(观察右半部分对所走步骤的记录)4. 新游戏:任何时候可以重新开始一盘新的对

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

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