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

📄 path.cpp

📁 决战帝王1.5武神降临对喜爱决战的玩家共享研究用
💻 CPP
📖 第 1 页 / 共 3 页
字号:
				PathList[PathListNum].y = y + j;
				if(Ln > 0) { j; i -= 2; }
				else  { j++; i--; }
				Ln--;
				loop--;
				PathListNum++;
			}while(loop > 0);
			break;

		case NE:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y + j;
				if(Ln > 0) { j; i += 2; }
				else { j--; i++; }
				Ln--;
				loop--;
				PathListNum++;
			}while(loop > 0);
			break;
	}
	return PathListNum-1;
}


int CPath::PutYPath(PATH *PathList, int x, int y, int ax, int ay)
{
	int PathListNum = 0;
	int index = CheckDirection(ax, ay);
	int i = 0;
	int j = 0;
	int test = abs(ax);
	int sum = abs(ay);
	int loop = (sum + test)/2;
	int Ln = abs(test - sum)/2;

	switch(index)
	{
		case OE:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y;
				i += 2;
				test -= 1;
				PathListNum++;
			}while(test > 0);
			break;
		
		case OW:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y;
				i -= 2;
				test -= 1;
				PathListNum++;
			}while(test > 0);
			break;

		case ON:
			do
			{
				PathList[PathListNum].x = x;
				PathList[PathListNum].y = y + j;
				j -= 2;
				sum -= 1;
				PathListNum++;
			}while(sum > 0);
			break;

		case OS:
			do
			{
				PathList[PathListNum].x = x;
				PathList[PathListNum].y = y + j;
				j += 2;
				sum -= 1;
				PathListNum++;
			}while(sum > 0);
			break;


		case ES:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y + j;
				if(Ln > 0) { i; j += 2; }
				else  { i++; j++; }
				Ln--; loop--;
				PathListNum++;
			}while(loop > 0);
			break;

		case WN:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y + j;
				if(Ln > 0) { i; j -= 2; }
				else  { i--; j--; }
				Ln--;	loop--;
				PathListNum++;
			}while(loop > 0);
			break;


		case SW:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y + j;
				if(Ln > 0) { i; j += 2; }
				else { i--; j++; }
				Ln--; loop--;
				PathListNum++;
			}while(loop > 0);
			break;

		case NE:
			do
			{
				PathList[PathListNum].x = x + i;
				PathList[PathListNum].y = y + j;
				if(Ln > 0) { i; j -= 2; }
				else { i++;j--; }
				Ln--;
				loop--;
				PathListNum++;
			}while(loop > 0);
			break;
	}
	return PathListNum-1;
}

