本篇将正式公布 中国象棋程序–高级版–楚汉棋兵 的所有源码。介绍一些相关信息,如源码下载地址、QQ交流群、源码结构、版权声明。其它更多文档,如 毕业设计论文、项目架构图图、心得体会、开发记录,将在本月全部公布。
有兴趣的同学,可以趁着 中秋节3天、国庆7天等假期,进行研究。我也将抽空选择性地回答一些问题。
源码注释比较多,不懂的可以在群里交流。
源码下载
a. 中国象棋交流群-群共享 群号 232733905
(一个完整的Eclipse工程项目)
没有bug我不敢保证,我敢保证的是“包结构比较合理、类-函数-方法的命名比较规范、注释很详细”。
版权声明
Apache License 2.0
如出现争议,本人保留解释权等权力。
交流讨论
有兴趣的同学,可以加入交流群,大家一起交流。
中秋节放假和今后如果有空,可以选择性地回答一些问题。
项目结构
项目结构
包结构说明
楚汉棋兵2.0项目包图
软件包 | |
cn.fansunion.chinesechess | 客户端和服务器端的入口界面类。 |
cn.fansunion.chinesechess.ai | 包含人机对弈的类。 |
cn.fansunion.chinesechess.config | 提供系统的默认配置信息。 |
cn.fansunion.chinesechess.core | 提供中国象棋的核心类,包括棋盘、棋谱、棋子、棋子点、游戏规则等。 |
cn.fansunion.chinesechess.load | 提供装载棋谱所需的类。 |
cn.fansunion.chinesechess.net.client | 包含实现联网对战模块客户端的类。 |
cn.fansunion.chinesechess.net.common | 联网对战公共类。 |
cn.fansunion.chinesechess.net.server | 包含实现联网对战模块服务器端的类。 |
cn.fansunion.chinesechess.ext.empress | 提供与扩展应用N皇后有关的类。 |
cn.fansunion.chinesechess.ext.maze | 提供与扩展应用迷宫求解有关的类。 |
cn.fansunion.chinesechess.print.part | 打谱之残局打谱相关类。 |
cn.fansunion.chinesechess.print.all | 打谱之全局打谱相关类。 |
cn.fansunion.chinesechess.save | 提供与保存和装载棋谱相关的类和接口。 |
资源包 | |
config | 保存用户的游戏设置。 |
helps | 系统帮助文件,以html静态网页的格式显示。 |
manuals | 系统自带和用户保存的棋谱文件。 |
sounds | 背景音乐等声音文件。 |
所有类 | |
cn.fansunion.chinesechess.ChessGUI | 客户端入口主界面。 |
cn.fansunion.chinesechess.ServerGUI | 服务器主界面。 |
cn.fansunion.chinesechess.ChessUtil | 工具类,提供系统常用和共用的功能,如获取图标和时间,播放音乐。 |
cn.fansunion.chinesechess.HelpDialog | 帮助对话框,提供了象棋规则和软件使用等帮助。内部封装了JEditorPane,实现了一个简单的浏览器,可以响应超链接等事件。 |
系统内核 |
|
cn.fansunion.chinesechess.core.ChessBoard | 抽象的棋盘类,分步骤绘制棋盘,而非直接绘制一个棋盘图片。棋盘是棋谱、棋子点集、棋子的拥有者。 |
cn.fansunion.chinesechess.core.Chessmanual | 棋谱类,提供操作棋谱的接口,如增加、删除、获取、设置棋谱。 |
cn.fansunion.chinesechess.core.ChessPiece | 棋子类,封装了ID、类别、所在方、宽度、高度和坐标6个属性。通过图片来绘制棋子。 |
cn.fansunion.chinesechess.core.ChessPoint | 棋子点类。棋盘中一共有9*10个棋子点,每个棋子点最多可以保存一个棋子。 |
cn.fansunion.chinesechess.core.ChessRule | 象棋规则工具类,提供了一系列的静态方法,用于判断棋子移动是否符合规则的接口。联网对战、全局打谱、残局打谱的规则有所不同。 |
cn.fansunion.chinesechess.core.ManualItem | 棋谱的一条记录。封装了移动起始坐标、被吃棋子ID(悔棋时使用)、移动棋子ID(可以不要)3个属性。 |
cn.fansunion.chinesechess.core.ManualUtil | 棋谱工具类,提供了保存和读取棋谱的接口。 |
cn.fansunion.chinesechess.core.MoveStep | 棋子移动的起点和终点。 |
cn.fansunion.chinesechess.core.PieceUtil | 棋子工具类,提供了生成、根据棋子的属性(ID、类别、所在方)查找棋子的接口,也提供了棋子类型转换的功能。 |
扩展应用 |
|
cn.fansunion.chinesechess.ext.empress.EmpressBoard | N皇后用的棋盘,主要功能来自父类ChessBoard,自身只定义了获取棋盘背景色、获取棋盘类型等功能。 |
cn.fansunion.chinesechess.ext.empress.EmpressGUI | N皇后主界面。根据用户输入皇后个数,生成N皇后的所有布局,并且可以根据用户选择显示某一个布局。也可以保存所有布局,主要有2种形式,一种简洁、一种全面。 |
cn.fansunion.chinesechess.ext.empress.EmpressModel | N皇后模型,是对N皇后问题的抽象和封装,使用回溯算法实现。 |
cn.fansunion.chinesechess.ext.empress.EmpressUtil | N皇后工具类,用于保存N皇后的所有布局。主要有2种形式,一种简洁,一种全面。 |
cn.fansunion.chinesechess.ext.maze.HorseMazeBoard | 馬的迷宫求解问题用的棋盘。 |
cn.fansunion.chinesechess.ext.maze.HorseMazeGUI | 馬的迷宫求解问题用的主界面。输入起点和终点,找出所有可走的路径。 |
cn.fansunion.chinesechess.ext.maze.HorseMazeModel | 馬的迷宫求解模型,是对馬的迷宫求解问题的抽象和封装,使用回溯算法实现。 |
cn.fansunion.chinesechess.ext.maze.IntPoint | 一个坐标位置的封装,保存整型的坐标。 |
cn.fansunion.chinesechess.ext.maze.Road | 馬的一条移动路径,起点到终点。 |
装载演示 |
|
cn.fansunion.chinesechess.load.ChessDemoGUI | 演示棋谱主界面。主要有上一步、下一步、第一步、最后一步和自动演示等功能。 |
cn.fansunion.chinesechess.load.ChessLoadingGUI | 装载棋谱主界面。 |
cn.fansunion.chinesechess.load.IconListItem | 棋谱项。 |
cn.fansunion.chinesechess.load.IconListItemRender | 棋谱列表项渲染器。 |
联网对战 |
|
cn.fansunion.chinesechess.net.client.MatachGUI | 比赛主界面。主要有走棋、悔棋、暂停、认输、求和、保存和聊天等功能。 |
cn.fansunion.chinesechess.net.client.NetworkBoard | 联网对战用的棋盘。 |
cn.fansunion.chinesechess.net.client.ObserverUtil | 观察者工具类,提供屏蔽观察者敏感消息的接口。 |
cn.fansunion.chinesechess.net.client.PlayerGroupGUI | 玩家组界面。创建者有权限开始游戏。 |
cn.fansunion.chinesechess.net.client.RoomGUI | 房间(大厅)界面。主要有创建游戏、加入游戏等功能。 |
cn.fansunion.chinesechess.net.cn.fansunionmon.Message | 消息类,消息有3种类型,发给所有人、发给某个人、系统消息。 |
cn.fansunion.chinesechess.net.common.MsgPacket | 服务器端和客户端通信用的数据包。 |
cn.fansunion.chinesechess.net.common.Creator | 封装了游戏创建者的基本信息。 |
cn.fansunion.chinesechess.net.common.Member | 封装了游戏成员的基本信息。 |
cn.fansunion.chinesechess.net.server.ListenPlayer | 监听一个用户的线程类。 |
cn.fansunion.chinesechess.net.server.User | 一个用户,封装了用户的基本信息,如用户名、密码等基本信息。 |
cn.fansunion.chinesechess.net.server.UserStream | 绑定一个用户和相应的输入输出流。 |
打谱 |
|
cn.fansunion.chinesechess.print.all.PrintAllBoard | 全局打谱用的棋盘。 |
cn.fansunion.chinesechess.print.all.PringAllGUI | 全局打谱主界面。 |
cn.fansunion.chinesechess.print.part.PiecesPanel | 残局打谱容纳备用棋子的面板。 |
cn.fansunion.chinesechess.print.part.Position | 棋子的位置,封装了棋子的ID和坐标。 |
cn.fansunion.chinesechess.print.part.PrintPartBoard | 残局打谱用的棋盘。 |
cn.fansunion.chinesechess.print.part.PrintPartGUI | 残局打谱主界面。 |
保存棋谱 |
|
cn.fansunion.chinesechess.save.GameRecord | 游戏记录类,封装一次比赛(包含打谱)的所有信息。 |
cn.fansunion.chinesechess.save.HelpBrowser | 帮助工具类,显示一个帮助对话框。 |
cn.fansunion.chinesechess.save.ISaveManual | 保存棋谱接口,需要实现保存棋谱功能的界面必须实现这个接口。 |
cn.fansunion.chinesechess.save.MsgRecordDialog | 聊天记录对话框。 |
cn.fansunion.chinesechess.save.SaveAsDialog | 另存棋谱对话框,用户需要选择棋谱保存的路径、名字和描述。 |
cn.fansunion.chinesechess.save.SaveDialog | 保存棋谱对话框,用户需要提供棋谱的名称和描述,保存在系统默认的目录。 |
人机对弈 |
|
cn.fansunion.chinesechess.ai.AIConstants | 保存了棋子的价值、棋子的灵活值、棋子的位置值等常量值。 |
cn.fansunion.chinesechess.ai.AIUtil | AI算法工具类。生成一个棋子的走法、一个局面的走法、对当前局面进行估值。 |
cn.fansunion.chinesechess.ai.FENUtil | 提供楚汉棋兵局面和FEN局面的相互转换的接口。FEN是专门用来表示象棋局面的记录规范,在这个规范下,一个局面可以简单地用一行“FEN格式串”来表示。 |
cn.fansunion.chinesechess.ai.ManMachineBoard | 人机对弈棋盘。 |
cn.fansunion.chinesechess.ai.ManMachineGUI | 人机对弈主界面。 |