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

我如何遍历所有位值?
我在想类似的东西:
for(i = 0; i 绘制表格/构建数组/绘制空正方形

这些是我开始游戏的值(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;
}

有人问我:为什么要用挡板来做?
回答:
关于位板

经常用于棋盘游戏(例如国际象棋,西洋跳棋和奥赛罗)的位板是位集数据结构的一种特殊化,其中每个位代表游戏的位置或状态,旨在优化速度和/或内存或磁盘在大规模计算中的使用。同一位板上的位在游戏规则中相互关联,通常在一起时会形成游戏位置。其他位板通常用作 mask ,以转换或回答有关位置的查询。 “游戏”可以是任何类似游戏的系统,其中信息以结构化形式紧紧地包装着带有“规则”的规则,这些规则影响各个单元或部件之间的关系。

最佳答案

首先,您必须检查您的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/

10-11 21:56
查看更多