working move gen

This commit is contained in:
2024-03-19 22:21:18 +01:00
parent f0fe9454f8
commit 3b9fc1f872
11 changed files with 95 additions and 66 deletions

View File

@ -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);