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

📄 tedlg.cpp

📁 俄罗斯方块,带背景音乐,带扩展窗口,操作同qq游戏的疯狂俄罗斯
💻 CPP
📖 第 1 页 / 共 2 页
字号:


void  CTEDlg::DrawModel(Model *mod,int x, int y,int color){
	int *temp=mod->Mod();
	for(int n=0;n<4;n++){
		for(int m=0;m<4;m++){
			if(*temp==0)
				Sigle(x+m*ONE,y+n*ONE,0,0);
			else
				Sigle(x+m*ONE,y+n*ONE,4,color);
			temp++;
		}
	}
}

void CTEDlg::OnStart() 
{
	// TODO: Add your control notification handler code here
//	GetDlgItem(IDC_START)->EnableWindow(false);
	TheEdge=new Edge;
	Model_First=new Model;
	Model_Next=new Model;
	makeup=TheEdge->MakeUp();
	HEADX=355;
	HEADY=100;

	next_color=	((float)rand() / (float)RAND_MAX) * 16 + 2;
	color=((float)rand() / (float)RAND_MAX) * 16 + 2;

	m_nTimer=SetTimer(1, 300, 0);
	Graph();
	DrawModel(Model_Next,285,198,next_color);
	Movie(TheEdge->Location(),Model_First->Mod()+15,color,0,4);

	Start=true;
							
}

void CTEDlg::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	int Ctrl=GetDown(TheEdge,Model_First,color);
	switch(Ctrl){
	case 1:{
			KillTimer(1);
		   	delete Model_Next;
			delete Model_First;
			delete TheEdge;
			break;
		   }
	case 2:{


			delete Model_First;
			Model *Model_First=new Model(*Model_Next);
			color=next_color;
			Movie(TheEdge->Location(),Model_First->Mod()+15,color,0,4);
			delete Model_Next;
			Model *Model_Next=new Model;
			next_color=	((float)rand() / (float)RAND_MAX) * 16 + 2;
			DrawModel(Model_Next,285,198,next_color);


			break;
			}
	default:{

//			KillTimer(1);
//			delete Model_Next;
//			delete Model_First;
//			delete TheEdge;
			break;
			}
	}
	CDialog::OnTimer(nIDEvent);
}


BOOL CTEDlg::PreTranslateMessage(LPMSG lpmsg) 
{
	BOOL bHandleNow = FALSE;
	if(Start==false){
       switch (lpmsg->message)
{
case WM_KEYDOWN:
switch (lpmsg->wParam)
{
case VK_UP:
case VK_DOWN:
case VK_LEFT:
case VK_RIGHT:
case VK_SPACE:
	  
bHandleNow = TRUE;
break;
} 
if (bHandleNow) 
OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam)); 
break; 
} 
return bHandleNow; 

	}
	Edge  *edge=TheEdge;
	Model *model=	Model_First;
	switch (lpmsg->message)
	{
		case WM_KEYDOWN:
		switch (lpmsg->wParam)
		{
			case VK_UP:
				Movie(edge->Location(),model->Mod()+15,0,0,4);
				edge->ObjectTurn(model);
				Movie(edge->Location(),model->Mod()+15,color,0,4);
				break;
			case VK_DOWN:{
				 	int Ctrl=GetDown(TheEdge,Model_First,color);
					switch(Ctrl){
						case 1:{
							KillTimer(1);
						   	delete Model_Next;
							delete Model_First;
							delete TheEdge;
							break;
							   }
						case 2:{

							delete Model_First;
							Model *Model_First=new Model(*Model_Next);
							color=next_color;
							Movie(TheEdge->Location(),Model_First->Mod()+15,color,0,4);
							delete Model_Next;
							Model *Model_Next=new Model;
							next_color=	((float)rand() / (float)RAND_MAX) * 16 + 2;
							DrawModel(Model_Next,285,198,next_color);
							break;
						}
						default:{
//			delete Model_Next;
//			delete Model_First;
//			delete TheEdge;
							break;
						}
					}
				 }
				break;
			   
			case VK_LEFT:

				Movie(edge->Location(),model->Mod()+15,0,0,4);
				edge->ObjectMove(model, 1);              //left
				Movie(edge->Location(),model->Mod()+15,color,0,4);
				break;

			case VK_RIGHT:
				Movie(edge->Location(),model->Mod()+15,0,0,4);
				edge->ObjectMove(model,2);
				Movie(edge->Location(),model->Mod()+15,color,0,4);
				break;
			case VK_SPACE:{
				for(int Ctrl=0;Ctrl!=2&&Ctrl!=4;){
				 	 Ctrl=GetDown(TheEdge,Model_First,color);
					switch(Ctrl){
						case 1:{
							KillTimer(1);
						   	delete Model_Next;
							delete Model_First;
							delete TheEdge;
							break;
							   }
						case 2:{

							delete Model_First;
							Model *Model_First=new Model(*Model_Next);
							color=next_color;
							Movie(TheEdge->Location(),Model_First->Mod()+15,color,0,4);
							delete Model_Next;
							Model *Model_Next=new Model;
							next_color=	((float)rand() / (float)RAND_MAX) * 16 + 2;
							DrawModel(Model_Next,285,198,next_color);
							break;
						}
						default:{
										
//			delete Model_Next;
//			delete Model_First;
//			delete TheEdge;
							break;
						}
					}
				}
			 
//			break;
		}
	bHandleNow = TRUE;
		break;
	} 
	if (bHandleNow) 
		OnKeyDown(lpmsg->wParam, LOWORD(lpmsg ->lParam), HIWORD(lpmsg->lParam)); 
		break; 
		} 
		return bHandleNow; 
	}


