2014-01-19 4 views
1

체스 프로그래밍에서 어떻게 비트 보드 표현이 작동하는지 그리고 유용한 정보를 찾지 못했는지 (또는 정확하게 번역 할 수 없는지 ^^) 한 가지 세부 사항을 이해하려고합니다. 내 질문은, 모든 조각에 의해 모든 위치에 이동을위한 자동으로 마스크를 생성하는 방법입니다. 각 조각 유형이이 위치 (wP, bP, K, R, N, B의 배열 [5] [64])에서 이동할 수있는 모든 필드를 정의하는 행렬을 가정합니다. 아래 위치에 루크에 대한 예를 들어에만 허용 위치는 다음과 같습니다이동을위한 작은 조각 마스크 생성

0 0 1 0 0 0 0 0 
0 0 1 0 0 0 0 0 
0 0 1 0 0 0 0 0 
0 0 1 0 0 0 0 0 
1 1 R 1 1 1 1 1 
0 0 1 0 0 0 0 0 
0 0 1 0 0 0 0 0 
0 0 1 0 0 0 0 0 

가 나는 각 조각 유형이 같은 것을 만들 수 있다고 가정하고 모든 타일이 단계 수 있습니다하지만 난 배열에 수동으로 하드 코딩해야합니까 또는이 프로세스를 자동화하고 프로그램 실행 후 사전 계산할 수있는 가능성이 있습니까?

답변

1

체스 규칙이 잘 정의되어 있기 때문에 필요한 모든 비트 보드를 쉽게 미리 계산할 수 있습니다. 예를 들어, 여기에 루크에 대한 법적 움직임을 계산하는 것이다 (파이썬) 함수 다음 bitboard을 인쇄하는 대신

import sys 

def rook(x, y): 
    for i in range (1, 8): 
     for j in range (1, 8): 
      if x == i or y == j: 
       sys.stdout.write("1") 
      else: 
       sys.stdout.write("0") 
     sys.stdout.write("\n") 

print "Bit board of legal moves for a rook at 1, 3:" 
rook(1, 3) 

는, 당신은 가능성이 그러한 (64)의 배열로, 컴팩트 한 포맷으로 저장할 것 (8x8 보드는 각 보드마다 64 비트가 필요하기 때문에).

이것은 매우 극단적 인 최적화 기술입니다. 따라서 구현 세부 사항이 털이 나기 때문에 (디버깅하는 데 어려움이 있습니다).

나는 위키를 참고 자료로 사용하였습니다 : bitboard page.