⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 path.cpp

📁 大家好!这是一个网络游戏源码
💻 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 + -