问题标签 [bitboard]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 最快的位板换位 (5x5)
对于我正在编写的解谜器,我正在寻找最快的算法(最少的位操作数)来转置拼图中每平方 2 位的 5x5 位板,因此:
变成
我能想到的最好的是
但感觉这可以通过显着减少的操作来完成。有谁知道更快的解决方案?也非常欢迎参考有关该主题的优秀文献。
bitmap - C# 中用于跳棋的 BitBoard
我研究过位板,但未能找到有关位板编码在 c# 中的样子的示例。如果有人愿意说明如何用 32 位编程棋盘(8x8)。
我知道有 64 个方格,但是你如何只填充其中的 32 个并且全部包含在这些 32 位数据结构中。
c++ - 算法 Trax 获胜条件
我尝试用 C++ 实现游戏 Trax。对于那些不知道的人:http ://www.traxgame.com/about_rules.php
到目前为止,我已经建立了棋盘并创建了规则,我可以在其中放置下一个 Tile 以及允许我设置哪个 Tile。但是现在,我正在为获胜条件而苦苦挣扎。如您所见,我需要一行至少 8 块瓷砖..
我的第一次解决方案尝试包括了许多 if 条件。那根本不可能。所以我需要实现一个适当的算法..
我使用位板的 secong 尝试变得非常复杂,所以我的问题是是否有更简单的方法,我现在只是想念。
问候,MC
python - 如何处理非常大的 Bitboards
我正在开发一个 2 人棋盘游戏(例如connect 4),参数棋盘大小为h,w。我想使用hw大小的位板检查获胜条件。
在国际象棋等棋盘大小固定的游戏中,位棋盘通常用某种 64 位整数表示。当h和w不是常数并且可能非常大(假设 30*30)时,位板是个好主意吗?如果是这样,C/C++ 中的任何数据类型是否可以处理大型位板以保持其性能?
由于我目前正在研究 python,因此也非常感谢使用这种语言的解决方案!:)
提前致谢
c++ - C++ 中 64 位整数的按位 (Bitshift) 运算
我正在尝试处理位板,这需要我在 64 位无符号整数中设置一个特定位。要设置位i,我对相关位板执行按位或运算,并使用左移数字。
它从第 0 位到第 31 位工作正常,但对第 32 位到第 63 位不起作用。我怀疑这是因为右侧的评估恰好是 32 位整数。因此,我尝试了一个临时变量。
也许它仍然将右侧评估为 32 位整数,或者这是我无法弄清楚的其他问题。为了输出整数,我使用 std::bitset<64>。例如:
预期十进制值:576460752303423496
实际:8
位值:00000000000000000000000000000000000000000000000000000000000001000
显然,只有国王 |= 1 << 3; 工作正常。
总之,第 32 位到第 63 位有什么问题,我该如何解决?
arrays - 具有使用 8 x 8 阵列的棋盘表示的国际象棋引擎的最大强度是多少?
我正在尝试编写我的第一个国际象棋引擎,并且正在使用 chessprogramming.wikispaces.com 作为资源。我的第一次尝试是使用位板,考虑到它们的性能优势以及深蓝等流行引擎使用位板的事实。然而,我发现实现起来非常困难,并得出结论,我应该从小处着手我的第一个引擎。相反,我想使用 8 x 8 阵列,但我想知道与使用位板相比,我的引擎与阵列的强度。如果可能,请使用 8 x 8 阵列提供一个引擎最大强度的近似国际象棋等级。
bit-manipulation - 从移动位板生成单个移动
在我的国际象棋引擎中,它使用位板来表示棋盘的状态,一次生成一大块伪合法的移动,结果就是一个位板。例如:
棋子:
稍后一点点位板魔术:
最后的位板只是一大块可能的动作。引擎通常如何获取这个位板并从中生成单独的移动?我是否必须遍历每一位以检查它是否已设置?不过,在位板上进行迭代似乎违背了使用位板的目的,这就是为什么我有点怀疑的原因。
有没有更好的办法?
c++ - 用位板识别棋子
当棋盘存储在各种位板中时,现代国际象棋引擎如何识别特定单元格上的类型/边子?我对此有疑问,因为要找出特定位的类型/侧面,我必须始终这样做:
这是一个相当乏味的过程,并且必须执行多次(例如,在移动生成期间查看正在捕获的内容)。我不确定我是否应该这样做,或者简单地创建一个类型为 64 的数组是否会更快Piece[64]
,这将固有地存储片段类型。
考虑到它必须是数百万次才能在搜索功能中进行捕获分析,这会更好。我做错了吗?
java - 围绕 x 轴翻转一维阵列板表示
我正在编写一个国际象棋 AI,并且在我的棋盘表的实现中遇到了一个问题。因为我只想每边有一个正方形表,所以我需要一个函数来翻转保存关于 x 轴的值的一维数组。例如,这个数组:
[ 2, 4, 5,
3, 5, 0,
1, 4, 2 ]
将被翻转为:
[ 1, 4, 2,
3, 5, 0,
2, 4, 5 ]
我使用以下方法使用嵌套循环为 0x64 数组实现了这一点(注意:示例仅为 3x3,但以下函数针对 8x8 进行调整);但是,我想知道是否有更有效的方法,因为时间是一个问题。
我知道您可以使用 轻松有效地翻转位板sq' = sq ^ 56
,但不确定如何在一维数组的情况下使用此技术。任何建议将被认真考虑。
c++ - Bitboard:十六进制到二进制的转换
我正在为国际象棋编程初始化位板。但是,当我初始化黑色位板时,由于某种原因,二进制输出不正确。
以下是代码:
输出如下:
当调用 printAll() 时,所有的白色位板都可以打印出来,但是黑色的位板都打印出来,就像 bpawn 对前半部分所做的那样。有人对为什么会发生这种情况有任何建议吗?