M Tim Jones의 인공 지능 : A 시스템 접근 방식에서 가장 먼저 검색을 실행하는 동안 다음 움직임이 어떻게 생성되는지와 솔루션이 뽑혔다. 그렇게하기 위해우선 순위 검색을위한 평가 함수 알아 내기
,이 개 코드 섹션은 우리를 유세됩니다
#define checkPiece(board, y)((board & (1 << (15-y))) ? 1 : 0)
#define MAX_TESTS 14
#define MAX_VECTOR 4
typedef struct {
unsigned char len;
unsigned char vector[MAX_VECTOR];
} test_t;
및
const test_t tests[MAX_TESTS]={
{ 4, { 0, 4, 8, 12 } },
{ 4, { 1, 5, 9, 13 } },
{ 4, { 2, 6, 10, 14 } },
{ 4, { 3, 7, 11, 15 } },
{ 2, { 8, 13 } },
{ 3, { 4, 9, 14 } },
{ 4, { 0, 5, 10, 15 } },
{ 3, { 1, 6, 11 } },
{ 2, { 2, 7 } },
{ 2, { 1, 4 } },
{ 3, { 2, 5, 8 } },
{ 4, { 3, 6, 9, 12 } },
{ 3, { 7, 10, 13 } },
{ 2, { 11, 14 } }
};
이 두 가지가 EvaluateBoard 기능
void evaluateBoard(node_t *node_p) {
int test, i, check;
int cost = 0;
for (test = 0 ; test < MAX_TESTS ; test++) {
check = 0;
for (i = 0 ; i < tests[test].len ; i++) {
check += checkPiece(node_p->board, tests[test].vector[i]);
}
if (check > 1) cost+= (check-1);
}
node_p->g = cost;
printf(" evaluateBoard %04x = (h %d, g %d)\n",
node_p->board, node_p->h, node_p->g);
return;
}
다음 이동에 사용된다 Cost int에 의해 결정되며 checkPiece 결과의 결과입니다. 이 경우 보드 == 1288이지만 y 값은 test_t tests
에서 어떻게 선택됩니까?
또한 구조는 무엇입니까 test_t tests
? 우리는 C 코드에서 비슷한 것을 본 적이 없다. 그것은 다차원 배열의 한 형태입니까?
그건 그렇고, 내가 게임 산업에 종사했을 때 나는이 물건을 다룰 때 경로 찾기에 매우 익숙합니다. 그러나, 나는 당신이 사용하고있는 책을 읽지 않았습니다. 최고의 첫 번째 검색은 매우 쉽게 이해할 수있는 알고리즘입니다. 궁금한 점이 있으면 책이 잘 작동하지 않을 경우 도와 드릴 수 있습니다. –
감사합니다. 설명이 도움이되었습니다. – Jason