中国象棋程序的设计与实现(二)--源码


本篇将正式公布 中国象棋程序–高级版–楚汉棋兵 的所有源码。介绍一些相关信息,如源码下载地址、QQ交流群、源码结构、版权声明。其它更多文档,如 毕业设计论文、项目架构图图、心得体会、开发记录,将在本月全部公布。

有兴趣的同学,可以趁着 中秋节3天、国庆7天等假期,进行研究。我也将抽空选择性地回答一些问题。

源码注释比较多,不懂的可以在群里交流。

源码下载

a. 中国象棋交流群-群共享 群号 232733905

b. CSDN下载  (免积分)http://download.csdn.net/detail/fansunion/6283631

(一个完整的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

人机对弈主界面。

联系方式

如有需要,可以通过以下方式联系我

a.CSDN博客留言,私信。

b.QQ: 240370818

c.邮箱:LeiWen@FansUnion.cn

d.中国象棋交流群  楚汉棋兵  232733905

原文参见: http://FansUnion.cn/articles/2417


原文地址:https://www.cnblogs.com/qitian1/p/6463605.html