用C++实现中国象棋(2.0)
项目介绍
前几天开发的象棋游戏程序有了一些新的进展,添加了一些新的功能:将军检测与提示、自动判和(双方均无过河子)、悔棋、棋谱导入与导出(自定义棋局),不过源代码也有了很大的改动,主要的源码部分由原来的600多行加到了1000多行,还有其他一些类和头文件的改动就不细说了。可以看看我上一篇博客:用C++实现中国象棋_Shuang_Zhu的博客-CSDN博客,里面有关于本项目的主要介绍,这篇文章主要说说新增的一些功能
效果展示
主菜单界面
以下是棋谱的文本格式
文件流那里测试了好久。。。才终于成功地把这些中英文字符一个个地读入程序中了 ,其中不乏遇到各种乱码~
下面是棋谱导入后的效果
注:棋谱的编码必须是要ANSI的(看右下角),如果被转成了utf8或者GBK,需要改回来,不然导入棋谱以后内存会直接炸掉,之前测试的时候下午还好,到了晚上突然炸了,找了半天才发现是编码的原因,Windows记事本貌似会偷偷强转你的编码
保存棋谱
每次对局结束后会询问是否需要保存棋谱
将军检测与提示
在被将的情况下系统会提示你应将,并告诉你正在将军的棋子,当然,玩家也可以选择不应将(没做强制应将的功能)
自动判和
如果过河子力全部死亡,系统会自动判和
悔棋功能
每次悔棋都会还原到上一回合(红方走一着,黑方走一着算一回合),因此悔棋后下一步还是轮到悔棋方走,棋谱的记录用的是栈存储,每一步都非常符合栈的特性
项目源码
可以看看上一篇文章,这次新增功能后,代码也同步到github上了,如有需求可自行拷贝
GitHub - LunarMeal/Chess
更多功能
后面可能还打算做一些 长将检测,长捉检测之类的,还有一些普通AI,不过越到后面,算法越难,尤其是长捉要判断的条件更多,每走一步都需要遍历所有棋子,还需要检测是否循环着法(长将,长捉都是建立在循环基础上的),棋子是否为有根子力(被己方棋子保护着),长捉子是否为兵卒类、将帅类(这两类棋子是允许长捉的)、子力价值判断(炮长捉有根车依然是长捉)等等
用C++实现中国象棋(2.0)相关推荐
- 中国象棋-1.0开源啦
代码下载地址:https://code.csdn.net/FansUnion/chinesechess-v1 /** * 项目名称: FansChineseChess * 版本号:1.0 * 名字:雷 ...
- 中国象棋程序elephanteye(象眼) v2.0 官网
Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...
- JS 中国象棋程序(0):界面设计
"JavaScript中国象棋程序" 这一系列教程将带你从头使用JavaScript编写一个中国象棋程序.希望通过这个系列,我们对博弈程序的算法有一定的了解.同时,我们也将构建出一 ...
- 创建一个中国象棋的阿法狗——阿法象(0)
创建一个中国象棋的阿法狗--阿法象(0) 最近,阿法狗与李世石九段的人机大战深受关注.我就借着这股东风来写一个系列博客--<创建一个中国象棋的阿法狗--阿法象>. 早在几年前,就在一本书上 ...
- BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)
题意:就是在n*m的格子中放"炮"(中国象棋中的棋子)问有多少种放法,使得没有任意的两个炮相互攻击 思路:我们很容易的得到一列或者一行中最多放下两个炮(我也只能得到这些了,满脑子状 ...
- java象棋无框架版_Java版中国象棋
/* *中国象棋Java *作者:yanick *源文件:Chess.java *最后修改时间:2006-11-1 *添加功能:实现了当前棋局的保存 *Chess.java */ import jav ...
- P2051 中国象棋
P2051 中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中 ...
- AHOI2009 中国象棋
题目链接 题目描述 在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. (在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同 ...
- VC++源码分析 - 中国象棋源码分析
下载自 http://www.newxing.com/Code/VC/game/1750.html 运行界面如下: 看下类图: 资源: 主对话框: 源码说明: 本人机对弈程序采用了多种搜索算法.以下是 ...
最新文章
- 斯坦福:「目标检测」深度学习全面指南
- 使用 shell 脚本对 Linux 系统和进程资源进行监控
- 使用eclipse自带制作帮助系统
- EasyUI中Dialog对话框的简单使用
- IoC反转控制初步认识
- 关于文件中的0D、0A
- 计算机双硬盘安装需要跳线吗,双硬盘安装图文教程
- 网络安全辅助工具:免费MD5解密网站
- 如何绕过mac地址过滤_如何通过路由器来过滤无线MAC地址
- USB3300速度调试
- mongodb默认的用户名密码_MongoDB 用户名密码登录
- 股票量化学习——复权因子计算
- c#自定义日历插件,给重要日期添加色彩。以及系统自带的monthCalendar日历插件
- luogu_1378 油滴扩展
- 用App Designer 制作2048小游戏
- Flutter 实现光影变换的立体旋转效果
- linux查看sriov端口,sriov查看pf-vf对应关系
- 小姐姐拯救计划之我的NAS有ipv6域名之蛇皮操作
- GetDataBack Pro V5.57 功能强大且专业的数据恢复
- thinkPHP/fastadmin topthink/think-queue 多进程