void CPath::PutXPath(POS *str, int x, int y)
{
	int index = CheckDirection(x, y);
	int i = 0;
	int j = 0;
	int test = abs(y);
	int sum = abs(x);
	int loop = (test + sum)/2;
	int Ln = abs(test - sum)/2;

	switch(index)
	{
		case OE:
			do
			{
				i += 2;
				sum -= 2;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y;
				m_PathListNum++;
			}while(sum > 0);
			break;
		
		case OW:
			do
			{
				i -= 2;
				sum -= 2;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y;
				m_PathListNum++;
			}while(sum > 0);
			break;

		case ON:
			do
			{
				j -= 2;
				test -= 2;
				m_PathList[m_PathListNum].x = str->x;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(test > 0);
			break;

		case OS:
			do
			{
				j += 2;
				test -= 2;
				m_PathList[m_PathListNum].x = str->x;
				m_PathList[m_PathListNum].y = str->y + j;					
				m_PathListNum++;
			}while(test > 0);
			break;


		case ES:
			do
			{
				if(Ln > 0) { j; i += 2; }
				else  { j++; i++; }
				Ln -= 1;
				loop--;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;

		case WN:
			do
			{
				if(Ln > 0) { j; i -= 2; }
				else  { j--; i--; }
				Ln -= 1;
				loop -= 1;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;


		case SW:
			do
			{
				if(Ln > 0) { j; i -= 2; }
				else  { j++; i--; }
				Ln -= 1;
				loop -= 1;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;

		case NE:
			do
			{
				if(Ln > 0) { j; i += 2; }
				else  { j--; i++; }
				Ln -= 1;
				loop -= 1;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;
	}
}


void CPath::PutYPath(POS *str, int x, int y)
{
	int index = CheckDirection(x, y);
	int i = 0;
	int j = 0;
	int test = abs(x);
	int sum = abs(y);
	int loop = (sum + test)/2;
	int Ln = abs(test - sum)/2;

	switch(index)
	{
		case OE:
			do
			{
				i += 2;
				test -= 2;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y;
				m_PathListNum++;
			}while(test > 0);
			break;
		
		case OW:
			do
			{
				i -= 2;
				test -= 2;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y;
				m_PathListNum++;
			}while(test > 0);
			break;

		case ON:
			do
			{
				j -= 2;
				sum -= 2;
				m_PathList[m_PathListNum].x = str->x;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(sum > 0);
			break;

		case OS:
			do
			{
				j += 2;
				sum -= 2;
				m_PathList[m_PathListNum].x = str->x;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(sum > 0);
			break;


		case ES:
			do
			{
				if(Ln > 0) { i; j += 2; }
				else  { i++; j++; }
				Ln -= 1;
				loop--;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;

		case WN:
			do
			{
				if(Ln > 0)  { i; j -= 2; }
				else  { i--; j--; }
				Ln -= 1;
				loop--;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;


		case SW:
			do
			{
				if(Ln > 0) { i; j += 2; }
				else  { i--; j++; }
				Ln -= 1;
				loop--;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;

		case NE:
			do
			{
				if(Ln > 0) { i; j -= 2; }
				else  { i++; j--; } 
				Ln -= 1;
				loop--;
				m_PathList[m_PathListNum].x = str->x + i;
				m_PathList[m_PathListNum].y = str->y + j;
				m_PathListNum++;
			}while(loop > 0);
			break;
	}
}


int CPath::Push(int num)
{
	m_StackNum++;

	if(m_StackNum > 8) return 0;

	m_Stack[m_StackNum] = num;

	return 1;
}

int CPath::Pop()
{
	if(m_StackNum < 0) return 0;
	else return m_Stack[m_StackNum--];
}

void CPath::QSort(PATH dist[], int n)
{
	int i, j;
	PATH key[1];
	PATH temp[1];
	int left = 0, right = n-1;

	Push(left);
	Push(right);

	while(m_StackNum >= 0)
	{
		right = Pop();
		left = Pop();

		if(right - left > 0)
		{
			key[0].dist = dist[left].dist; key[0].x = dist[left].x; key[0].y = dist[left].y;
			i = left;
			j = right+1;

			while(1)
			{
				while(dist[++i].dist < key[0].dist) { if(i >8) break; }
				while(dist[--j].dist > key[0].dist)
					;
				if(i >= j) break;

				temp[0].x = dist[i].x; temp[0].y = dist[i].y; temp[0].dist = dist[i].dist;
				dist[i].x = dist[j].x; dist[i].y = dist[j].y; dist[i].dist = dist[j].dist;
				dist[j].x = temp[0].x; dist[j].y = temp[0].y; dist[j].dist = temp[0].dist;
			}

			dist[left].x = dist[j].x; dist[left].y = dist[j].y; dist[left].dist = dist[j].dist;
			dist[j].dist = key[0].dist; dist[j].x = key[0].x; dist[j].y = key[0].y;

			Push(left);
			Push(j-1);
			Push(j+1);
			Push(right);
		}
	}
}

BOOL CPath::IsMovable(int x, int y)
// m_pMap 0 : 框流老荐 乐促. 1: 框流老荐 绝促.
{
	if(x < 0 || y < 0 || x >= m_nSizeX || y >= m_nSizeY) return FALSE;

	return (BOOL)!m_pTile[x][y].m_bMove;
}


void CPath::IsGhost(BOOL isDead)
{
	m_Ghost = isDead;
}

void CPath::InitNodePool()
{
	if(m_NodePool == NULL) return;
	_ASSERT(m_NodePool != NULL);

	for(int i = 0; i < MAX_NODE; i++)
	{
		m_NodePool[i].x 	  = 0;
		m_NodePool[i].y 	  = 0;
		m_NodePool[i].nFlag = FALSE;
		m_NodePool[i].Type  = -1;
		m_NodePool[i].next  = NULL;
		m_NodePool[i].prev  = NULL;
	}	
}

void CPath::DeleteNodePool()
{
	if(m_NodePool) delete []m_NodePool;
}

CPath::POS* CPath::GetNodePool()
{
	if(m_NodePool == NULL) return NULL;

	for(int i = 0; i < MAX_NODE; i++)
	{
		if(!m_NodePool[i].nFlag) 
		{
			m_NodePool[i].nFlag = TRUE;
			return &m_NodePool[i];	
		}
	}
	return NULL;
}

BOOL CPath::FreeNodePool(POS *Node)
{
	if(Node == NULL) FALSE;
	Node->x     = 0;
	Node->y     = 0;
	Node->nFlag = FALSE;
	Node->Type  = -1;
	Node->next  = NULL;
	Node->prev  = NULL;
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -