📄 game_yyllkview.cpp
字号:
}
//Y直连方式
else if(y1==y2)
{
if(Y1_Link_Y2(x1,x2,y1))
return TRUE;
}
//一个转弯直角的联通方式
if(OneCornerLink(x1,y1,x2,y2))
{
return TRUE;
}
//两个转弯直角的联通方式
else if(TwoCornerLink(x1,y1,x2,y2))
{
return TRUE;
}
return FALSE;
}
//X方式直连
BOOL CGame_YYLLKView::X1_Link_X2(int x, int y1, int y2)
{
//保证y1的值小于y2
if(y1>y2)
{
//数据交换
int n=y1;
y1=y2;
y2=n;
}
//直通
for(int i=y1+1;i<=y2;i++)
{
if(i==y2)
return TRUE;
if(m_map[i*m_nCol+x]!=BLANK_STATE)
break;
}
//左通
if(XThrough(x-1,y1,FALSE)&&XThrough(x-1,y2,FALSE))
return TRUE;
//右通
if(XThrough(x+1,y1,TRUE)&&XThrough(x+1,y2,TRUE))
return TRUE;
return FALSE;
}
//Y方式直连
BOOL CGame_YYLLKView::Y1_Link_Y2(int x1, int x2, int y)
{
if(x1>x2)
{
int x=x1;
x1=x2;
x2=x;
}
//直通
for(int i=x1+1;i<=x2;i++)
{
if(i==x2)
return TRUE;
if(m_map[y*m_nCol+i]!=BLANK_STATE)
break;
}
//上通
if(YThrough(x1,y-1,FALSE)&&YThrough(x2,y-1,FALSE))
return TRUE;
//下通
if(YThrough(x1,y+1,TRUE)&&YThrough(x2,y+1,TRUE))
return TRUE;
return FALSE;
}
// 水平方向是否同一直线通
BOOL CGame_YYLLKView::LineX(int x, int y1, int y2)
{
if(y1>y2)
{
int y=y1;
y1=y2;
y2=y;
}
for(int y=y1;y<=y2;y++)
{
if(m_map[y*m_nCol+x]!=BLANK_STATE)
return FALSE;
if(y==y2)
return TRUE;
}
return FALSE;
}
// 垂直方向是否同一直线通
BOOL CGame_YYLLKView::LineY(int x1, int x2, int y)
{
if(x1>x2)
{
int x=x1;
x1=x2;
x2=x;
}
for(int x=x1;x<=x2;x++)
{
if(m_map[y*m_nCol+x]!=BLANK_STATE)
return FALSE;
if(x==x2)
return TRUE;
}
return FALSE;
}
// 有1直角接口连通
BOOL CGame_YYLLKView::OneCornerLink(int x1, int y1, int x2, int y2)
{
if(x1>x2)
{
int n=x1;
x1=x2;
x2=n;
n=y1;
y1=y2;
y2=n;
}
if(y2<y1)
{
if(LineY(x1+1,x2,y1)&&LineX(x2,y1,y2+1))
return TRUE;
if(LineY(x2-1,x1,y2)&&LineX(x1,y2,y1-1))
return TRUE;
return FALSE;
}
else
{
if(LineY(x1+1,x2,y1)&&LineX(x2,y1,y2-1))
return TRUE;
if(LineY(x2-1,x1,y2)&&LineX(x1,y2,y1+1))
return TRUE;
return FALSE;
}
return FALSE;
}
// 2直角接口连通
BOOL CGame_YYLLKView::TwoCornerLink(int x1, int y1, int x2, int y2)
{
if(x1>x2)
{
int n=x1;
x1=x2;
x2=n;
n=y1;
y1=y2;
y2=n;
}
//右通
if(XThrough(x1+1,y1,TRUE)&&XThrough(x2+1,y2,TRUE))
return TRUE;
//左通
if(XThrough(x1-1,y1,FALSE)&&XThrough(x2-1,y2,FALSE))
return TRUE;
//上通
if(YThrough(x1,y1-1,FALSE)&&YThrough(x2,y2-1,FALSE))
return TRUE;
//下通
if(YThrough(x1,y1+1,TRUE)&&YThrough(x2,y2+1,TRUE))
return TRUE;
//右
for(int x=x1+1;x<m_nCol;x++)
{
if(m_map[y1*m_nCol+x]>-1)
break;
if(OneCornerLink(x,y1,x2,y2))
return TRUE;
}
//左
for(x=x1-1;x>-1;x--)
{
if(m_map[y1*m_nCol+x]!=BLANK_STATE)
break;
if(OneCornerLink(x,y1,x2,y2))
return TRUE;
}
//上
for(int y=y1-1;y>-1;y--)
{
if(m_map[y*m_nCol+x1]!=BLANK_STATE)
break;
if(OneCornerLink(x1,y,x2,y2))
return TRUE;
}
//下
for(y=y1+1;y<m_nRow;y++)
{
if(m_map[y*m_nCol+x1]!=BLANK_STATE)
break;
if(OneCornerLink(x1,y,x2,y2))
return TRUE;
}
return FALSE;
}
BOOL CGame_YYLLKView::XThrough(int x, int y, BOOL bAdd)
{
if(bAdd)
{
for(int i=x;i<m_nCol;i++)
if(m_map[y*m_nCol+i]!=BLANK_STATE)
return FALSE;
}
else
{
for(int i=0;i<=x;i++)
if(m_map[y*m_nCol+i]!=BLANK_STATE)
return FALSE;
}
return TRUE;
}
BOOL CGame_YYLLKView::YThrough(int x, int y, BOOL bAdd)
{
if(bAdd)
{
for(int i=y;i<m_nRow;i++)
if(m_map[i*m_nCol+x]!=BLANK_STATE)
return FALSE;
}
else
{
for(int i=0;i<=y;i++)
if(m_map[i*m_nCol+x]!=BLANK_STATE)
return FALSE;
}
return TRUE;
}
// 检测是否已经赢得了游戏
BOOL CGame_YYLLKView::IsWin()
{
//检测所有是否尚有非未被消除的方块(非BLANK_STATE状态)
for(int i=0;i<m_nRow*m_nCol;i++)
{
if(m_map[i] != BLANK_STATE)
{
return FALSE;
}
}
return TRUE;
}
//游戏暂停
void CGame_YYLLKView::OnPause()
{
m_bGamePaush = TRUE;
AfxMessageBox("休息一会~继续游戏请按确定!");
}
//退出系统
void CGame_YYLLKView::OnExit()
{
PostQuitMessage(0);
}
//游戏结束
void CGame_YYLLKView::OnEnd()
{
m_bGameEnd = TRUE;
for(int i=0;i<m_nRow;i++)
for(int j=0;j<m_nCol;j++)
m_map[i*m_nCol+j]=BLANK_STATE;
Invalidate(FALSE);
/*CRect rect(m_iStartY ,m_iStartX, m_iStartY + 499, m_iStartX +415 );
InvalidateRect(&rect);
m_bGamePaush = FALSE; //清除游戏暂停状态 */
}
// 用菜单设置游戏级别
void CGame_YYLLKView::OnUpdateNum(CCmdUI* pCmdUI)
{
if (m_bGameEnd)
pCmdUI -> Enable(TRUE);
else
pCmdUI -> Enable(FALSE);
if (m_iLevel == 0)
pCmdUI -> SetCheck(TRUE);
else
pCmdUI -> SetCheck(FALSE);
}
void CGame_YYLLKView::OnUpdateAnimal(CCmdUI* pCmdUI)
{
if (m_bGameEnd)
pCmdUI -> Enable(TRUE);
else
pCmdUI -> Enable(FALSE);
if (m_iLevel == 1)
pCmdUI -> SetCheck(TRUE);
else
pCmdUI -> SetCheck(FALSE);
}
void CGame_YYLLKView::OnUpdatePlant(CCmdUI* pCmdUI)
{
if (m_bGameEnd)
pCmdUI -> Enable(TRUE);
else
pCmdUI -> Enable(FALSE);
if (m_iLevel == 2)
pCmdUI -> SetCheck(TRUE);
else
pCmdUI -> SetCheck(FALSE);
}
void CGame_YYLLKView::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
CClientDC pDC(this);
if(m_b_GAME_STATE == true)//是否启动欢迎界面
{
//m_pbmpwelcome->Draw(mdc->m_hDC,0,0,m_iClientWidth,m_iClientHeight,0,0);
//DrawGame(&m_memDC);
Sleep(3000);//延时
m_b_GAME_STATE = false;//将启动欢迎界面状态置为:否
}
CView::OnTimer(nIDEvent);
}
//如果游戏开始,则此[开始游戏]按钮被屏蔽
void CGame_YYLLKView::OnUpdateStart(CCmdUI* pCmdUI)
{
if (m_bGameEnd || m_bGamePaush)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//如游戏开始,则[游戏暂停]按钮开启
void CGame_YYLLKView::OnUpdatePause(CCmdUI* pCmdUI)
{
if (!m_bGameEnd)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//如果游戏开始,则此[游戏结束]按钮被开启
void CGame_YYLLKView::OnUpdateEnd(CCmdUI* pCmdUI)
{
if (!m_bGameEnd)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//如果游戏开始,则此[游戏设置]按钮被屏蔽
void CGame_YYLLKView::OnUpdateSet(CCmdUI* pCmdUI)
{
if (m_bGameEnd)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//如果游戏开始,则此[退出系统]按钮被屏蔽
void CGame_YYLLKView::OnUpdateExit(CCmdUI* pCmdUI)
{
if (m_bGameEnd)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
//如果游戏开始,则此[关于]按钮被屏蔽
void CGame_YYLLKView::OnUpdateAppAbout(CCmdUI* pCmdUI)
{
if (m_bGameEnd)
pCmdUI->Enable(TRUE);
else
pCmdUI->Enable(FALSE);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -