结对作业
一、实验分析
本系统主要有以下4个模块,每个模块对应一个程序包:
1、engine:搜索引擎包,系统的核心部分。
2、message:网络对战过程中各种消息及其传递机制的类实现包。
3、main:主界面实现包。
4、pieces:棋子及其相关类实现包。
现就各个包中的要点给与说明。
二、项目功能
A、象棋对弈:红方先走,然后黑方再走,红黑交替,直到一方获胜。
B、新游戏:任何时候可以重新开始一盘新的对弈。
C、悔棋:当走错棋的时候可以悔棋。
D、信息提示:提示当前信息状态。
E、简单的帮助文档:象棋规则介绍、软件的简单介绍和编制说明
三、项目设计方案及分工
Engine:
(1) BitBoard.java:位棋盘的实现。
(2) CCEvalue.java:评价函数知识类。
(3) ChessPosition.java:动态局面类
包含对局过程中的动态信息,主要实现的是各类位棋盘和移子函数。
(4) MoveStruct.java:着法表示类。
(5) PreMove.java:伪合法着法生成模块。
(6) MoveSortStruct.java:合法着法的生成及其排序算法。
(7) SearchMove.java:搜索算法。
Message:
在对弈过程中(主要是网络对弈)需要在对弈双方之间传输各类信息,抽象为各类消息。如时间规则的协定、各方的走子信息等。每方都有消息接收、消息处理和消息发送程序(OuterMsgReceiver、LocalMsgReceiver,QzMessageHandler,MessageSender)。己方的MessageSender与对方的OuterMsgReceiver通过接口SrConnection连接。所有接收的消息放入消息队列QzMsgQueue中,等待消息处理进程QzMessageHandler来处理。所有的消息都封装在QzMessage类对象中,消息的类型通过消息的Header类型(以静态常量存放在MsgHeader类中)来区分。
Pieces:
Qizi.java包含棋子的信息,如棋子的(在棋盘上的)位置、图片、名称、类型、状态等。PiecesFactory.java以“工厂”模式提供根据棋子类型或其他信息生成相关Qizi对象的方法。
Main:
(1) NewBoard.java:棋盘坐标系统及其界面的实现。
(2) CChessApp.java:主界面类,以内部类实现了QzMessageHandler接口、计时规则TimeRule接口以及事件的处理程序,根据需要生成其他的并发线程如消息接收、处理和发送,机器思考(启动搜索引擎),计时显示等。
(3) SetRuleDialog.java:设置规则的对话框。
(4) SetSysInfoDialog.java:设置系统的一些属性如对战模式、连接端口等。
(5) Translation.java:提供了一系列实用方法主要有:
1)FEN串与局面ChessPosition对象之间的转换
2)不同着法表示(见第一章)之间的转换。如“炮二平五”与“Ch2-e2”及“62.5或C2.5“(C和6代表炮)这几种表示法之间的转换
3)棋谱文件的读入和存储。
4)开局库的生成:将近年实战的棋谱文件(可能有几种格式)整理生成开局库。
分工:刘畅负责写代码和整理分析程序功能,丁胜男负责代码测试以及测试后的截图。
心得体会:通过这次试验,我懂得了合作的重要性,两个人商量总比一个人瞎捉摸强。写代码还是有很多错误。以后更要细心认真的听课。加油。