如何迭代一点值?

Ter*_*don 5 php bitboard

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

我如何循环所有位值?我想的是:for(i = 0; i <64; i ++)draw table/build array/draw empty square

这些是我开始游戏的价值观:

    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;
}
Run Code Online (Sandbox Code Playgroud)

有人问我:为什么选择位线?答:关于位板

通常用于象棋,棋子和othello等棋盘游戏的位板是bitset数据结构的一种特殊化,其中每个位代表游戏位置或状态,旨在优化速度和/或内存或磁盘在质量计算中的使用.同一位板中的位在游戏规则中彼此相关,通常在一起形成游戏位置时.其他位板通常用作掩码来转换或回答关于位置的查询."游戏"可以是任何类似游戏的系统,其中信息以结构化形式紧密打包,其中"规则"影响各个单元或部件的相关性.

lup*_*tus 3

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

赶紧跑:

echo PHP_INT_MAX;
Run Code Online (Sandbox Code Playgroud)

如果结果是9223372036854775807那么它应该有效。

您正在使用字符串,我想当您以$string | $string上面的形式执行操作时,它将被转换为以 10 为基数的整数,因此结果不会是您想要的。从 PHP 5.4 开始,您可以使用0b000符号,对于较低的 PHP 版本,您需要将其保留为十六进制或基数 10 格式。如果您将值存储在数据库或类似的地方,并且您将收到字符串形式的值,或者您只想将其保留为上面提供的格式,那么您必须intVal($value, 2)首先使用它来正确转换它。

要迭代该值,您可以仅使用for循环(如您所建议的那样):

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