void CTEDlg::OnCloseMusic() 
{	
	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
	{
		GetMenu()->CheckMenuItem(ID_CLOSE_MUSIC,MF_UNCHECKED);

		switch(m_Last_Music)
		{
		case ID_MUSIC_1:
			m_OpenParms.lpstrElementName = m_Music[0];
			break;
		case ID_MUSIC_2:
			m_OpenParms.lpstrElementName = m_Music[1];
			break;
		case ID_MUSIC_3:
			m_OpenParms.lpstrElementName = m_Music[2];
			break;
		case ID_MUSIC_4:
			m_OpenParms.lpstrElementName = m_Music[3];
			break;
		case ID_MUSIC_5:
			m_OpenParms.lpstrElementName = m_Music[4];
			break;
		case ID_MUSIC_6:
			m_OpenParms.lpstrElementName = m_Music[5];
			break;
		}

		mciSendCommand (NULL, MCI_OPEN, 
				MCI_WAIT | MCI_OPEN_TYPE | 
				MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
				(DWORD)(LPVOID) &m_OpenParms);

		mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
				MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);
	}
	else
	{
		GetMenu()->CheckMenuItem(ID_CLOSE_MUSIC,MF_CHECKED);

		mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,
				MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	}
}	

void CTEDlg::OnMusic1() 
{
	if(m_Last_Music == ID_MUSIC_1) //如果已经选择,则直接返回;
		return;
	
	GetMenu()->CheckMenuItem(m_Last_Music,MF_UNCHECKED);
	m_Last_Music = ID_MUSIC_1;
	GetMenu()->CheckMenuItem(ID_MUSIC_1,MF_CHECKED);

	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
		return;  //如果菜单项"关闭音乐"已经选择,则直接返回;

	mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,  //关闭当前正在播放音乐;
		MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	
	m_OpenParms.lpstrElementName = m_Music[0];

	mciSendCommand (NULL, MCI_OPEN, 
		MCI_WAIT | MCI_OPEN_TYPE | 
		MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID) &m_OpenParms);

	mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
		MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);
}


void CTEDlg::OnMusic2() 
{
	if(m_Last_Music == ID_MUSIC_2) //如果已经选择,则直接返回;
		return;
	
	GetMenu()->CheckMenuItem(m_Last_Music,MF_UNCHECKED);
	m_Last_Music = ID_MUSIC_2;
	GetMenu()->CheckMenuItem(ID_MUSIC_2,MF_CHECKED);

	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
		return;  //如果菜单项"关闭音乐"已经选择,则直接返回;

	mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,  //关闭当前正在播放音乐;
		MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	
	m_OpenParms.lpstrElementName = m_Music[1];

	mciSendCommand (NULL, MCI_OPEN, 
		MCI_WAIT | MCI_OPEN_TYPE | 
		MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID) &m_OpenParms);

	mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
		MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);	
}

void CTEDlg::OnMusic3() 
{
	if(m_Last_Music == ID_MUSIC_3) //如果已经选择,则直接返回;
		return;
	
	GetMenu()->CheckMenuItem(m_Last_Music,MF_UNCHECKED);
	m_Last_Music = ID_MUSIC_3;
	GetMenu()->CheckMenuItem(ID_MUSIC_3,MF_CHECKED);

	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
		return;  //如果菜单项"关闭音乐"已经选择,则直接返回;

	mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,  //关闭当前正在播放音乐;
		MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	
	m_OpenParms.lpstrElementName = m_Music[2];

	mciSendCommand (NULL, MCI_OPEN, 
		MCI_WAIT | MCI_OPEN_TYPE | 
		MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID) &m_OpenParms);

	mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
		MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);		
}

