9得票2回答
国际象棋:高分支因子

我正在尝试开发一个简单的国际象棋引擎,但是我在其性能方面遇到了困难。我已经实现了带有Alpha-Beta剪枝和迭代加深的Negamax算法(没有任何额外的启发式算法),但是我无法在3-4层以上得到合理的搜索时间。以下是我的程序日志的一部分,从游戏开始时记录: 2013-05-11 18:22...

9得票3回答
在国际象棋游戏中实现“检查”功能

这个问题比较大,如果没有查看我的代码就难以解决。如果过于复杂,那么范围可能太大,我会删除这个问题。基本上,我有一个完整的象棋游戏,所有象棋规则都已经实现,除了将军(因此也没有将死和和棋等)。 我通过为我的ChessBoard的方格分配两个布尔值:protectedByWhite和protec...

9得票2回答
国际象棋编程(非人工智能)- 移动验证

我正在尝试编写自己的国际象棋引擎(无人工智能)。 我知道有国际象棋游戏起始套件,我看了一下以获取启发。 但我没有明白的是我的非王棋子的合法移动(这里是移动验证)在哪里,以防止将自己置于将军之中? 想象一下这种情况: A5-对手的车 A4-我的象 A3-我的国王 现在我不能移动我的象,因为...

8得票1回答
国际象棋静态搜索过于广泛。

我在过去的一个月里用C#创建了一个简单的国际象棋引擎,并取得了一些进展。它使用了一个简单的Alpha-Beta算法。 为了纠正地平线效应,我尝试实现了静态搜索(在几次失败后才成功)。引擎的强度似乎有了很大提高,但速度非常慢! 以前,在中局状态下,我可以在大约160秒内搜索到6层深度,而在静...

8得票1回答
如何处理安卓国际象棋应用程序中的拖动?

我刚开始学习开发Android应用(使用Java,在Android Studio中),并且正在进行一个小项目,只是为了好玩。我想创建自己的国际象棋应用程序,目前为止我已经做了很多事情。我设置了一个菜单来切换到另一个活动,即游戏本身,我还制作了一个自定义视图和一个自绘棋盘,我认为我的模型也几乎完...

8得票9回答
推荐用于描述国际象棋规则的数据格式

我将编写一个国际象棋服务器和一个或多个客户端,并希望以一种与编程语言无关的方式描述国际象棋规则(例如,基于游戏状态的可允许移动、游戏结束时的规则)。这有点棘手,因为国际象棋的某些规则(例如,王车易位、吃过路兵、基于3次或更多重复移动的和棋)不仅基于棋盘布局,还基于移动历史记录。 我希望格式为...

8得票6回答
棋子层次结构设计:继承 vs 类型字段

我有一个用于棋子的基类 class piece; 以及一个包含派生对象的数组 piece* board[8][8]; 优点是通过虚函数实现简洁的设计。缺点是,如果我需要在棋盘上找到一个棋子或比较一个棋子,我必须返回到动态转换(或typeid)。这很丑陋,并且在进行数百万次请求时可...

8得票2回答
锯齿数组与单个大数组相比有何优劣?

我不太确定如何提出这个问题,但我有两种方法(目前为止)用于查找数组。 选项1是: bool[][][] myJaggegArray; myJaggegArray = new bool[120][][]; for (int i = 0; i < 120; ++i) { if ((...

8得票2回答
一个置换表会导致搜索不稳定吗?

我正在编写一个国际象棋引擎,并最近添加了置换表。 在运行一些测试时,我发现尽管搜索仍然返回相同的最佳着法,但着法的价值(对于最大化玩家而言有多好)波动。 置换表会导致搜索不稳定吗?我记得读过置换表可能会导致搜索不稳定。这就是它的意思吗?所以,这是正常现象还是我的代码中存在严重错误?

8得票1回答
使用OpenCV工具从连续图像差异中检测国际象棋的走法

嘿,我正在编写一个简单的国际象棋机器人视觉系统,我正在尝试改进以前的研究,允许使用摄像头和标准棋盘,并允许在比赛期间两者都移动。到目前为止,我可以通过网络摄像头获取图像并定位棋盘,我想通过取两个连续图像的差异来检测动作,以确定发生了什么变化,然后使用有关棋盘占用的先前信息来检测动作。 我的问...