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

📄 1dlg.cpp

📁 学习VC时做课程设计做的系统
💻 CPP
📖 第 1 页 / 共 2 页
字号:
	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 + -