代码改变世界

结对作业

2015-05-17 16:50  丁勾勾  阅读(200)  评论(4编辑  收藏  举报

实践三  结对项目中国象棋

                            结对人:刘畅、丁胜男

https://github.com/dingshengnan/test/blob/master/jdzy

一、实验分析

本系统主要有以下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)开局库的生成:将近年实战的棋谱文件(可能有几种格式)整理生成开局库。

心得体会

通过这次结对一起做实验,我懂得了许多,知道了团结的重要性,经过几天的努力,基本上完成这一次的实践报告。也基本上实现了我在需求分析时所预期的功能。通过这次的实践,使将我从书本上学习到的理论知识用到了实践上,从而进一步巩固和丰富了我所学过的知识。

 分工:刘畅负责写代码和整理分析程序功能,丁胜男负责代码测试以及测试后的截图。