📄 landmine.cpp
字号:
if(nRoundMine1!=-1)
{
aMine[nTop] = nRoundMine1;
nTop = (nTop+1)%500;
nRoundMine1 = GetTop(nRoundMine);
}
nRoundMine1 = GetBot(nRoundMine);
if(nRoundMine1!=-1)
{
aMine[nTop] = nRoundMine1;
nTop = (nTop+1)%500;
nRoundMine1 = GetTop(nRoundMine);
}
}
nRoundMine = GetRight(nCurrent);
if(nRoundMine!=-1)
{
aMine[nTop] = nRoundMine;
nTop = (nTop+1)%500;
nRoundMine1 = GetTop(nRoundMine);
if(nRoundMine1!=-1)
{
aMine[nTop] = nRoundMine1;
nTop = (nTop+1)%500;
nRoundMine1 = GetTop(nRoundMine);
}
nRoundMine1 = GetBot(nRoundMine);
if(nRoundMine1!=-1)
{
aMine[nTop] = nRoundMine1;
nTop = (nTop+1)%500;
nRoundMine1 = GetTop(nRoundMine);
}
}
nRoundMine = GetTop(nCurrent);
if(nRoundMine!=-1)
{
aMine[nTop] = nRoundMine;
nTop = (nTop+1)%500;
}
nRoundMine = GetBot(nCurrent);
if(nRoundMine!=-1)
{
aMine[nTop] = nRoundMine;
nTop = (nTop+1)%500;
}
break;
case 1:
break;
case -1:
return FALSE; // fail
}
}
return TRUE;
}
BOOL CLandMine::IsSuccess()
{
int nI,nStatus;
for(nI=0;nI<m_nRow*m_nCol;nI++)
{
nStatus = m_aLandMine[nI]->GetStatus();
if(nStatus != MS_OPEN)
{
if(!(nStatus==MS_FLAG && m_aLandMine[nI]->GetMineNum()==-1))
return 0; // not finish
}
}
return 1; // success
}
void CLandMine::MouseMove(CPoint point,int bBothDown)
{
int nCol=(point.x-m_nX)/16;
int nRow=(point.y-m_nY)/16;
int nCurMine = nCol+nRow*m_nCol;
if(nRow>=m_nRow || nCol>=m_nCol || point.x<m_nX || point.y<m_nY)
{
nCurMine = -1;
}
if(bBothDown==0)
{
if (m_nOldMine != nCurMine)
{
if (m_nOldMine>=0)
m_aLandMine[m_nOldMine]->ButtonDown(0);
if (nCurMine>=0)
{
m_aLandMine[nCurMine]->ButtonDown(1);
}
m_nOldMine = nCurMine;
}
}
else
if(bBothDown==2)
{
if (m_nOldMine != nCurMine)
{
int aOldMineTest[9],nOldMineTest=m_nMineTest;
int nI,nJ;
for(nI=0;nI<m_nMineTest;nI++)
{
aOldMineTest[nI] = m_aMineTest[nI];
}
if(nCurMine>=0)
{
BOOL bFound;
RndBtShdDn(nCurMine);
for(nI=0;nI<m_nMineTest;nI++)
{
bFound = FALSE;
for(nJ=0;nJ<nOldMineTest;nJ++)
{
if(m_aMineTest[nI] <= aOldMineTest[nJ])
{
if(m_aMineTest[nI] == aOldMineTest[nJ])
{
aOldMineTest[nJ] = -1;
bFound = TRUE;
}
break;
}
}
if(!bFound)
m_aLandMine[m_aMineTest[nI]]->ButtonDown(1);
};
}
else
m_nMineTest = 0;
if(m_nOldMine>=0)
{
for(nI=0;nI<nOldMineTest;nI++)
{
if(aOldMineTest[nI] != -1)
m_aLandMine[aOldMineTest[nI]]->ButtonDown(0);
}
}
m_nOldMine = nCurMine;
}
}
}
void CLandMine::BothButtonDown(CPoint point)
{
int nCol=(point.x-m_nX)/16;
int nRow=(point.y-m_nY)/16;
int nCurMine = nCol+nRow*m_nCol;
if (nRow >= m_nRow || nCol>=m_nCol || point.x<m_nX || point.y<m_nY )
return;
if(nCol<m_nCol && nRow<m_nRow)
{
RndBtShdDn(nCurMine);
if(m_nMineTest>0)
{
int nI;
for(nI=0;nI<m_nMineTest;nI++)
{
m_aLandMine[m_aMineTest[nI]]->ButtonDown(1);
}
}
m_nOldMine = nCurMine;
}
else
m_nOldMine = -1;
}
int CLandMine::BothButtonUp(CPoint point)
{
int nCol=(point.x-m_nX)/16;
int nRow=(point.y-m_nY)/16;
int nCurMine = nCol+nRow*m_nCol;
if (nRow >= m_nRow || nCol>=m_nCol || point.x<m_nX || point.y<m_nY )
return 0;
if (m_aLandMine[nCurMine]->GetStatus()==MS_OPEN)
{
int nMineRound,nMineRound1,nMineLeft=0,nNotOpen=0;
int aMineWillOpen[8];
nMineRound = GetLeft(nCurMine);
if(nMineRound>=0)
{
if(m_aLandMine[nMineRound]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound;
nMineRound1 = GetTop(nMineRound);
if(nMineRound1>=0)
{
if(m_aLandMine[nMineRound1]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound1;
}
nMineRound1 = GetBot(nMineRound);
if(nMineRound1>=0)
{
if(m_aLandMine[nMineRound1]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound1;
}
}
nMineRound = GetRight(nCurMine);
if(nMineRound>=0)
{
if(m_aLandMine[nMineRound]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound;
nMineRound1 = GetTop(nMineRound);
if(nMineRound1>=0)
{
if(m_aLandMine[nMineRound1]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound1;
}
nMineRound1 = GetBot(nMineRound);
if(nMineRound1>=0)
{
if(m_aLandMine[nMineRound1]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound1;
}
}
nMineRound = GetTop(nCurMine);
if(nMineRound>=0)
{
if(nMineRound>=0 && m_aLandMine[nMineRound]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound;
}
nMineRound = GetBot(nCurMine);
if(nMineRound>=0)
{
if(nMineRound>=0 && m_aLandMine[nMineRound]->GetStatus()==MS_FLAG)
nMineLeft++;
aMineWillOpen[nNotOpen++] = nMineRound;
}
if (nMineLeft>=m_aLandMine[nCurMine]->GetMineNum())
{
int nI,nStatus;
for(nI=0;nI<nNotOpen;nI++)
{
nStatus = OpenMine(aMineWillOpen[nI]);
if(nStatus==FALSE)
{
int nI;
for(nI=0;nI<m_nRow*m_nCol;nI++)
{
if(m_aLandMine[nI]->GetMineNum() == -1)
m_aLandMine[nI]->DrawItem(TRUE);
if(m_aLandMine[nI]->GetStatus() == MS_FLAG)
m_aLandMine[nI]->DrawItem(TRUE);
}
return -1;
}
}
}
else
{
int nI;
for(nI=0;nI<m_nMineTest;nI++)
{
m_aLandMine[m_aMineTest[nI]]->ButtonDown(0);
}
}
}
else
{
int nI;
for(nI=0;nI<m_nMineTest;nI++)
{
m_aLandMine[m_aMineTest[nI]]->ButtonDown(0);
}
}
return 0;
}
int CLandMine::RButtonDown(CPoint point)
{
int nCol=(point.x-m_nX)/16;
int nRow=(point.y-m_nY)/16;
int nCurMine = nCol+nRow*m_nCol;
if (nRow >= m_nRow || nCol>=m_nCol || point.x<m_nX || point.y<m_nY )
return 0;
if(m_aLandMine[nCurMine]->GetStatus() != MS_OPEN)
{
MINESTATUS nStatus;
nStatus = m_aLandMine[nCurMine]->GetStatus();
switch(nStatus)
{
case MS_FLAG:
m_aLandMine[nCurMine]->SetStatus(MS_QUEST);
m_aLandMine[nCurMine]->DrawItem(FALSE);
return 1;
case MS_QUEST:
m_aLandMine[nCurMine]->SetStatus(MS_NORMAL);
m_aLandMine[nCurMine]->DrawItem(FALSE);
return 0;
case MS_NORMAL:
m_aLandMine[nCurMine]->SetStatus(MS_FLAG);
m_aLandMine[nCurMine]->DrawItem(FALSE);
return -1;
}
}
return 0;
}
void CLandMine::RndBtShdDn(int nCurMine)
{
m_nMineTest = 0;
int nMineRound,nMineRound1,nMineRound2;
nMineRound1 = GetLeft(nCurMine);
nMineRound2 = GetRight(nCurMine);
if(nMineRound1>=0)
{
nMineRound = GetTop(nMineRound1);
if(nMineRound>=0 && (m_aLandMine[nMineRound]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound]->GetStatus()==MS_QUEST))
{
m_aMineTest[m_nMineTest++] = nMineRound; //left top
}
}
nMineRound = GetTop(nCurMine);
if(nMineRound>=0 && (m_aLandMine[nMineRound]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound]->GetStatus()==MS_QUEST))
{
m_aMineTest[m_nMineTest++] = nMineRound; //top
}
if(nMineRound2>=0)
{
nMineRound = GetTop(nMineRound2);
if(nMineRound>=0 && (m_aLandMine[nMineRound]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound]->GetStatus()==MS_QUEST))
{
m_aMineTest[m_nMineTest++] = nMineRound; //right top
}
}
if(nMineRound1>=0 && (m_aLandMine[nMineRound1]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound1]->GetStatus()==MS_QUEST))
m_aMineTest[m_nMineTest++] = nMineRound1; //left
if(m_aLandMine[nCurMine]->GetStatus() == MS_NORMAL ||m_aLandMine[nCurMine]->GetStatus() == MS_QUEST)
m_aMineTest[m_nMineTest++] = nCurMine; //current
if(nMineRound2>=0 && (m_aLandMine[nMineRound2]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound2]->GetStatus()==MS_QUEST))
m_aMineTest[m_nMineTest++] = nMineRound2; //right
if(nMineRound1>=0)
{
nMineRound = GetBot(nMineRound1);
if(nMineRound>=0 && (m_aLandMine[nMineRound]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound]->GetStatus()==MS_QUEST))
{
m_aMineTest[m_nMineTest++] = nMineRound; //left bot
}
}
nMineRound = GetBot(nCurMine);
if(nMineRound>=0 && (m_aLandMine[nMineRound]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound]->GetStatus()==MS_QUEST))
{
m_aMineTest[m_nMineTest++] = nMineRound; //bot
}
if(nMineRound2>=0)
{
nMineRound = GetBot(nMineRound2);
if(nMineRound>=0 && (m_aLandMine[nMineRound]->GetStatus()==MS_NORMAL || m_aLandMine[nMineRound]->GetStatus()==MS_QUEST))
{
m_aMineTest[m_nMineTest++] = nMineRound; //right bot
}
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -