我正在尝试创建一个国际象棋引擎。有人告诉我,我们可以通过散列各个棋子的键为任何棋位置生成唯一的键。就像特定方块上的特定片段一样,它具有唯一的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来创建位置键时,将存在歧义。
我对吗?如果是这样,那我该如何解决这个潜在的问题?
我正在尝试创建一个国际象棋引擎。有人告诉我,我们可以通过散列各个棋子的键为任何棋位置生成唯一的键。就像特定正方形上的特定块一样,它具有...
只有六种不同类型的棋子,然后是黑白的。黑色或白色使用1位,样片类型使用3位,平方号使用7位,例如:]