我想通过位板系统构建一个棋盘。 从12个位板开始,我想显示一个表(棋盘),在循环/迭代期间必须绘制一个片段。
如何遍历所有比特值? 我想的是: 对于(I = 0; I< 64;我++) 绘制表/构建数组/绘制空方
这是我开始游戏的价值所在:
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;
}
有人问我:为什么选择位线?
回答:
关于位板
通常用于象棋,棋子和othello等棋盘游戏的位板是bitset数据结构的一种特殊化,其中每个位代表游戏位置或状态,旨在优化速度和/或内存或磁盘使用。质量计算。同一位板中的位在游戏规则中彼此相关,通常在一起形成游戏位置时。其他位板通常用作掩码来转换或回答关于位置的查询。 “游戏”可以是任何类似游戏的系统,其中信息以结构化形式紧密包装,其中“规则”影响各个单元或部件的相关性。
答案 0 :(得分:2)
首先,您必须检查您的PHP版本是否支持64位整数,否则您将得到奇怪的结果。
跑步:
echo PHP_INT_MAX;
如果结果是9223372036854775807
那么它应该有用。
你正在使用字符串,我认为当你像上面那样进行$string | $string
时,它会被转换为基数为10的整数,所以结果不会是什么你要。从PHP 5.4开始,您可以使用0b000
表示法,对于较低的PHP版本,您需要将其保留为十六进制或十进制格式。如果您将值存储在数据库或类似的某个地方,并且您将获得值作为字符串,或者您只想将其保持为上面显示的格式,那么您必须首先使用intVal($value, 2)
来正确地投射它。
要迭代该值,您只需使用for
循环(如您所建议的那样):
$value = intVal($WhitePieces,2);
for ($i = 0 ; $i < 64 ; ++$i) {
if ((pow(2,$i) & $value)) {
// draw piece
}
}
答案 1 :(得分:1)
你没有比特值,你有字符串。字符串应该很难或者。
你怎么循环?使用数组和foreach。
您如何使用64位值?使用PHP 5.4和二进制数格式:0b00001111 =&gt; 16 - 或者将整数值表示为十六进制或十进制,这对于游戏设置例程来说应该是完全正确的,因为规则已知几个世纪而不会改变。
请记住,您必须使用64位系统来执行代码,否则PHP将无法支持64位整数,并将它们视为浮点值,或将它们缩短为32位值,具体取决于您实际执行的操作。 / p>
由于这一切,我建议不要使用位字段来解决问题。编程更像汇编程序似乎是一个好主意,但你不是在编写汇编程序,并且可能会为这种方法付出与其他任何东西相比非理想性能的代价。