gpt4 book ai didi

php - 如何迭代一个位值?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:41:57 26 4
gpt4 key购买 nike

我想通过 bitboard 系统构建一个棋盘。从 12 个位板开始,我想显示一个表格(棋盘),在循环/迭代期间必须绘制一 block 。

我如何遍历所有位值?我在想类似的事情:对于(i=0;i<64;i++) 画表/建数组/画空方 block

这些是我开始游戏的值(value)观:

    function init_game($whitePlayer,$blackPlayer)
{
$WhitePawns = '0000000000000000000000000000000000000000000000001111111100000000';
$WhiteKnights = '0000000000000000000000000000000000000000000000000000000001000010';
$WhiteBishops = '0000000000000000000000000000000000000000000000000000000000100100';
$WhiteRooks = '0000000000000000000000000000000000000000000000000000000010000001';
$WhiteQueens = '0000000000000000000000000000000000000000000000000000000000010000';
$WhiteKing = '0000000000000000000000000000000000000000000000000000000000001000';

$BlackPawns = '0000000011111111000000000000000000000000000000000000000000000000';
$BlackKnights = '0100001000000000000000000000000000000000000000000000000001000010';
$BlackBishops = '0010010000000000000000000000000000000000000000000000000000100100';
$BlackRooks = '1000000100000000000000000000000000000000000000000000000000000000';
$BlackQueens = '0000100000000000000000000000000000000000000000000000000000000000';
$BlackKing = '0001000000000000000000000000000000000000000000000000000000000000';

$WhitePieces = $WhitePawns|$WhiteKnights|$WhiteBishops|$WhiteRooks|$WhiteQueens|$WhiteKing;
$BlackPieces = $BlackPawns|$BlackKnights|$BlackBishops|$BlackRooks|$BlackQueens|$BlackKing;
}

有人问我:为什么要使用bitboard appoach?回答:关于位板

通常用于国际象棋、跳棋和奥赛罗等棋盘游戏的位板是位集数据结构的一种特殊化,其中每个位代表一个游戏位置或状态,旨在优化速度和/或内存或磁盘使用质量计算。同一个位板中的位在游戏规则中相互关联,当放在一起时通常会形成一个游戏位置。其他位板通常用作掩码来转换或回答有关位置的查询。 “游戏”可以是任何类似游戏的系统,其中信息以结构化形式紧密包装,“规则”影响各个单元或部分之间的关​​系。

最佳答案

首先你必须检查你的PHP版本是否支持64位整数,否则你会得到奇怪的结果。

只需运行:

echo PHP_INT_MAX;

如果结果是 9223372036854775807 那么它应该可以工作。

你正在使用字符串,我想你什么时候会做 $string | $string 的形式就像您在上面所做的那样,然后它将被转换为以 10 为底的整数,因此结果将不是您想要的。从 PHP 5.4 开始,您可以使用 0b000 表示法,对于较低的 PHP 版本,您需要将其保留为十六进制或以 10 为基数的格式。如果您将值存储在 DB 或类似的地方,并且您将收到字符串形式的值,或者您只想将其保留在上面显示的格式中,那么您必须使用 intVal($value, 2) 首先正确转换。

要遍历值,您可以只使用 for 循环(如您所建议的那样):

$value = intVal($WhitePieces,2);
for ($i = 0 ; $i < 64 ; ++$i) {
if ((pow(2,$i) & $value)) {
// draw piece
}
}

关于php - 如何迭代一个位值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13573255/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com