void CTEDlg::OnMusic4() 
{
	if(m_Last_Music == ID_MUSIC_4) //如果已经选择,则直接返回;
		return;
	
	GetMenu()->CheckMenuItem(m_Last_Music,MF_UNCHECKED);
	m_Last_Music = ID_MUSIC_4;
	GetMenu()->CheckMenuItem(ID_MUSIC_4,MF_CHECKED);

	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
		return;  //如果菜单项"关闭音乐"已经选择,则直接返回;

	mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,  //关闭当前正在播放音乐;
		MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	
	m_OpenParms.lpstrElementName = m_Music[3];

	mciSendCommand (NULL, MCI_OPEN, 
		MCI_WAIT | MCI_OPEN_TYPE | 
		MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID) &m_OpenParms);

	mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
		MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);	
}

void CTEDlg::OnMusic5() 
{
	if(m_Last_Music == ID_MUSIC_5) //如果已经选择,则直接返回;
		return;
	
	GetMenu()->CheckMenuItem(m_Last_Music,MF_UNCHECKED);
	m_Last_Music = ID_MUSIC_5;
	GetMenu()->CheckMenuItem(ID_MUSIC_5,MF_CHECKED);

	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
		return;  //如果菜单项"关闭音乐"已经选择,则直接返回;

	mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,  //关闭当前正在播放音乐;
		MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	
	m_OpenParms.lpstrElementName = m_Music[4];

	mciSendCommand (NULL, MCI_OPEN, 
		MCI_WAIT | MCI_OPEN_TYPE | 
		MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID) &m_OpenParms);

	mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
		MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);	
}

void CTEDlg::OnMusic6() 
{
	if(m_Last_Music == ID_MUSIC_6) //如果已经选择,则直接返回;
		return;
	
	GetMenu()->CheckMenuItem(m_Last_Music,MF_UNCHECKED);
	m_Last_Music = ID_MUSIC_6;
	GetMenu()->CheckMenuItem(ID_MUSIC_6,MF_CHECKED);

	if(GetMenu()->GetMenuState(ID_CLOSE_MUSIC,MF_BYCOMMAND) == MF_CHECKED)
		return;  //如果菜单项"关闭音乐"已经选择,则直接返回;

	mciSendCommand (m_OpenParms.wDeviceID, MCI_CLOSE,  //关闭当前正在播放音乐;
		MCI_NOTIFY, (DWORD)(LPVOID)&m_CloseParms);
	
	m_OpenParms.lpstrElementName = m_Music[5];

	mciSendCommand (NULL, MCI_OPEN, 
		MCI_WAIT | MCI_OPEN_TYPE | 
		MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,
		(DWORD)(LPVOID) &m_OpenParms);

	mciSendCommand (m_OpenParms.wDeviceID, MCI_PLAY,
		MCI_NOTIFY, (DWORD)(LPVOID)&m_PlayParms);	
}


LRESULT CTEDlg::OnSer(WPARAM wParam, LPARAM lParam)
{
return 0;
}

LRESULT CTEDlg::OnRev(WPARAM wParam, LPARAM lParam)
{
return 0;
}

void CTEDlg::SetUDPserver() 
{
	// TODO: Add your control notification handler code here
	if(m_server.UDPCreateSocket(this->m_hWnd,m_uPort)==FALSE)
	{
		m_state = _T("错误!不可使用");
		return;
	}
	else
	{

		m_state = _T("欢迎使用");
//		MessageBox("OK");
//		m_sShowText="Server has been set ok!\r\n";
//		GetDlgItem(IDC_SHOWTEXT)->SetWindowText(m_sShowText);
	}
		UpdateData(false);
}


BOOL CTEDlg::BroadSend(TCHAR* buffer,SOCKET s,UINT PORT)
{
	struct sockaddr_in target;
	target.sin_family = AF_INET;
	target.sin_addr.S_un.S_addr = INADDR_BROADCAST;
	target.sin_port = htons(PORT);
	//以上是填充目标地址块
	if((sendto(s, buffer, 3*MAX_LENGTH, 0, (struct sockaddr FAR*)&target,
		sizeof(SOCKADDR))) == SOCKET_ERROR)
		return FALSE;
	//发送数据buffer
	return TRUE;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -