?? arsfield.cpp
字號:
#include "StdAfx.h"
#include "ARSField.h"
ARSField::ARSField()
{
m_iGroudSize = GROUND_DEFAULT_SIZE;
m_stSituation.ptThief.x = m_iGroudSize/2;
m_stSituation.ptThief.y = m_iGroudSize/2;
ARSPOINT ptTmp;
ptTmp.x = 1;ptTmp.y = 1;
m_stSituation.ptPloice.push_back(ptTmp);
ptTmp.x = 1;ptTmp.y = m_iGroudSize;
m_stSituation.ptPloice.push_back(ptTmp);
ptTmp.x = m_iGroudSize;ptTmp.y = 1;
m_stSituation.ptPloice.push_back(ptTmp);
ptTmp.x = m_iGroudSize;ptTmp.y = m_iGroudSize;
m_stSituation.ptPloice.push_back(ptTmp);
m_ThiefMenuDir = STILL;
}
ARSField::~ARSField()
{
m_stSituation.ptPloice.clear();
}
bool ARSField::IsArrest()
{
bool bFlag = false;
int i;
//左
if (m_stSituation.ptThief.x==1)
{
bFlag = true;
}
if (!bFlag)
{
for (i = 0;i<(int)m_stSituation.ptPloice.size();i++)
{
if (m_stSituation.ptThief.x-1 == m_stSituation.ptPloice[i].x
&&m_stSituation.ptThief.y == m_stSituation.ptPloice[i].y)
{
bFlag = true;
break;
}
}
}
if (!bFlag)
{
return false;
}
//右
bFlag = false;
if (m_stSituation.ptThief.x==m_iGroudSize)
{
bFlag = true;
}
if (!bFlag)
{
for (i = 0;i<(int)m_stSituation.ptPloice.size();i++)
{
if (m_stSituation.ptThief.x+1 == m_stSituation.ptPloice[i].x
&&m_stSituation.ptThief.y == m_stSituation.ptPloice[i].y)
{
bFlag = true;
break;
}
}
}
if (!bFlag)
{
return false;
}
//上
bFlag = false;
if (m_stSituation.ptThief.y==m_iGroudSize)
{
bFlag = true;
}
if (!bFlag)
{
for (i = 0;i<(int)m_stSituation.ptPloice.size();i++)
{
if (m_stSituation.ptThief.x == m_stSituation.ptPloice[i].x
&&m_stSituation.ptThief.y + 1== m_stSituation.ptPloice[i].y)
{
bFlag = true;
break;
}
}
}
if (!bFlag)
{
return false;
}
//下
bFlag = false;
if (m_stSituation.ptThief.y==1)
{
bFlag = true;
}
if (!bFlag)
{
for (i = 0;i<(int)m_stSituation.ptPloice.size();i++)
{
if (m_stSituation.ptThief.x == m_stSituation.ptPloice[i].x
&&m_stSituation.ptThief.y -1== m_stSituation.ptPloice[i].y)
{
bFlag = true;
break;
}
}
}
if (!bFlag)
{
return false;
}
return true;
}
bool ARSField::MoveOneStep(int iId,ARSPOINT & ptPrevious,MOVEDIRECTION direction)
{
ARSPOINT ptTmp;
ptTmp = ptPrevious;
switch(direction)
{
case DOWN:
ptTmp.y-=1;
break;
case LEFT:
ptTmp.x-=1;
break;
case STILL:
break;
case RIGHT:
ptTmp.x+=1;
break;
case UP:
ptTmp.y+=1;
break;
default:
break;
}
if (ptTmp.x<1)
ptTmp.x = 1;
if (ptTmp.x>m_iGroudSize)
ptTmp.x = m_iGroudSize;
if (ptTmp.y<1)
ptTmp.y = 1;
if (ptTmp.y>m_iGroudSize)
ptTmp.y = m_iGroudSize;
int i;
if (iId == 0)
{
for (i = 0;i<(int)m_stSituation.ptPloice.size();i++)
{
if (ptTmp.x == m_stSituation.ptPloice[i].x&&ptTmp.y == m_stSituation.ptPloice[i].y)
{
return false;
}
}
}
//避免警察重疊
if (iId > 0)
{
if (ptTmp.x == m_stSituation.ptThief.x&&ptTmp.y== m_stSituation.ptThief.y)
{
return false;
}
for (i = 0;i<(int)m_stSituation.ptPloice.size();i++)
{
if ((iId-1!=i)&&ptTmp.x == m_stSituation.ptPloice[i].x&&ptTmp.y == m_stSituation.ptPloice[i].y)
{
return false;
}
}
}
ptPrevious = ptTmp;
return true;
}
bool ARSField::ToArrest(CPoint *pPtPerson,const int * iPerStrategy,int iMaxNum)
{
m_stSituation.ptPloice.clear();
m_stSituation.ptThief.x = pPtPerson[0].x;
m_stSituation.ptThief.y = pPtPerson[0].y;
ARSPOINT tmpPoint;
for (int i = 1;i<iMaxNum;i++)
{
if (pPtPerson[i].x>0&&pPtPerson[i].y>0)
{
tmpPoint.x =pPtPerson[i].x;
tmpPoint.y =pPtPerson[i].y;
m_stSituation.ptPloice.push_back(tmpPoint);
}
}
ARSAction *pAction;
MOVEDIRECTION nextDirection = STILL;
//賊先動
m_stSituation.iID = 0;
if (iPerStrategy[0] == 0)
{
MoveOneStep(m_stSituation.iID,m_stSituation.ptThief,m_ThiefMenuDir);
pPtPerson[0].x = m_stSituation.ptThief.x;
pPtPerson[0].y = m_stSituation.ptThief.y;
}
else
{
pAction= ARSAction::GetTheAction(ARSAction::ms_dequeActionRegister[iPerStrategy[0]-1].name);
if (pAction)
{
pAction->ExecuteAction(m_stSituation,nextDirection);
}
MoveOneStep(m_stSituation.iID,m_stSituation.ptThief,nextDirection);
pPtPerson[0].x = m_stSituation.ptThief.x;
pPtPerson[0].y = m_stSituation.ptThief.y;
}
if (IsArrest())
{
return true;
}
int j = 0;
for (i = 1;i<iMaxNum;i++)
{
if (pPtPerson[i].x>0&&pPtPerson[i].y>0)
{
m_stSituation.iID = j+1;
pAction= ARSAction::GetTheAction(ARSAction::ms_dequeActionRegister[iPerStrategy[i]-1].name);
if (pAction)
{
pAction->ExecuteAction(m_stSituation,nextDirection);
}
MoveOneStep(m_stSituation.iID,m_stSituation.ptPloice[j],nextDirection);
pPtPerson[i].x = m_stSituation.ptPloice[j].x;
pPtPerson[i].y = m_stSituation.ptPloice[j].y;
j++;
}
if (IsArrest())
{
return true;
}
}
return false;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -