working move gen
This commit is contained in:
@ -56,7 +56,6 @@ static bool tryMagicNum(uint_least8_t field, struct magic_t *magic, uint_least64
|
||||
const uint_least64_t i = (pieceArrangement * magicNumber) >> shift;
|
||||
const uint_least64_t storedAttack = attackTable[i];
|
||||
const uint_least64_t calcAttack = preClacAttack[j];
|
||||
//assert(slidingMovementMask(direction, 4, field, pieceArrangement) == calcAttack);
|
||||
if(storedAttack != UINT_LEAST64_MAX && storedAttack != calcAttack) {
|
||||
validMagic = false;
|
||||
break;
|
||||
@ -79,14 +78,15 @@ static void initMagicField(uint_least64_t *attackMask, struct magic_t *magicTabl
|
||||
const uint_least8_t *direction, uint_least8_t directionLength) {
|
||||
struct magic_t *magic = magicTable + field;
|
||||
attackMask += field * MAX_SIZE;
|
||||
magic->mask = slidingMovementMask(direction, directionLength, field, 0);
|
||||
|
||||
/* & 0x7e... because we dont care about the outer ring of pieces, because the pieces are threated as
|
||||
enemy pieces. */
|
||||
magic->mask = slidingMovementMask(direction, directionLength, field, 0) & 0x7e7e7e7e7e7e7e7e;
|
||||
magic->shift = 64 - MAX_BITS - 1;
|
||||
uint_least64_t pieceArrangement = 0;
|
||||
size_t i = 0;
|
||||
do {
|
||||
assert(i < MAX_SIZE);
|
||||
attackMask[i] = slidingMovementMask(direction, directionLength, field, pieceArrangement);
|
||||
assert(countOnes(attackMask[i]) <= 12);
|
||||
pieceArrangement = (pieceArrangement - magic->mask) & magic->mask;
|
||||
++i;
|
||||
} while(pieceArrangement != 0);
|
||||
|
||||
Reference in New Issue
Block a user