问题标签 [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.
clojure - 对位板的射线攻击
鉴于 64 位长位板表示的索引,我正在尝试计算射线攻击:
车攻击(直接沿着文件或等级)很容易。但是,上面代码的问题是我最终得到了对角 Bishop 攻击的以下可能性:
当棋子从棋盘边缘脱落时,我应该如何解释?我正在使用大端映射(A8 = 0,H1 = 63)。
c++ - 无法使用非成员开始和结束函数编写范围
我正在编写一个使用位板的代码。由于迭代位板的所有位是非常常见的操作,我决定编写一些迭代器类,并使用 c++0x 的基于范围的循环。begin
但是,g++(4.6.3 版)告诉我or没有匹配的功能end
。
我的代码:
错误:
如果我用以下行替换循环:for (auto it=begin(num);it!=end(num);++it) std::cout<<*it<<std::endl;
它工作正常。
我的错误是什么?
c# - 棋盘表示 - 引擎
我正在用 C# 开发自己的国际象棋引擎。实际上,我正在搜索我的移动生成器上的错误,但我意识到我的实际国际象棋系统太慢了(perft(6) 甚至 21 分钟)。这是我的Github 存储库。
我使用了一个简单的片段层次结构和一个实现片段列表的板类。由于这个项目的面向对象的性质,我选择不使用多维矩阵来表示棋盘,因为每个棋子在其中都有自己的位置。问题是要从棋盘上得到一个棋子,知道它的位置,它需要 O(n),其中 n 是棋盘上当前棋子的数量。
在移动生成器中,假设一个空棋盘,我得到所有可能的移动,然后我用一个静态类检查它们(因为一块不应该关心棋盘状态)。我访问了一些网站,包括国际象棋编程 Wiki。我看到有很多类型的板表示,但在我的实际状态中,我不知道哪个是最好的(性能和简单性)。我想这就是全部,我希望你能帮助我:)
我欢迎任何关于我的项目的建议;)谢谢大家。
这是我的董事会课程:
c - 测试位板是否只有一位设置为 1
我有一个位板,如果只有一个位设置为 1,我想检查 C。
任何想法编写函数int only_one_bit_set_to_one (bboard b)
?
php - 如何迭代一个位值?
我想通过位板系统构建一个棋盘。从 12 个位板开始,我想显示一个表格(棋盘),在循环/迭代期间必须绘制一块。
我如何遍历所有位值?我在想类似的东西: for(i=0;i<64;i++) draw table / build array / draw empty square
这些是我开始游戏的价值观:
有人问我:为什么要使用bitboard?答:关于位板
位板,通常用于国际象棋、跳棋和黑白棋等棋盘游戏,是位集数据结构的一种特殊形式,其中每个位代表一个游戏位置或状态,旨在优化速度和/或内存或磁盘在大规模计算中的使用。同一个位板上的位在游戏规则中相互关联,当放在一起时通常会形成一个游戏位置。其他位板通常用作掩码来转换或回答有关位置的查询。“游戏”可以是任何类似游戏的系统,其中信息以结构化形式紧密包装,“规则”影响各个单元或部分如何关联。
c++ - 从 64 位数字中“隔离”特定的行/列/对角线
好的,让我们考虑一个 64 位数字,它的位组成一个 8x8 表。
例如
0 1 1 0 1 0 1 0 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0 1 0 1 0 0 1 1 0 1 0 1 0 0 1 1 0 1 1 1 0 0 1 1 0 1 0 1 0
写成
现在,如果我们只想隔离例如列 d ( 00100000
) (或任何行/对角线)怎么办?
这可以做到吗?如果是这样,怎么办?
提示:
(a) 我在这里的主要目标——虽然最初没有提到——是原始速度。我正在寻找最快的算法,因为“检索”功能每秒执行数百万次。
(b) 这更接近我的意思:https ://www.chessprogramming.org/Kindergarten_Bitboards
java - 战略棋盘游戏 AI 的高效棋盘表示
位板表示在少于 64 个位置的简化的类似象棋的策略游戏中是否仍然有效,或者基于数组的更简单的邮箱实现是否更实用?
我们学校的 AI 课每年都会举办一场比赛,教授制作棋盘游戏,我们有四个星期的时间来创建一个玩游戏的 AI。通常,这些棋子是具有相似规则的棋子的子集,并且在较小的棋盘上进行。即 8x5、7x7 等。我完全不确定仅使用 40 位与国际象棋的典型 64 位相比如何。
我唯一的问题是我对 C 或 C++ 不是很熟悉,并且更愿意用 Java 实现该程序。他们在 Java 中是否足够支持位操作,我可以在其中实现位板表示,如果这会提高效率,是否值得增加复杂性?学习曲线会不会太陡?
我的计划是根据时间将 Negamax 搜索与 AB 修剪、静默搜索、转置表、杀手移动等结合使用。在如此短的时间内创建具有竞争力的 AI 的任何其他技巧?
java - 九人莫里斯游戏的比特板表示
我正在用 Java 编写九人莫里斯游戏,并且已经使用 negamax 实现了游戏规则和 AI。然而,游戏是基于数组的,当 AI 思考时(从 6 层开始),移动生成需要相当长的时间。
我的位置数组基于下图:
我有更多的阵列充满了可能的工厂和相邻的位置。
我决定将游戏从阵列更改为使用位板,以便移动生成和当前使用阵列的其他区域更快。
我的第一步是为每个玩家准备一个位板,用于跟踪玩家在棋盘上的棋子。
第二步是确定空闲位置的位置。我知道我可以这样做:
所以我的问题是,我如何设置/更新玩家的位板以跟踪他们的作品?
chess - 使用魔术位板生成滑动移动
这是一个关于如何使用魔术位板验证国际象棋中的滑动棋子移动的全局问题。澄清一下,我不是在问魔术位板是如何在内部工作的。
现在,关于这个问题的更多细节。我正在使用位板编写棋盘表示,并且我想使用魔术位板来验证滑动块的移动。有人可以列出如何实现这一目标的主要步骤吗?例如,考虑以下董事会职位:
假设我们已经初始化并准备好使用所有神奇的位板功能和数据结构。因此,仅使用魔术位板的函数签名,您能否列出步骤(伪代码或任何语言)来验证 g3 上白车的给定动作?
hex - 国际象棋位板人口
在某些位板国际象棋引擎中,位板初始化如下:
有人可以解释一下这些片段是如何获得它们各自的十六进制值的吗?