비트 보드의 마법 번호 찾기


9

C ++ 체스 엔진을 작성 중이며 Little-Endian Rank-File Mapping 비트 보드에서 슬라이딩 피스의 움직임을 생성 하는 마법의 숫자를 찾고 있습니다.

라이벌 체스 웹 사이트 는 마법의 숫자를 제공하지만 동일한 보드 매핑에는 적용되지 않습니다.

체스 프로그래밍 위키는 지금까지 최고의 매직 넘버를 제공 하지만 철저하지는 않습니다.

결국 나는 네 가지를 찾고 있습니다.

  • 각 사각형에 대한 점유 마스크
  • 각 사각형의 마법 번호
  • 각 사각형의 마법 이동
  • 각 사각형에 대한 데이터베이스 배열을 이동합니다

따라서 다음 코드 를 사용하여 C3에서 Rook의 이동을 찾을 수 있습니다 (예 :).

bbBlockers = bbAllPieces & occupancyMaskRook[C3]

databaseIndex = (int)((bbBlockers * magicNumberRook[C3]) >> rookMagicShifts[C3])

bbMoveSquares = magicMovesRook[C3][databaseIndex] & ~bbFriendlyPieces

나는이 질문이 programmers.stackexchange.com 또는 stackoverflow.com 에서 더 적합하고 대답 될 것이라고 믿습니다 .
Pavan Nadig

1
실제로는 아닙니다. 이것은 여전히 ​​여기서 대답 할 수 있습니다. BTW, 프로그래머는 높은 수준의 추상화에 더 집중합니다. stackoverflow.com이 더 좋을 것입니다.
SmallChess

@PeteBecker 당신 말이 맞아요, 내가 바꿨어요
Romain

답변:


6

이것은 체스 프로그래밍에서 잘 알려진 문제입니다. Pradyumna Kannan이 생성 한 숫자의 사용을 고려해야합니다. Kannan 박사는 친절하게 오픈 소스로 마법의 숫자를 만들었습니다. 그것은 Crafty와 내 자신을 포함한 다른 체스 엔진에서 사용되고 있습니다.

Google "Crafty magic number"로 더 많은 내용을 읽을 수 있습니다.

여기에 압축 파일을 준비했습니다 . SmallChess 체스 엔진 앱에서 사용되는 것과 동일한 파일입니다. 설명서를 읽으십시오. 기본적으로, 당신은 전화를해야합니다 Rmagic (광장, 점유) 루크와 대한 Bmagic (광장, 점유) 주교합니다. 퀸 마스크로 XOR 할 수 있습니다.


잘 작동합니다. 체스 엔진에서이 코드를 자유롭게 사용 / 수정할 수 있습니까?
Romain

라이센스 제한이 없습니다. 당신이 원하는대로 사용하십시오. 내가 한 사람은 내가 아니었고, 칸난 박사의 공헌이었습니다. 도움이된다면 내 대답을 받아들이십시오!
SmallChess

안녕하세요, MagicMoves.zip 파일을 GoogleDrive에 업로드 할 수 있습니까? smallchess에서 다운로드 할 수 없습니다 (오류가 있습니다). 감사.
123iamking

@ 123iamking 링크가 여전히 작동합니다. 나는 그것을 제거하지 않을 것입니다.
SmallChess

@SmallChess-제거에 대해 묻지 않습니다. Google 드라이브에 미러를 제공 할 수 있습니까? 감사.
123iamking
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.