📄 blockview.cpp
字号:
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[1].x;
}
ShowSquare();
pDoc->m_iState=1;
}
else
{
if(pDoc->m_ptCurrentPos[0].x<=0||pDoc->m_ptCurrentPos[0].x>=10)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[1].y][pDoc->m_ptCurrentPos[1].x+1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[1].y][pDoc->m_ptCurrentPos[1].x+2]==1))
return;
HideSquare();
for(i=0;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[1].y;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[1].x+i-1;
}
ShowSquare();
pDoc->m_iState=0;
}
break;
case 1:
switch(pDoc->m_iState)
{
case 0:
if(pDoc->m_ptCurrentPos[2].y==19)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x-1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y-i+2;
}
pDoc->m_ptCurrentPos[0].y+=2;
ShowSquare();
pDoc->m_iState=1;
break;
case 1:
if(pDoc->m_ptCurrentPos[2].x==11)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x-1]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x+1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x+1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x-i+2;
}
pDoc->m_ptCurrentPos[0].x+=2;
ShowSquare();
pDoc->m_iState=2;
break;
case 2:
if(pDoc->m_ptCurrentPos[2].y==0)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x+1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y+i-2;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x;
}
pDoc->m_ptCurrentPos[0].y-=2;
ShowSquare();
pDoc->m_iState=3;
break;
case 3:
if(pDoc->m_ptCurrentPos[2].x==0)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x+1]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x-1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x-1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x+i-2;
}
pDoc->m_ptCurrentPos[0].x-=2;
ShowSquare();
pDoc->m_iState=0;
break;
}
break;
case 2:////////////////////////////////////////////////// @
switch(pDoc->m_iState) //@@@
{
case 0:
if(pDoc->m_ptCurrentPos[2].y==19)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x+1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y+i-2;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x;
}
pDoc->m_ptCurrentPos[0].y+=2;
ShowSquare();
pDoc->m_iState=1;
break;
case 1:
if(pDoc->m_ptCurrentPos[2].x==0)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x+1]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x-1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x-1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x-i+2;
}
pDoc->m_ptCurrentPos[0].x-=2;
ShowSquare();
pDoc->m_iState=2;
break;
case 2:
if(pDoc->m_ptCurrentPos[2].y==0)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x-1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y-i+2;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x;
}
pDoc->m_ptCurrentPos[0].y-=2;
ShowSquare();
pDoc->m_iState=3;
break;
case 3:
if(pDoc->m_ptCurrentPos[2].x==11)
return;
if(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x-1]==1)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x+1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x+1]==1))
return;
HideSquare();
for(i=1;i<4;i++)
{
pDoc->m_ptCurrentPos[i].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[i].x=pDoc->m_ptCurrentPos[2].x+i-2;
}
pDoc->m_ptCurrentPos[0].x+=2;
ShowSquare();
pDoc->m_iState=0;
break;
}
break;
case 3:
if(pDoc->m_iState==0)
{
if(pDoc->m_ptCurrentPos[1].y==0)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[1].y][pDoc->m_ptCurrentPos[1].x+1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[1].y-1][pDoc->m_ptCurrentPos[1].x+1]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[0].x=pDoc->m_ptCurrentPos[1].x;
pDoc->m_ptCurrentPos[0].y=pDoc->m_ptCurrentPos[1].y+1;
pDoc->m_ptCurrentPos[2].x=pDoc->m_ptCurrentPos[1].x+1;
pDoc->m_ptCurrentPos[2].y=pDoc->m_ptCurrentPos[1].y;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[1].x+1;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[1].y-1;
ShowSquare();
pDoc->m_iState=1;
}
else
{
if(pDoc->m_ptCurrentPos[1].x==0)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[1].y][pDoc->m_ptCurrentPos[1].x-1]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[1].y+1][pDoc->m_ptCurrentPos[1].x+1]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[0].x=pDoc->m_ptCurrentPos[1].x-1;
pDoc->m_ptCurrentPos[0].y=pDoc->m_ptCurrentPos[1].y;
pDoc->m_ptCurrentPos[2].x=pDoc->m_ptCurrentPos[1].x;
pDoc->m_ptCurrentPos[2].y=pDoc->m_ptCurrentPos[1].y+1;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[1].x+1;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[1].y+1;
ShowSquare();
pDoc->m_iState=0;
}
break;
case 4:
if(pDoc->m_iState==0)
{
if(pDoc->m_ptCurrentPos[0].y==0)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[0].y-1][pDoc->m_ptCurrentPos[0].x]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[0].y+1][pDoc->m_ptCurrentPos[0].x+1]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[1].x=pDoc->m_ptCurrentPos[0].x;
pDoc->m_ptCurrentPos[1].y=pDoc->m_ptCurrentPos[0].y-1;
pDoc->m_ptCurrentPos[2].x=pDoc->m_ptCurrentPos[0].x+1;
pDoc->m_ptCurrentPos[2].y=pDoc->m_ptCurrentPos[0].y+1;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[0].x+1;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[0].y;
ShowSquare();
pDoc->m_iState=1;
}
else
{
if(pDoc->m_ptCurrentPos[0].x==0)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[0].y+1][pDoc->m_ptCurrentPos[0].x]==1)
||(pDoc->m_iMap[pDoc->m_ptCurrentPos[0].y+1][pDoc->m_ptCurrentPos[0].x-1]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[1].x=pDoc->m_ptCurrentPos[0].x+1;
pDoc->m_ptCurrentPos[1].y=pDoc->m_ptCurrentPos[0].y;
pDoc->m_ptCurrentPos[2].x=pDoc->m_ptCurrentPos[0].x-1;
pDoc->m_ptCurrentPos[2].y=pDoc->m_ptCurrentPos[0].y+1;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[0].x;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[0].y+1;
ShowSquare();
pDoc->m_iState=0;
}
break;
case 5:
switch(pDoc->m_iState)
{
case 0:
if(pDoc->m_ptCurrentPos[2].y==19)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[0].x=pDoc->m_ptCurrentPos[2].x-1;
pDoc->m_ptCurrentPos[0].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[1].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[1].y=pDoc->m_ptCurrentPos[2].y+1;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[2].y-1;
ShowSquare();
pDoc->m_iState=1;
break;
case 1:
if(pDoc->m_ptCurrentPos[2].x==11)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y][pDoc->m_ptCurrentPos[2].x+1]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[0].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[0].y=pDoc->m_ptCurrentPos[2].y+1;
pDoc->m_ptCurrentPos[1].x=pDoc->m_ptCurrentPos[2].x+1;
pDoc->m_ptCurrentPos[1].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[2].x-1;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[2].y;
ShowSquare();
pDoc->m_iState=2;
break;
case 2:
if(pDoc->m_ptCurrentPos[2].y==0)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y+1][pDoc->m_ptCurrentPos[2].x]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[0].x=pDoc->m_ptCurrentPos[2].x+1;
pDoc->m_ptCurrentPos[0].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[1].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[1].y=pDoc->m_ptCurrentPos[2].y-1;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[2].y+1;
ShowSquare();
pDoc->m_iState=3;
break;
case 3:
if(pDoc->m_ptCurrentPos[2].x==0)
return;
if((pDoc->m_iMap[pDoc->m_ptCurrentPos[2].y-1][pDoc->m_ptCurrentPos[2].x]==1))
return;
HideSquare();
pDoc->m_ptCurrentPos[0].x=pDoc->m_ptCurrentPos[2].x;
pDoc->m_ptCurrentPos[0].y=pDoc->m_ptCurrentPos[2].y-1;
pDoc->m_ptCurrentPos[1].x=pDoc->m_ptCurrentPos[2].x-1;
pDoc->m_ptCurrentPos[1].y=pDoc->m_ptCurrentPos[2].y;
pDoc->m_ptCurrentPos[3].x=pDoc->m_ptCurrentPos[2].x+1;
pDoc->m_ptCurrentPos[3].y=pDoc->m_ptCurrentPos[2].y;
ShowSquare();
pDoc->m_iState=0;
break;
}
break;
case 6:
break;
}
}
void CBlockView::OnBkcolor()
{
// TODO: Add your command handler code here
CColorDialog clrDlg;
CBlockDoc *pDoc=GetDocument();
if(m_bRunning)
{
KillTimer(TIMER_ID);
if(clrDlg.DoModal()==IDOK)
{
pDoc->m_clrBack=clrDlg.GetColor();
Invalidate();
}
SetTimer(TIMER_ID,uInverval[pDoc->m_iLevel],NULL);
Invalidate();
}
else
if(clrDlg.DoModal()==IDOK)
{
pDoc->m_clrBack=clrDlg.GetColor();
Invalidate();
}
}
void CBlockView::OnBlockcolor()
{
CColorDialog clrDlg;
CBlockDoc *pDoc=GetDocument();
if(m_bRunning)
{
KillTimer(TIMER_ID);
if(clrDlg.DoModal()==IDOK)
{
pDoc->m_clrBlock=clrDlg.GetColor();
Invalidate();
}
SetTimer(TIMER_ID,uInverval[pDoc->m_iLevel],NULL);
Invalidate();
}
else
if(clrDlg.DoModal()==IDOK)
{
pDoc->m_clrBlock=clrDlg.GetColor();
Invalidate();
}
}
void CBlockView::ShowPreView()
{
POINT ptStart={250,50};
CRect rect;
int iWidth=30;
CClientDC dc(this);
CBlockDoc *pDoc=GetDocument();
POINT pt[4];
int i;
CBrush brush(pDoc->m_clrBack);
CBrush brush1(pDoc->m_clrBlock);
switch(pDoc->m_iNextShape)
{
case 0:
for(i=0;i<4;i++)
{
pt[i].x=i;
pt[i].y=0;
}
break;
case 1:
pt[0].x=1;
pt[0].y=0;
for(i=1;i<4;i++)
{
pt[i].x=i;
pt[i].y=1;
}
break;
case 2:
pt[0].x=3;
pt[0].y=0;
for(i=1;i<4;i++)
{
pt[i].x=i;
pt[i].y=1;
}
break;
case 3:
for(i=0;i<4;i++)
{
pt[i].x=(i<=1)?(i+1):i;
pt[i].y=(i<=1)?0:1;
}
break;
case 4:
for(i=0;i<4;i++)
{
pt[i].x=(i<=1)?(i+2):(i-1);
pt[i].y=(i<=1)?0:1;
}
break;
case 5:
for(i=0;i<4;i++)
{
pt[i].x=(i==0)?2:i;
pt[i].y=(i==0)?0:1;
}
break;
case 6:
for(i=0;i<4;i++)
{
pt[i].x=(i<=1)?(i+1):(i-1);
pt[i].y=(i<=1)?0:1;
}
break;
}
rect.SetRect(ptStart.x,ptStart.y,ptStart.x+4*iWidth,ptStart.y+2*iWidth);
dc.FillRect(&rect,&brush1);
for(i=0;i<4;i++)
{
rect.SetRect(ptStart.x+pt[i].x*iWidth,ptStart.y+pt[i].y*iWidth,
ptStart.x+pt[i].x*iWidth+iWidth,ptStart.y+pt[i].y*iWidth+iWidth);
dc.FillRect(&rect,&brush);
dc.DrawEdge(&rect,EDGE_RAISED,BF_RECT);
}
}
void CALLBACK TimeProc(UINT uID,UINT uMsg,DWORD dwUser,DWORD dw1,DWORD dw2)
{
CString str;
HDC hdc;
CDC dc;
CDC *pDC;
TEXTMETRIC tm;
CRgn rgn;
CRect rect,rc;
HWND hWnd=(HWND)dwUser;
int cyHeight;
static int iLineNum;
CBrush brush(RGB(0,0,255));
CFont font;
font.CreatePointFont(150,"Times New Roman");
hdc=::GetDC(hWnd);
dc.Attach(hdc);
pDC=&dc;
// pDC->SelectObject(&font);
GetTextMetrics(hdc,&tm);
cyHeight=tm.tmExternalLeading+tm.tmHeight;
str.LoadString(IDS_SCROLLMESSAGE);
rect.SetRect(244,187,391,395);
rgn.CreateRectRgn(rect.left,rect.top,rect.right,rect.bottom);
rc=rect;
rc.bottom=10000;
iLineNum=(iLineNum+1)%MAX_LINE;
pDC->SetWindowOrg(0,iLineNum*cyHeight);
pDC->DPtoLP(&rect);
pDC->SelectClipRgn(&rgn);
pDC->FillRect(&rect,&brush);
pDC->SetBkColor(RGB(0,0,255));
pDC->SetBkMode(TRANSPARENT);
pDC->SetTextColor(RGB(255,255,0));
pDC->DrawText(str,&rc,DT_WORDBREAK|DT_LEFT);
rc.top=rc.top+cyHeight*MAX_LINE;
pDC->DrawText(str,&rc,DT_WORDBREAK|DT_LEFT);
}
void CBlockView::OnDestroy()
{
CView::OnDestroy();
// TODO: Add your message handler code here
if(m_bAPITimerRunning)
{
::timeKillEvent(uAPI_Timer);
::timeEndPeriod(1);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -