📄 1dlg.cpp
字号:
CDialog::OnCancel();
}
void CMy1Dlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
if(!AttachBoard('d'))
{
for(int i=24;i>=0;i--)
for(int j=0;j<10;j++)
{
if(1==shape[i][j].hrect&&1==shape[i][j].active)
{
shape[i][j].hrect=0;
shape[i+1][j].hrect =1;
InvalidateRect(shape[i][j].rect);
InvalidateRect(shape[i+1][j].rect);
}
}
}
else
OnScore();
CDialog::OnTimer(nIDEvent);
}
BOOL CMy1Dlg::AttachBoard(char cs)
{
BOOL LBoard=FALSE;//是否已到左边界
BOOL RBoard=FALSE;//是否已到右边界
BOOL DBoard=FALSE;//是否已到底
for(int i=0;i<25;i++)
for(int j=0;j<10;j++)
if(1==shape[i][j].active&&1==shape[i][j].hrect)
{
if(0==j||0==shape[i][j-1].active) LBoard=TRUE;
if(9==j||0==shape[i][j+1].active) RBoard=TRUE;
if(0==shape[i+1][j].active||24==i) DBoard=TRUE;
}
if (DBoard==TRUE) {
int zy;
// TODO: Add extra initialization here
srand( (unsigned)time( NULL ) );
m_stone.Detach();
zy= rand()%5;
if (zy==0)
m_stone.LoadBitmap(IDB_STONE); else
if (zy==1)
m_stone.LoadBitmap(IDB_STONE1); else
if (zy==2)
m_stone.LoadBitmap(IDB_STONE2); else
if (zy==3)
m_stone.LoadBitmap(IDB_STONE3); else
if (zy==4)
m_stone.LoadBitmap(IDB_STONE4);
}
switch(cs)
{
case 'l': return LBoard;
break;
case 'r': return RBoard;
break;
case 'd': return DBoard;
break;
}}
void CMy1Dlg::OnScore()
{
int number=0;
int line=0;
for(int i=24;i>=0;)
{
for(int j=0;j<10;j++)
number+=shape[i][j].hrect;
if(10==number)
{
for(int k=0;k<8;k++)
{
for(int j=0;j<10;j++)//让消失的一行闪烁
{
CClientDC dc(this);
CBrush *oldBrush,newBrush1,newBrush2;
newBrush1.CreateSolidBrush(RGB(255,255,0));
newBrush2.CreateSolidBrush(RGB(255,0,0));
if(k==0)
oldBrush=dc.SelectObject(&newBrush1);
else
oldBrush=dc.SelectObject(&newBrush2);
dc.FillRect(shape[i][j].rect,oldBrush);
dc.SelectObject(&oldBrush);
}
}
line++;
number=0;
for(j=0;j<10;j++)
for(int k=i;k>0;k--)
{
shape[k][j].hrect=0;
shape[k][j].active=1;
if(1==shape[k-1][j].hrect)
{
shape[k-1][j].hrect=0;
shape[k-1][j].active =1;
shape[k][j].hrect=1;
shape[k][j].active =0;
InvalidateRect(shape[k-1][j].rect);
}
InvalidateRect(shape[k][j].rect);
}
}
else
{
number=0;
i--;
}
}
for(i=0;i<25;i++)
for(int j=0;j<10;j++)
if(1==shape[i][j].hrect)
shape[i][j].active=0;
m_lines+=line;
switch(line)
{
case 1: m_score+=100;
break;
case 2: m_score+=400;
break;
case 3: m_score+=900;
break;
case 4: m_score+=1600;
break;
}
switch(m_score/1000)
{
case 1:
m_level=1;
break;
case 2:
m_level=2;
break;
case 3:
m_level=3;
break;
case 4:
m_level=4;
break;
case 5:
m_level=5;
break;
case 6:
m_level=6;
break;
case 7:
m_level=7;
break;
case 8:
m_level=8;
break;
case 9:
m_level=9;
break;
case 10:
m_level=10;
break;
}
m_time=1000-90*m_level;
KillTimer(1);
SetTimer(1,m_time,NULL);
UpdateData(FALSE);
OnGenerateShape();
}
void CMy1Dlg::OnGenerateShape()
{
struct prect
{
int i;
int j;
};
struct prect rect[6];
int k=0;
BOOL gover=FALSE;
for(int i=0;i<PREVIEW;i++)
for(int j=0;j<PREVIEW;j++)
if(1==shapepreview[i][j].hrect)
{
shapepreview[i][j].hrect=0;
rect[k].i=i;
rect[k].j=j;
k++;
InvalidateRect(shapepreview[i][j].rect);
}
srand((unsigned)time(NULL));
int n=rand()%13;
switch(n)
{
case 0: shapepreview[1][1].hrect=1;
shapepreview[1][2].hrect=1;
shapepreview[1][3].hrect=1;
shapepreview[1][4].hrect=1;
InvalidateRect(shapepreview[1][1].rect);
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[1][4].rect);
break;
case 1: shapepreview[1][2].hrect =1;
shapepreview[2][2].hrect =1;
shapepreview[2][3].hrect =1;
shapepreview[3][3].hrect =1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[2][3].rect);
InvalidateRect(shapepreview[3][3].rect);
break;
case 2: shapepreview[1][2].hrect=1;
shapepreview[1][3].hrect=1;
shapepreview[2][2].hrect=1;
shapepreview[2][3].hrect=1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[2][3].rect);
break;
case 3: shapepreview[1][2].hrect =1;
shapepreview[1][3].hrect =1;
shapepreview[2][2].hrect =1;
shapepreview[3][2].hrect =1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[3][2].rect);
break;
case 4: shapepreview[1][3].hrect =1;
shapepreview[2][3].hrect =1;
shapepreview[2][2].hrect =1;
shapepreview[3][2].hrect =1;
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][3].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[3][2].rect);
break;
case 5: shapepreview[1][2].hrect =1;
shapepreview[1][3].hrect =1;
shapepreview[2][3].hrect =1;
shapepreview[3][3].hrect =1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][3].rect);
InvalidateRect(shapepreview[3][3].rect);
break;
case 6: shapepreview[1][2].hrect=1;
shapepreview[1][3].hrect=1;
shapepreview[1][4].hrect=1;
shapepreview[2][3].hrect=1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[1][4].rect);
InvalidateRect(shapepreview[2][3].rect);
break;
case 12: shapepreview[1][1].hrect=1;
shapepreview[1][2].hrect=1;
shapepreview[1][3].hrect=1;
shapepreview[3][2].hrect=1;
InvalidateRect(shapepreview[1][1].rect);
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[3][2].rect);
break;
case 7: shapepreview[1][2].hrect =1;
shapepreview[2][1].hrect =1;
shapepreview[2][2].hrect =1;
shapepreview[2][3].hrect =1;
shapepreview[3][2].hrect =1;
shapepreview[4][1].hrect =1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[2][1].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[2][3].rect);
InvalidateRect(shapepreview[3][2].rect);
InvalidateRect(shapepreview[4][1].rect);
break;
case 8: shapepreview[1][2].hrect=1;
shapepreview[1][3].hrect=1;
shapepreview[2][2].hrect=1;
shapepreview[3][3].hrect=1;
//shapepreview[2][4].hrect=1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[3][3].rect);
//InvalidateRect(shapepreview[2][4].rect);
break;
case 9: shapepreview[1][1].hrect =1;
shapepreview[1][2].hrect =1;
shapepreview[1][3].hrect =1;
shapepreview[1][4].hrect =1;
// shapepreview[3][1].hrect =1;
InvalidateRect(shapepreview[1][1].rect);
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[1][4].rect);
// InvalidateRect(shapepreview[3][1].rect);
break;
case 10: shapepreview[1][3].hrect =1;
shapepreview[2][3].hrect =1;
shapepreview[2][2].hrect =1;
shapepreview[1][1].hrect =1;
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][3].rect);
InvalidateRect(shapepreview[2][2].rect);
InvalidateRect(shapepreview[1][1].rect);
break;
case 11: //shapepreview[1][1].hrect =1;
shapepreview[1][2].hrect =1;
shapepreview[1][3].hrect =1;
shapepreview[2][3].hrect =1;
shapepreview[4][3].hrect =1;
//InvalidateRect(shapepreview[1][1].rect);
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[2][3].rect);
InvalidateRect(shapepreview[4][3].rect);
break;
/* case 6: shapepreview[1][2].hrect=1;
shapepreview[1][3].hrect=1;
shapepreview[1][4].hrect=1;
shapepreview[2][3].hrect=1;
//shapepreview[3][3].hrect=1;
InvalidateRect(shapepreview[1][2].rect);
InvalidateRect(shapepreview[1][3].rect);
InvalidateRect(shapepreview[1][4].rect);
InvalidateRect(shapepreview[2][3].rect);
//InvalidateRect(shapepreview[3][3].rect);
break;*/
}
for(k=3;k>=0;k--)
{
if(shape[rect[k].i-1][rect[k].j+2].hrect==0)
{
shape[rect[k].i-1][rect[k].j+2].hrect=1;
InvalidateRect(shape[rect[k].i-1][rect[k].j+2].rect);
}
else
GameOver();
}
}
void CMy1Dlg::OnDown()
{
// TODO: Add your control notification handler code here
BOOL board=FALSE;
if(Start)
{
for(int i=0;i<25;i++)
for(int j=0;j<10;j++)
if(1==shape[i][j].active&&1==shape[i][j].hrect)
{
if(0==shape[i+2][j].active||(i+2)>24||0==shape[i+1][j].active) board=TRUE;
}
if(!board)
{
for(int i=24;i>=0;i--)
for(int j=0;j<10;j++)
{
if(1==shape[i][j].hrect&&1==shape[i][j].active)
{
shape[i][j].hrect=0;
shape[i+2][j].hrect =1;
InvalidateRect(shape[i][j].rect);
InvalidateRect(shape[i+2][j].rect);
}
}
}
}
}
void CMy1Dlg::GameOver()
{
KillTimer(1);
MessageBox("Game Over!");
}
BOOL CMy1Dlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: Add your specialized code here and/or call the base class
if(pMsg->message == WM_KEYDOWN)
{
switch(pMsg->wParam)
{
case VK_LEFT: OnMoveleft();
return TRUE;
case VK_RIGHT: OnMoveright();
return TRUE;
case VK_DOWN: OnDown();
return TRUE;
case VK_UP: OnRotate();
return TRUE;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CMy1Dlg::Onhelp()
{
// TODO: Add your control notification handler code here
CAboutDlg d;
d.DoModal();
}
void CMy1Dlg::OnButton2()
{
// TODO: Add your control notification handler code here
}
HBRUSH CMy1Dlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor)
{
HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);
// TODO: Change any attributes of the DC here
switch(nCtlColor)
{
case CTLCOLOR_STATIC:
pDC->SetBkMode(TRANSPARENT);
case CTLCOLOR_DLG:
return m_brush;
}
// TODO: Return a different brush if the default is not desired
return hbr;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -