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

news/2024/12/2 12:35:41/


本篇将正式公布 中国象棋程序–高级版–楚汉棋兵 的所有源码。介绍一些相关信息,如源码下载地址、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



http://www.ppmy.cn/news/387985.html

相关文章

使用c#捕获usb扫描枪扫描二维码、条形码结果(支持中文版)

目录 前因 代码 思路 左右shift及其他 尝试获得中文返回内容 处理中文信息 注意编码及解码 前因 之前在18年写过一个使用c#捕获usb扫描枪扫描二维码、条形码结果,当时我是没有遇到需要使用中文的情况,因为二维码都是我自己控制生成的&#xff0c…

象棋代码

class ChessMainFrame extends JFrame implements ActionListener,MouseListener,Runnable{ //玩家 JLabel play[] new JLabel[32]; //棋盘 JLabel image; //窗格 Container con; //工具栏 JToolBar jmain; //重新开始 JButton anew; //悔棋 JButton repent; //打开 JBut…

基于Java的中国象棋对弈系统

请自行按此找一些棋子的图片,main是棋盘 课程设计基本功能描述 实现一个中国象棋对弈的软件,实现中国象棋的规则:棋子共有三十二个,分为红、黑两组,每组十六个,各分七种,其名称和数目如下所述…

QingScan扫描器安装、使用

一、 QingScan介绍 QingScan是一个安全工具整合系统,解决你平时使用各种工具一个个打 开填写扫描目标的麻烦过程;QingScan工具只需要你把URL给它,它会调 用市面上各种扫描工具,对URL扫描,最后把结果汇聚展示 项目地址…

海康工业相机 C# 开发示例

一.学习资料 1.官网下载安装MVS软件。 2.文件资料路径:C:\Program Files (x86)\MVS\Development\Documentations 3.引用的DLL路径:C:\Program Files (x86)\Common Files\MVS\Runtime\Win64_x64\MvCameraControl.dll(实测是这个路径&#x…

关键字static,final的使用

关键字:static 概念 是java中的一个关键字 用于修饰成员(成员变量和成员方法) 类属性、类方法的设计思想 概念: 当我们编写一个类时,其实就是在描述其对象的属性和行为,而并没有产生实 质上的对象&#x…

IMX6ULL裸机篇之SPI实验-ICM20608代码实现

一. SPI 实验 SPI实验:学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608,读取 ICM-20608 的六轴数据。 本文学习 SPI通信实验中,涉及从设备的 SPI代码编写。 之前学习了 SPI 主控芯片代码的编写,如下所示: IMX6ULL…

收音机FM和AM的区别

1、频率区别 FM = Frequency Modulation 调频,微波;微波传输,信号质量高,传输成本低,发射功率小,覆盖范围小,受地理因素影响较大,一般作为城市广播的首选。比如你的家乡城市台,一般可以通过FM收听。 AM = Amplitude Modulation 调幅,微波;中波传输,信号质量稳定,传…