📄 path.cpp
字号:
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 + -