📄 path.cpp
字号:
#include "runner_game.h"
static NODE_SHARED node_list[STEP_LIMIT];
PATH_LINK *
SearchPath(UINT8 *block_buf , SINT16 width , SINT16 height , SINT16 sx , SINT16 sy , SINT16 tx , SINT16 ty)
{
if(block_buf==NULL) return NULL;
SINT16 off[8];
off[0] = width * (-1);
off[1] = width;
off[2] = - 1;
off[3] = 1;
off[4] = (width - 1) * (-1);
off[5] = width + 1;
off[6] = width - 1;
off[7] = (width + 1) * -1;
UINT8 prior[8];
prior[0] = 0;
prior[1] = 4;
prior[2] = 6;
prior[3] = 2;
prior[4] = 1;
prior[5] = 3;
prior[6] = 5;
prior[7] = 7;
UINT32 node_count = 0;
UINT32 current_node = 0;
UINT8 *target_ptr = block_buf + ty * width + tx;
node_list[0].buf_ptr = block_buf + sy * width + sx;
node_list[0].last_node_ptr = NULL;
UINT8 *last_buf_ptr , *new_buf_ptr;
PATH_LINK *path_link_ptr = NULL;
BOOL found_flag = FALSE;
long lMaxStep = (width - 1) * (height - 1);
if(lMaxStep>STEP_LIMIT) lMaxStep = STEP_LIMIT; //限制最大步数
while(!found_flag)
{
if(node_count>STEP_LIMIT) break;
if(current_node>node_count) break;
last_buf_ptr = node_list[current_node].buf_ptr;
for(register d = 0 ; d < 8 ; d++)
{
new_buf_ptr = last_buf_ptr + off[d];
if(*new_buf_ptr==0)
{
*new_buf_ptr = 1;
node_count++;
node_list[node_count].buf_ptr = new_buf_ptr;
node_list[node_count].dire = d;
node_list[node_count].last_node_ptr = &node_list[current_node];
if(new_buf_ptr==target_ptr)
{
NODE_SHARED *node_ptr = &node_list[node_count];
while(node_ptr->last_node_ptr)
{
PATH_LINK *new_path; GetMemory(new_path , PATH_LINK , 1);
new_path->dire = prior[node_ptr->dire];
new_path->next_path_ptr = path_link_ptr;
path_link_ptr = new_path;
node_ptr = node_ptr->last_node_ptr;
}
found_flag = TRUE;
break;
}
}
}
current_node++;
}
//MSG_NUM(node_count);
if(found_flag)
{
return path_link_ptr;
}
return NULL;
}
VOID DeletePathLink(PATH_LINK **ppPathLink)
{
PATH_LINK *pPathLink = *ppPathLink;
while(pPathLink!=NULL)
{
PATH_LINK *pNextPath = pPathLink->next_path_ptr;
FreeMemory(pPathLink);
pPathLink = pNextPath;
}
*ppPathLink = NULL;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -