Пример #1
0
        public static UInt64 GetKingAttacks(UInt64 king)
        {
            UInt64 attacks = BitOps.OneStepEast(king) | BitOps.OneStepWest(king);

            king    |= attacks;
            attacks |= BitOps.OneStepNorth(king) | BitOps.OneStepSouth(king);
            return(attacks);
        }
Пример #2
0
        private static UInt64 GetKnightAttacks(UInt64 knights)
        {
            UInt64 west, east, attacks;

            east     = BitOps.OneStepEast(knights);
            west     = BitOps.OneStepWest(knights);
            attacks  = (east | west) << 16;
            attacks |= (east | west) >> 16;
            east     = BitOps.OneStepEast(east);
            west     = BitOps.OneStepWest(west);
            attacks |= (east | west) << 8;
            attacks |= (east | west) >> 8;

            return(attacks);
        }
Пример #3
0
        public static void initRayAttacks()
        {
            UInt64 rayAttack;

            for (byte i = 0; i < 64; i++)
            {
                UInt64 square = 1UL << i;

                //nort
                rayAttack        = BitOps.OneStepNorth(square);
                rayAttack       |= BitOps.OneStepNorth(rayAttack);
                rayAttack       |= BitOps.OneStepNorth(rayAttack);
                rayAttack       |= BitOps.OneStepNorth(rayAttack);
                rayAttack       |= BitOps.OneStepNorth(rayAttack);
                rayAttack       |= BitOps.OneStepNorth(rayAttack);
                rayAttack       |= BitOps.OneStepNorth(rayAttack);
                rayAttacks[0, i] = rayAttack;

                //sout
                rayAttack        = BitOps.OneStepSouth(square);
                rayAttack       |= BitOps.OneStepSouth(rayAttack);
                rayAttack       |= BitOps.OneStepSouth(rayAttack);
                rayAttack       |= BitOps.OneStepSouth(rayAttack);
                rayAttack       |= BitOps.OneStepSouth(rayAttack);
                rayAttack       |= BitOps.OneStepSouth(rayAttack);
                rayAttack       |= BitOps.OneStepSouth(rayAttack);
                rayAttacks[1, i] = rayAttack;

                //east
                rayAttack        = BitOps.OneStepEast(square);
                rayAttack       |= BitOps.OneStepEast(rayAttack);
                rayAttack       |= BitOps.OneStepEast(rayAttack);
                rayAttack       |= BitOps.OneStepEast(rayAttack);
                rayAttack       |= BitOps.OneStepEast(rayAttack);
                rayAttack       |= BitOps.OneStepEast(rayAttack);
                rayAttack       |= BitOps.OneStepEast(rayAttack);
                rayAttacks[2, i] = rayAttack;

                //west
                rayAttack        = BitOps.OneStepWest(square);
                rayAttack       |= BitOps.OneStepWest(rayAttack);
                rayAttack       |= BitOps.OneStepWest(rayAttack);
                rayAttack       |= BitOps.OneStepWest(rayAttack);
                rayAttack       |= BitOps.OneStepWest(rayAttack);
                rayAttack       |= BitOps.OneStepWest(rayAttack);
                rayAttack       |= BitOps.OneStepWest(rayAttack);
                rayAttacks[3, i] = rayAttack;

                //noEa
                rayAttack        = BitOps.OneStepNorthEast(square);
                rayAttack       |= BitOps.OneStepNorthEast(rayAttack);
                rayAttack       |= BitOps.OneStepNorthEast(rayAttack);
                rayAttack       |= BitOps.OneStepNorthEast(rayAttack);
                rayAttack       |= BitOps.OneStepNorthEast(rayAttack);
                rayAttack       |= BitOps.OneStepNorthEast(rayAttack);
                rayAttack       |= BitOps.OneStepNorthEast(rayAttack);
                rayAttacks[4, i] = rayAttack;

                //soWe
                rayAttack        = BitOps.OneStepSouthWest(square);
                rayAttack       |= BitOps.OneStepSouthWest(rayAttack);
                rayAttack       |= BitOps.OneStepSouthWest(rayAttack);
                rayAttack       |= BitOps.OneStepSouthWest(rayAttack);
                rayAttack       |= BitOps.OneStepSouthWest(rayAttack);
                rayAttack       |= BitOps.OneStepSouthWest(rayAttack);
                rayAttack       |= BitOps.OneStepSouthWest(rayAttack);
                rayAttacks[5, i] = rayAttack;

                //noWe
                rayAttack        = BitOps.OneStepNorthWest(square);
                rayAttack       |= BitOps.OneStepNorthWest(rayAttack);
                rayAttack       |= BitOps.OneStepNorthWest(rayAttack);
                rayAttack       |= BitOps.OneStepNorthWest(rayAttack);
                rayAttack       |= BitOps.OneStepNorthWest(rayAttack);
                rayAttack       |= BitOps.OneStepNorthWest(rayAttack);
                rayAttack       |= BitOps.OneStepNorthWest(rayAttack);
                rayAttacks[6, i] = rayAttack;

                //soEa
                rayAttack        = BitOps.OneStepSouthEast(square);
                rayAttack       |= BitOps.OneStepSouthEast(rayAttack);
                rayAttack       |= BitOps.OneStepSouthEast(rayAttack);
                rayAttack       |= BitOps.OneStepSouthEast(rayAttack);
                rayAttack       |= BitOps.OneStepSouthEast(rayAttack);
                rayAttack       |= BitOps.OneStepSouthEast(rayAttack);
                rayAttack       |= BitOps.OneStepSouthEast(rayAttack);
                rayAttacks[7, i] = rayAttack;
            }
        }