收藏 分享(赏)

中国象棋打谱系统-Java语言毕业设计(内附详细的Java程序)new.doc

上传人:dzzj200808 文档编号:2232645 上传时间:2018-09-06 格式:DOC 页数:36 大小:604KB
下载 相关 举报
中国象棋打谱系统-Java语言毕业设计(内附详细的Java程序)new.doc_第1页
第1页 / 共36页
中国象棋打谱系统-Java语言毕业设计(内附详细的Java程序)new.doc_第2页
第2页 / 共36页
中国象棋打谱系统-Java语言毕业设计(内附详细的Java程序)new.doc_第3页
第3页 / 共36页
中国象棋打谱系统-Java语言毕业设计(内附详细的Java程序)new.doc_第4页
第4页 / 共36页
中国象棋打谱系统-Java语言毕业设计(内附详细的Java程序)new.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、目录1.绪论 .21.1 引言 .21.2 主要设计内容 .32.开发工具简介 .32.1 java 语言概述 .32.2 java 语言的特点 .42.3 关于 ECLIPSE53.程序设计需求分析 .73.1 任务概述 .73.2 综合要求 .73.3 设计基本要求 74.程序的总体设计 .84.1 线程的设计 .84.2 线程的生命周期 .95.程序的详细设计 .115.1 程序流程图 .115.2 数据字典 .125.3 运行结果及界面 .166.实验总结 .18参考文献 18附录(部分源代码) 19JAVA 语言课程设计11.绪论1.1 引言象棋水平的发展是需要靠信息技术来推动的,国

2、际象棋有两个很好的范例,一个是象棋棋谱编辑和对弈程序的公共平台WinBoard 平台,另一个是商业的国际象棋数据库和对弈软件ChessBase,他们为国际象棋爱好者和研究者提供了极大的便利。国际象棋软件有着成功的商业运作,已发展成一种产业。然而,电脑在中国象棋上的运用还刚刚起步,尽管国内涌现出一大批中国象棋的专业网站和专业软件,但是由于缺乏必要的基础工作,电脑技术在中国象棋上的应用优势还无法体现出来。在设计中国象棋软件过程中,国际象棋软件有很多值得借鉴的成功经验和优秀的思想。例如 B. Moreland,微软(Microsoft)的程序设计师,业余从事国际象棋引擎 Ferret 的开发,他的一

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

4、计语言和 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 应用提供了一个独立于操作系统的标准接口,可分为基本部分

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

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

7、语言是一个纯的面向对象程序设计语言。3. Java 语言是分布式的。Java 语言支持 Internet 应用的开发,在基本的 Java 应用编程接口中有一个网络应用编程接口() ,它提供了用于网络应用编JAVA 语言课程设计3程的类库,包括 URL、URLConnection、Socket 、 ServerSocket 等。Java 的RMI(远程方法激活)机制也是开发分布式应用的重要手段。4. Java 语言是健壮的。Java 的强类型机制、异常处理、废料的自动收集等是Java 程序健壮性的重要保证。对指针的丢弃是 Java 的明智选择。Java 的安全检查机制使得 Java 更具健壮性。

8、5. Java 语言是安全的。Java 通常被用在网络环境中,为此,Java 提供了一个安全机制以防恶意代码的攻击。除了 Java 语言具有的许多安全特性以外, Java 对通过网络下载的类具有一个安全防范机制(类 ClassLoader) ,如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让 Java 应用设置安全哨兵。 6. Java 语言是体系结构中立的。Java 程序(后缀为 java 的文件)在 Java 平台上被编译为体系结构中立的字节码格式(后缀为 class 的文件), 然后可以在实现这个 Java 平台的任何系统中

9、运行。这种途径适合于异构的网络环境和软件的分发。 7. Java 语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java 还严格规定了各个基本数据类型的长度。Java 系统本身也具有很强的可移植性,Java 编译器是用 Java 实现的,Java 的运行环境是用 ANSI C 实现的。8. Java 语言是解释型的。如前所述,Java 程序在 Java 平台上被编译为字节码格式, 然后可以在实现这个 Java 平台的任何系统中运行。在运行时,Java 平台中的 Java 解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。9. Java 是高性能的。与那些

10、解释型的高级脚本语言相比,Java 的确是高性能的。事实上,Java 的运行速度随着 JIT(Just-In-Time)编译器技术的发展越来越接近于C+。 10. Java 语言是多线程的。在 Java 语言中,线程是一种特殊的对象,它必须由Thread 类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为 Thread(Runnable) 的构造子将一个实现了 Runnable 接口的对象包装成一个线程,其二,从 Thread 类派生出子类并重写 run 方法,使用该子类创建的对象即为线程。值得注意的是 Thread 类已经实现了 Runnable 接口,因此,任何一个线程均有

