⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 blockview.cpp

📁 俄罗斯方块游戏 MFC 源代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
				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 + -