当前位置:文档之家› 中国象棋打谱的解释

中国象棋打谱的解释

Chess.Java该Java文件生成的类负责创建程序的主窗口。

该类含有main方法,程序从该类开始执行。

ChessBoard.java该文件生成的类负责创建“对弈棋盘”,用户可以用鼠标拖动棋盘上的棋子,当松开鼠标是则将棋子放在棋点。

该棋盘不允许用户将棋子拖放到非棋点上。

棋盘上的rule对象负责判断走棋是否遵守了中国象棋的规则,例如“马”走日,“象”走田,“小卒”一去不回头等等。

如果用户的走法不符合规则,棋子将被放回原处,重新走着。

棋盘的MakeChessManual对象负责记录棋谱,当用户选择“保存棋谱”菜单项时,可以将当前棋谱保存成文件。

另外,该棋盘还能进行悔棋,悔棋将不被记录到棋谱。

Chesspoint.Java该文件生成的类负责创建棋点对象。

棋点对象可以判断该棋点上是否有棋子,指定当前棋点上的棋子,获取当前棋点上的棋子,移动当前棋点上的棋子。

ChessPiece.java该文件生成的类负责创建棋子对象。

并绘制棋子的外观。

棋子对象可以获取本身的颜色,大小,名字,也可以设置和获取本身的类别,即红棋和黑棋。

MakeChessManual,java该文件生成的类负责创建记录棋谱的对象,该对象可以将棋谱记录到一个链接表中,并在一个文本区显示棋谱。

当对弈者悔棋时,该对象将修改棋谱,并更新文本区域的信息。

Ruler.java该文件生成的类负责创建“走棋规则”对象,该对象负责用户用户的走法是否符合规则。

Demon.java该文件生成的类负责创建“棋谱演示”对象,该对象可以演示以保存的棋谱。

MoveStep.java该类创建的对象记录一个棋步。

线程的设计在Java中,创建线程的方法有两种:一种是通过创建Thread类的子类来实现;另一种是通过实现Runnable接口的类来实现。

这两种创建线程方法并没有本质上的区别,但是由于Java不允许多重继承,所以当一个类要继承另一个非Thread类而实现多线程的话,只能通过实现Runnable接口的方式来实现。

4.1.1 通过Thread类实现定义一个线程类,他继承类Thread并重写其中的run()方法。

这时在初始化这个类的实例时,目标对象target可以为null,表示这个实例本身具有线程体。

由于Java只支持单继承,用这种方法定义的类不能再继承其他类。

1 Thread类定义的用来帮助管理线程的方法主要包括以下内容。

●void run()方法:线程的入口点,运行线程中的代码。

●void start()方法:通过调用运行方法来启动线程,使之由出生状态转入就绪状态。

●void sleep(long milis):在一段时间内挂起线程,令线程睡眠,在此期间,线程不消耗CPU资源;以毫秒为单位。

●void interrupt():中断线程。

●boolean isAlive():判定线程是否仍在在运行,出于活动状态。

●void stName(String threadName):改变线程的名字。

●String getName():获取由setName()方法实质的线程名字的字符串。

●Yield():将CPU控制权主动移交到下一个可运行的线程。

●setPriority(int p):设置线程优先级。

●getPriority():获得线程优先级。

●Join():等待一个线程终止。

4.1.2 实现Runnable接口创建线程的最简单的方法就是创建一个实现Runnable接口的类。

然后根据工作需要重新设计线程的run方法;再建立该类的对象。

Runnable抽象了一个执行代码单元。

你可以通过实现Runnable接口的方法创建每一个对象的线程。

为实现Runnable接口,一个类仅需实现一个run()的简单方法。

线程的生命周期每个线程的生命周期一共包括5种状态:出生,就绪,运行,阻塞和死亡。

线程从出生到死亡的过程称为线程的生命周期。

通过特定的操作可以进行状态间的转换。

4.2.1 出生当用关键字new和thread类或其子类建立了一个线程对象后,该线程就处于出生状态。

Thread线程名=new Thread();处于新建状态的线程只是一个空闲的线程对象,系统并没有为他分配资源。

在调用start方法之前,线程就一直处于出生状态。

4.2.2 就绪在调用了start方法之后,线程就进入就绪状态,即被加入到处于就绪状态的线程序列中,在等待CPU时间片。

线程名。

Start();4.2.3 运行当处于线程序列中的线程获得CPU时间片的时候,该线程就会自动调用其run方法,进入运行状态。

4.2.4 阻塞线程能够运行,但有某个条件能阻止它的运行。

当线程处于阻塞状态时,调度机制将忽略线程,不会分配给线程任何处理器时间。

直到线程重新进入了就绪状态,它才有可能执行操作。

导致线程进入阻塞状态原因主要包括以下几种。

①通过调用wait()方法使线程挂起。

直到线程得到了notify()或notifyAll()消息,线程才会进入就绪状态。

