一个采用WPF开发的中国象棋软件,软件全部开源,可用于二次开发与学习,软件设计上,借鉴了国内知名象棋软件通行的设计思想,具有友好的操作界面,符合大众使用习惯。
全部源码,开箱即用。
代码中含有大量注释,能够快速理解程序流程。
提供预览版可执行文件,下载解压即可使用,无需安装。预览版不定期更新。
人机对战,测试自己的象棋水平。
电脑对战,观看电脑控制红黑双方棋子如何攻杀。
自由打谱,练习各种变化,添加着法注释,并能够全部保存。
具有复盘功能,所有保存的棋谱及其着法变化,都可以随时打开进行温习。
残局破解,测试残局能力。系统自带30个残局,有视频破解教程。
残局设计,可不断收集、扩展残局库。
棋盘可上下翻转,红方可在下方,也可以在上方。运行期间可随意翻转棋盘。
走棋具备动画效果,有悔棋功能。
可显示棋子移动的有效位置,非法目标位置将不可走到。
红方先走棋,非走棋方的棋子选中无效。
将军时有提示,且下一步必须走解将的棋子,其他走棋无效。
走棋错误时,自动取消走棋,棋子返回到走棋前位置。
有绝杀判断功能。判断是否绝杀的算法比较复杂,费了不少脑细胞。
有记谱功能,可在单独窗口同步显示。
点“开局”按钮,可恢复到初始状态。
仿天天象棋界面,严格遵循象棋走棋规则。
使用SQLite在本地保存棋谱,具体增加、删除、修改功能。
完善的变招数据存储结构,可保存所有变化。
遇到变招时,显示箭头提示。显示箭头数量可进行设置,以便保存界面清洁。
电脑提示下一步最佳着法,显示局面分。
电脑走棋速度可人为设置。
窗口可任意缩放,棋盘、棋子、按钮等同步缩放。
窗口背景可任意更换。
具备界面主题选择功能,可选择个人喜好的主题。
自动保存用户设置,下次打开软件时,自动使用上次保存的设置。
编程环境:Visual Studio 2019/2022 C#,NET5.0/6.0,WPF,SQLite3.0 随着功能扩展,代码量快速增长,模块间耦合度过高问题越来越严重。下一步打算使用Prism框架对代码进行重构,重构为MVVM模式,以降低模块间的耦合度,增强可扩展性。
for (int i = 0; i < 9; i++)
for (int j = 0; j < 10; j++)
{
int qizi = GlobalValue.qiPan[i, j]; // 从棋盘上找到存活的本方棋子
if (gongJiQiZi > 15 && qizi > 0 && qizi <= 15) // 黑方被将军时
{
thispoints = MoveCheck.GetPathPoints(qizi, GlobalValue.qiPan); // 获得本方棋子的可移动路径
foreach (int[] point in jieShaPoints) // 逐个取出可解除将军的点位坐标
{
if (thispoints[point[0], point[1]] == true) // 本方棋子的可移动路径是否包含解除攻击点
{
if (!MoveCheck.AfterMoveWillJiangJun(qizi, point[0], point[1], GlobalValue.qiPan))
returntrue; // true=能够解杀
}
}
}
if (gongJiQiZi <= 15 && qizi > 16 && qizi <= 31) // 红方被将军时
{
thispoints = MoveCheck.GetPathPoints(qizi, GlobalValue.qiPan); // 获得本方棋子的可移动路径
foreach (int[] point in jieShaPoints) // 逐个取出可解除将军的点位坐标
{
if (thispoints[point[0], point[1]] == true) // 本方棋子的可移动路径是否包含解除攻击点
{
if (!MoveCheck.AfterMoveWillJiangJun(qizi, point[0], point[1], GlobalValue.qiPan))
returntrue; // true=能够解杀
}
}
}
}