11、它的 run 方法,而 run 方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java 语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为 synchronized) 。11. Java 语言是动态的。Java 语言的设计目标之一是适应于动态变化的环境。Java 程序需要的类能动态地被载入到运行环境,也可以通过网络来载入所需要中国象棋对弈系统4的类。这也有利于软件的升级。另外,Java 中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java 语言的优良特性使得 Java 应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java 对对象技术的全面

12、支持和 Java 平台内嵌的 API 能缩短应用系统的开发时间并降低成本。Java 的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是 Java 企业应用编程接口( Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。2.3 关于 ECLIPSEEclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括 Java 开发工具(Java Development T

13、ools,JDT) 。虽然大多数用户很乐于将 Eclipse 当作 Java IDE 来使用,但 Eclipse 的目标不仅限于此。Eclipse 还包括插件开发环境( Plug-in Development Environment,PDE) ,这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用

14、Java 语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如 C/C+、COBOL 和 Eiffel 等编程语言的插件已经可用,或预计会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。Eclipse 是一个开放源代码的、基于 Java 的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。JAVA 语言课程设计53.程序设计需求分析3.1 任务概述用 java 实现具有一定功能的中国象棋对弈软件,主要功能如下:a.象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。b.新游戏:任何时候可以重新开

15、始一盘新的对弈。c.悔棋:当走错棋的时候可以悔棋。d.信息提示:提示当前信息状态。e.简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明。3.2 综合要求1. 硬件配置CPU:Pentium 4 1.6G内存:512MB硬盘剩余空间:2GB2. 软件环境操作系统:Microsoft Windows XP安 装 Sun 公 司 的 Java 运 行 环 境 JRE 1.5, 安 装 Java 开 发 工 具 包 (JDK 1.5)及ECLIPSE3.3 设计基本要求1 中国象棋是双方在由 9 条和 10 条横线分割而成的棋盘对弈。竖线与横线的交叉点称做棋点,每个棋子都放置在棋点上 ,而不是方

16、格中。河界将棋盘分为两个等分= 份,没一边都有一个由 9 个点组成的区域“将” , “帅” , “士”只能在“九宫”内移动,并且“将” , “帅” ,的每一步只可以水平或垂直移动一个棋点。士:“士”只能在“九宫”内移动,并且每一步只可以沿对角线方向移动一个棋点。中国象棋对弈系统6象;一步必须沿对角线方向走两个棋点。但它既不能过河,也不能跳过或穿越障碍,即象征走的过程不能被“别眼” 。马:每一步只可以水平或垂直移动一个棋点。但它必须沿对角线方向,向左或向右移动,中国象棋的马不能跳过障碍,即在走的过程不能被“别腿” 。车:可以沿水平或垂直方向移动任意个无障碍的点。炮:行走规则和车很类似,但它必须跳

17、过一个棋子来吃掉对方的一个棋子。被跳过的棋子被称为桥或者屏风。兵:过河前每步只能向前移动一个棋点。过河后,它便增加了向左右移动的能力。并不允许向后移动。2单击“中国象棋”菜单可以选择“制作棋谱” , “保存棋谱 ”和“演示棋谱”菜单项。3选择“制作棋谱” ,将出现相应的棋盘,该棋盘可进行实战对弈,可以随时选择“保存棋谱” ,将对弈过程保存成一个棋谱文件。选择“演示棋谱”将显示打开文件对话框供用户选择以保存的棋谱文件。选择棋谱文件后,将显示用来演示棋谱的棋盘,用户可以选择自动或者手动来演示对弈过程。4.程序的总体设计4.1 线程的设计在 Java 中,创建线程的方法有两种:一种是通过创建 Thr

18、ead 类的子类来实现;另一种是通过实现 Runnable 接口的类来实现。这两种创建线程方法并没有本质上的区别,但是由于 Java 不允许多重继承,所以当一个类要继承另一个非 Thread 类而实现多线程的话,只能通过实现Runnable 接口的方式来实现。4.1.1 通过 Thread 类实现 定义一个线程类,他继承类 Thread 并重写其中的 run()方法。这时在初始化这个类的实例时,目标对象 target 可以为 null,表示这个实例本身具有线程体。由于 Java 只支持单继承,用这种方法定义的类不能再继承其他类。 1Thread 类定义的用来帮助管理线程的方法主要包括以下内容。

19、 void run()方法:线程的入口点,运行线程中的代码。JAVA 语言课程设计7 void start()方法:通过调用运行方法来启动线程,使之由出生状态转入就绪状态。 void sleep(long milis):在一段时间内挂起线程,令线程睡眠,在此期间,线程不消耗 CPU 资源;以毫秒为单位。 void interrupt() :中断线程。 boolean isAlive():判定线程是否仍在在运行,出于活动状态。 void stName(String threadName):改变线程的名字。 String getName():获取由 setName()方法实质的线程名字的字符串。

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

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

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

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

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

25、则,棋子将被放回原处,重新走着。棋盘的 MakeChessManual 对象负责记录棋谱,当用户选择“保存棋谱 ”菜单项时,可以将当前棋谱保存成文件。另外,该棋盘还能进行悔棋,悔棋将不被记录到棋谱。Chesspoint.Java该文件生成的类负责创建棋点对象。棋点对象可以判断该棋点上是否有棋子,指定当前棋点上的棋子 ,获取当前棋点上的棋子,移动当前棋点上的棋子。ChessPiece.java该文件生成的类负责创建棋子对象。并绘制棋子的外观。棋子对象可以获取本身的颜色,大小,名字,也可以设置和获取本身的类别,即红棋和黑棋。MakeChessManual,java中国象棋对弈系统10该文件生成的类

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

27、uBar 制作棋谱,保存棋谱,演示棋谱对弈的棋盘 ChessBoard board演示棋谱的棋盘 Demon demon棋谱记录者 MakeChessManual record保存棋谱的链表 LinkedList 棋谱2.方法(见表 11.2)表 2 主要方法名称 功能 备注Chess 创建程序主窗口 构造方法actionPerformed 处理 ActionEvent 事件 接口方法main 程序开始运行5.2.2 对弈棋盘 ChessBoard1.成员变量(见表 11.3)表 3 主要成员变量(属性)描述 变量类型 名称棋点数组 ChessPoint point棋点的水平和垂直距离int

28、UnitWidth,unit Height棋盘的行数和列数 int X 轴长,y 轴长棋子颜色 String 红方颜色、黑方颜色JAVA 语言课程设计11棋子对象 ChessPiece 红车 1黑炮 2走棋规则对象 Rule rule负责记录棋谱的对象MakeChessManual record2.方法(见表 11.4)表 4 主要方法名称 功能 备注ChessBoard 创建对弈棋盘 构造方法paintComponent 绘制棋盘mousePressed 返回棋子 接口方法mouseMoved 无 接口方法mouseDragged 拖动棋子移动 接口方法mouseReleased 将棋子放到

29、棋点 接口方法mouseEntered 无 接口方法mouseExited 无 接口方法mouseClicked 无 接口方法5.2.3 棋子 ChesePiece1.成员变量(见表 11.5)表 5 主要成员变量(属性)描述 变量类型 名称棋子的名字 String name棋子的背景色(和棋盘颜色一致) Color backColor棋子的前景色(作为棋子的颜色) Color foreColor颜色的类别(黑方、红方) String 颜色类别2.方法 (见表 11.6)表 6 主要方法名称 功能 备注ChesePiece 创建棋子对象 构造方法paint 绘制棋子的外观getWidth 获取

30、棋子的宽度getHeigt 获取棋子的高度getName 获取棋子的名字获取棋子颜色 获取棋子的颜色Set 棋子类别 设置棋子的类别棋子类别 获取棋子的类别中国象棋对弈系统125.2.4 棋点 ChessPoint1成员变量(见表 11.7)表 7 主要成员变量(属性)描述 变量类型 名称棋点的位置坐标 Int X, y棋点上是否有棋子 Booean 有棋子2.方法(见表 11.8)表 8 主要方法名称 功能 备注Chesspoint 创建棋点对象 构造方法ispiece 判断棋点是否有棋子set 有棋子 设置棋点上是否有棋子setpiece 在棋点上放置棋子getpiece 获取棋点上的棋子

31、removepiece 移掉棋点上的棋子5.2.5 走棋规则 Rule1.成员变量(见表 11.9)表 9 主要成员变量(属性)描述 变量类型 名称走着棋子的起始棋点 int startI, startJ走着棋子的终止棋点 int endI, endJ2.方法(见表 11.10)表 10 主要方法名称 功能 备注Rule 创建走棋规则对象 构造方法movepieceRule 判断走棋规则5.2.6 记录棋谱 MakeChessManual1.成员变量(见表 11.11)表 11 主要成员变量(属性)描述 变量类型 名称显示棋盘的文本区 JTextArea text激励棋谱列表 LinkedLi

32、st 棋谱记录吃掉的棋子的列表,备悔棋用 LinkedList 吃掉的棋子JAVA 语言课程设计132.方法(见表 11.12)表 12 主要方法名称 功能 备注MakeChessManual 创建“记录棋谱”对象 构造方法记录棋谱 记录棋谱actionperformed 处理 Actionevent 事件,悔棋 接口方法5.2.7 棋谱演示 Demon1.成员变量(11.13)表 13 主要成员变量(属性)描述 变量类型 名称保存棋谱的链表 LinkedList 棋谱自动演示棋谱的线程 Thread 自动演示用户输入的时间间隔 JTextField 时间间隔按顺序手动演示 JButton n

33、ext重新演示 JButton replay开始自动演示 JButton auto暂停或继续自动演示 JButton stop2.方法(见表 11.14)表 14 主要方法名称 功能 备注Demon 创建棋谱演示对象 构造方法Set 棋谱 设置棋谱actionperformed 处理 Actionevent 事件 接口方法中国象棋对弈系统145.3 运行结果及界面1.主界面2.象棋对弈实现:红方先走,然后黑方再走,红黑交替,直到一方获胜。并且可记录所走步骤。JAVA 语言课程设计153.悔棋:当走错棋的时候可以悔棋。 (观察右半部分对所走步骤的记录)4. 新游戏:任何时候可以重新开始一盘新的对

34、弈。点击中国象棋,选择其下拉菜单中的制作棋谱,便可在任何时候开始一盘新的对弈。中国象棋对弈系统166.实验总结本次课程设计充分利用自己学的 java 知识,熟练掌握有关 java 语言的语法基础,面向对象,Applet 的运用,还有图形的设计,有关线程的知识。对于中国象棋对弈系统,把 java 知识灵活的结合了起来,让人们对 java 有了一个崭新的认识。该程序的开发过程当中遇到了许多困难,自己翻阅了许多参考资料看了一些相关的设计实例收获很多,通过了这次设计不仅学到了很多 JAVA 游戏设计的相关知识也看到了自己的不足,但我相信,随着时间的推移,个人水平的增长,我一定会掌握更多的技术去设计开发

35、 JAVA 应用程序。参考文献1 王萌.JAVA 程序设计(第一版)M.北京:冶金工业出版社,20042 陆迟.Java 语言程序设计(第一版)M.北京:电子工业出版社,20023 张广彬.Java 课程设计案例精编(第二版)M.北京:清华大学出版社,20074 布拉肯(Brackeen .Java 游戏编程(第一版)M.北京:科学出版社,20045 王克宏.Java 技术教程(第一版)M.北京:清华大学出版社,20056 孙卫琴.JAVA 面向对象编程(第一版)M.北京:电子工业出版社,20067 魏雪英 .Java 程序设计案例教程(第一版)M.北京:中国铁道出版社,20078 克罗夫特

36、.Java 游戏高级编程/游戏开发经典丛书(第一版)M.北京:清华大学出版社,2005JAVA 语言课程设计17附录(部分源代码)Chess.javaimport javax.swing.*;import java.awt.*;import java.awt.event.*;import java.io.*;import java.util.LinkedList;public class Chess extends JFrame implements ActionListenerChessBoard board=null;Demon demon=null;MakeChessManual rec

37、ord=null;Container con=null;JMenuBar bar;JMenu fileMenu;JMenuItem 制作棋谱,保存棋谱,演示棋谱;JFileChooser fileChooser=null;LinkedList 棋谱=null;public Chess() bar=new JMenuBar();fileMenu=new JMenu(“中国象棋“);制作棋谱=new JMenuItem(“制作棋谱“);保存棋谱=new JMenuItem(“保存棋谱“);演示棋谱=new JMenuItem(“演示棋谱“);fileMenu.add(制作棋谱);fileMenu.

38、add(保存棋谱);fileMenu.add(演示棋谱);bar.add(fileMenu);setJMenuBar(bar);中国象棋对弈系统18setTitle(制作棋谱.getText();制作棋谱.addActionListener(this);保存棋谱.addActionListener(this);演示棋谱.addActionListener(this);board=new ChessBoard(45,45,9,10);record=board.record;con=getContentPane();JSplitPane split=new JSplitPane(JSplitPan

39、e.HORIZONTAL_SPLIT,true,board,record);split.setDividerSize(5);split.setDividerLocation(460);con.add(split,BorderLayout.CENTER); addWindowListener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););setVisible(true);setBounds(60,20,670,540);fileChooser=new JFileChooser();con

40、.validate();validate();public void actionPerformed(ActionEvent e) if(e.getSource()=制作棋谱) con.removeAll();保存棋谱.setEnabled(true);this.setTitle(制作棋谱.getText();board=new ChessBoard(45,45,9,10);record=board.record;JSplitPane split=new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,true,board,record);JAVA 语言课程设计1

41、9split.setDividerSize(5);split.setDividerLocation(460);con.add(split,BorderLayout.CENTER); validate(); if(e.getSource()=保存棋谱) int state=fileChooser.showSaveDialog(null);File saveFile =fileChooser.getSelectedFile();if(saveFile!=nullObjectOutputStream outTwo=new ObjectOutputStream(outOne);outTwo.write

42、Object(record.获取棋谱() ;outOne.close();outTwo.close();catch(IOException event) if(e.getSource()=演示棋谱) con.removeAll();con.repaint();con.validate(); validate();保存棋谱.setEnabled(false);int state=fileChooser.showOpenDialog(null);File openFile =fileChooser.getSelectedFile();if(openFile!=nullObjectInputStre

43、am inTwo=new ObjectInputStream(inOne);棋谱=(LinkedList)inTwo.readObject() ;inOne.close();inTwo.close();ChessBoard board=new ChessBoard(45,45,9,10);demon=new Demon(board);demon.set 棋谱(棋谱);con.add(demon,BorderLayout.CENTER);con.validate(); validate();this.setTitle(演示棋谱.getText()+“:“+openFile); catch(Exc

44、eption event)JLabel label=new JLabel(“不是棋谱文件“);label.setFont(new Font(“隶书“,Font.BOLD,60);label.setForeground(Color.red); label.setHorizontalAlignment(SwingConstants.CENTER);con.add(label,BorderLayout.CENTER);con.validate(); this.setTitle(“没有打开棋谱“); validate(); elseJLabel label=new JLabel(“没有打开棋谱文件呢“

45、);label.setFont(new Font(“隶书“,Font.BOLD,50);label.setForeground(Color.pink); label.setHorizontalAlignment(SwingConstants.CENTER);con.add(label,BorderLayout.CENTER);JAVA 语言课程设计21con.validate(); this.setTitle(“没有打开棋谱文件呢“); validate(); public static void main(String args)new Chess();ChessBoard.javaimpo

46、rt javax.swing.*;import java.awt.*;import java.awt.event.*;public class ChessBoard extends JPanel implements MouseListener,MouseMotionListenerpublic ChessPoint point; public int unitWidth,unitHeight; int x 轴长,y 轴长; int x,y; boolean move=false; public String 红方颜色=“红色“,黑方颜色=“黑色“;ChessPiece 红车 1,红车 2,红

47、马 1,红马 2,红相 1,红相 2,红帅,红士 1,红士 2,红兵 1,红兵 2,红兵 3,红兵 4,红兵 5,红炮 1,红炮 2;ChessPiece 黑车 1,黑车 2,黑马 1,黑马 2,黑将,黑士 1,黑士 2,黑卒 1,黑卒 2,黑卒 3,黑卒 4,黑卒 5,黑象 1,黑象 2,黑炮 1,黑炮 2;int startX,startY; 中国象棋对弈系统22int startI,startJ; public boolean 红方走棋=true,黑方走棋=false; Rule rule=null; public MakeChessManual record=null; public

48、ChessBoard(int w,int h,int r,int c)setLayout(null);addMouseListener(this);addMouseMotionListener(this);Color bc=getBackground();unitWidth=w;unitHeight=h;x 轴长=r;y 轴长=c;point=new ChessPointr+1c+1; for(int i=1;i=r;i+)for(int j=1;j=c;j+)pointij=new ChessPoint(i*unitWidth,j*unitHeight,false); rule=new Rule(this,point);record=new MakeChessManual(this,point) ; 红车 1=new ChessPiece(“车“,Color.red,bc,w-4,h-4,this);红车 1.set 棋子类别(红方颜色);红车 2=new ChessPiece(“车“,Color.red,bc,w-4,h-4,this);红车 2.set 棋子类别(红方颜色);红马 1=new ChessPiece(“马“,Color.red,bc,w-4,h-4,this);红马 1.set 棋

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 大学课件

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报