为每个国际象棋位置生成唯一的位置键

问题描述 投票:0回答:1

我正在尝试创建一个国际象棋引擎。有人告诉我,我们可以通过散列各个棋子的键为任何棋位置生成唯一的键。就像特定方块上的特定片段一样,它具有唯一的64位密钥。然后我们应该对该位置中存在的每个零件的零件密钥进行异或。

忽略有关国际象棋位置的小圆角和en Passant平方信息,这是告诉我生成位置键的方式(用C语言编写)>>

typedef unsigned long long U64;
#define RAND_64 (   (U64) rand() + \
                    (U64) rand() << 15 + \
                    (U64) rand() << 31 + \
                    (U64) rand() << 45 \
                )

这是从上面声明的RAND 64生成片段密钥的方式...

int index, index2;
U64 pieceKeys[12][64]; // For 12 pieces on every possible square.

for(index = 0; index<12; index++) {
    for(index2 = 0; index2<64; index2++) { 
        pieceKeys[index][index2] = RAND_64;
    }
}

我的问题是,这里不可能在2个正方形上为2个片段生成相同的片段密钥。如果发生这种情况,那么当我们通过对片段键进行XOR来创建位置键时,将存在歧义。

我对吗?如果是这样,那我该如何解决这个潜在的问题?

我正在尝试创建一个国际象棋引擎。有人告诉我,我们可以通过散列各个棋子的键为任何棋位置生成唯一的键。就像特定正方形上的特定块一样,它具有...

c random hash chess
1个回答
2
投票

只有六种不同类型的棋子,然后是黑白的。黑色或白色使用1位,样片类型使用3位,平方号使用7位,例如:]

© www.soinside.com 2019 - 2024. All rights reserved.