当与某对象相关的一个线程调用了notify()方法时,那么等待该特定对象的一个线程便进入就绪状态;当与某对象相关的线程调用了notifyAll()方法后,等待该对象的所有线程都会回到就绪状态。

②通过调用sleep()方法使线程进入休眠状态。

在这种情况下,线程在指定的时间内不会运行。

只能等待其结束期后,线程才可以自动进入就绪状态。

③线程在等待某个输入/输出完成。

只能等待该输入/输出操作完成后,线程才可以自动进入就绪状态。

④调用suspend()方法挂起程序。

可以通过调用resume()方法使其进入就绪状态。

⑤线程试图在某个对象上调用其同步控制方法,但是对象锁不可用。

4.2.5 死亡死亡状态是线程生命周期中的最后一个阶段。

一共有两种方式可以导致一个线程的死亡。

●自然死亡:线程的run()方法正常结束。

●强制死亡:通过执行stop()或destroy()方法使线程终止。

5.2.1 主类Chess1.成员变量(见表11.1)表1 主要成员变量(属性)成员变量描述变量类型名称菜单条JMenuBar bar菜单JMenuItem fileMenu菜单项JMenuBar 制作棋谱,保存棋谱,演示棋谱对弈的棋盘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 UnitWidth,unitHeight棋盘的行数和列数int X轴长,y轴长棋子颜色String 红方颜色、黑方颜色棋子对象ChessPiece 红车1……黑炮2 走棋规则对象Rule rule负责记录棋谱的对象MakeChessManual record2.方法(见表11.4)表4 主要方法名称功能备注ChessBoard 创建对弈棋盘构造方法paintComponent 绘制棋盘mousePressed 返回棋子接口方法mouseMoved 无接口方法mouseReleased 将棋子放到棋点接口方法mouseEntered 无接口方法mouseExited 无接口方法mouseClicked 无接口方法5.2.3棋子ChesePiece1.成员变量(见表11.5)表5 主要成员变量(属性)描述变量类型名称棋子的名字String name棋子的背景色(和棋盘颜色一致)C olor backColor棋子的前景色(作为棋子的颜色)C olor foreColor颜色的类别(黑方、红方)String颜色类别2.方法(见表11.6)表6 主要方法名称功能备注ChesePiece 创建棋子对象构造方法paint 绘制棋子的外观getWidth 获取棋子的宽度getHeigt 获取棋子的高度getName 获取棋子的名字获取棋子颜色获取棋子的颜色Set棋子类别设置棋子的类别棋子类别获取棋子的类别5.2.4棋点ChessPoint1.成员变量(见表11.7)表7 主要成员变量(属性)描述变量类型名称棋点的位置坐标Int X, y棋点上是否有棋子Booean 有棋子2.方法(见表11.8)表8 主要方法名称功能备注ispiece 判断棋点是否有棋子set有棋子设置棋点上是否有棋子setpiece 在棋点上放置棋子getpiece 获取棋点上的棋子removepiece 移掉棋点上的棋子1.成员变量(见表11.9)表9主要成员变量(属性)描述变量类型名称走着棋子的起始棋点int startI, startJ 走着棋子的终止棋点int endI, endJ2.方法(见表11.10)表10 主要方法名称功能备注Rule 创建走棋规则对象构造方法movepieceRule 判断走棋规则5.2.6记录棋谱MakeChessManual1.成员变量(见表11.11)表11主要成员变量(属性)描述变量类型名称显示棋盘的文本区JTextArea text激励棋谱列表LinkedList 棋谱记录吃掉的棋子的列表,备悔LinkedList 吃掉的棋子2.方法(见表11.12)表12主要方法名称功能备注MakeChessManual 创建“记录棋谱”对象构造方法记录棋谱记录棋谱actionperformed 处理Actionevent事件,悔棋接口方法5.2.7棋谱演示Demon1.成员变量(11.13)表13主要成员变量(属性)描述变量类型名称保存棋谱的链表LinkedList 棋谱自动演示棋谱的线程Thread 自动演示用户输入的时间间隔JTextField 时间间隔按顺序手动演示JButton next重新演示JButton replay开始自动演示JButton auto暂停或继续自动演示JButton stop2.方法(见表11.14)表14 主要方法名称功能备注Demon 创建棋谱演示对象构造方法Set棋谱设置棋谱actionperformed 处理Actionevent事件接口方法实验总结本次课程设计充分利用自己学的java知识,熟练掌握有关java语言的语法基础,面向对象,Applet的运用,还有图形的设计,有关线程的知识。

对于中国象棋对弈系统,把java知识灵活的结合了起来,让人们对java有了一个崭新的认识。

该程序的开发过程当中遇到了许多困难,自己翻阅了许多参考资料看了一些相关的设计实例收获很多,通过了这次设计不仅学到了很多JAVA游戏设计的相关知识也看到了自己的不足,但我相信,随着时间的推移,个人水平的增长,我一定会掌握更多的技术去设计开发JAVA应用程序。

相关主题