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

📄

📁 这是一个俄罗斯方块的源代码
💻
📖 第 1 页 / 共 2 页
字号:

void CMyView::OnMid2() 
{
	// TODO: Add your command handler code here
    CMenu *menu=AfxGetMainWnd()->GetMenu();
	menu->CheckMenuItem(IDC_NOMID,MF_UNCHECKED);
	menu->CheckMenuItem(IDC_MID1,MF_UNCHECKED);
    menu->CheckMenuItem(IDC_MID2,MF_CHECKED);
    menu->CheckMenuItem(IDC_MID3,MF_UNCHECKED);

    
    game.BackMid=TRUE;
	game.IsPlayMid=TRUE;
	strcpy(game.MidName,"mid2.mid");
	game.PlayMidi.Close();
	game.PlayMidi.Open("mid2.mid");
	game.PlayMidi.Play();
}

void CMyView::OnMid3() 
{
	// TODO: Add your command handler code here
	CMenu *menu=AfxGetMainWnd()->GetMenu();
	menu->CheckMenuItem(IDC_NOMID,MF_UNCHECKED);
	menu->CheckMenuItem(IDC_MID1,MF_UNCHECKED);
    menu->CheckMenuItem(IDC_MID2,MF_UNCHECKED);
    menu->CheckMenuItem(IDC_MID3,MF_CHECKED);

    game.BackMid=TRUE;
	game.IsPlayMid=TRUE;
	strcpy(game.MidName,"mid3.mid");
	game.PlayMidi.Close();
	game.PlayMidi.Open("mid3.mid");
	game.PlayMidi.Play();
}

void CMyView::OnWord() 
{
	// TODO: Add your command handler code here
	game.word.OrderNum=game.OrderNum;
	for(int i=0;i<5;i++)
	{
	strcpy(game.word.Order[i].Name,game.Order[i].Name);
	strcpy(game.word.Order[i].Floor,game.Order[i].Floor);
	strcpy(game.word.Order[i].Score,game.Order[i].Score);
	}
	game.word.DoModal();

}

void CMyView::OnStandard() 
{
	// TODO: Add your command handler code here
	game.Standard=TRUE;
	game.MaxNum=8;
	CMenu *menu=AfxGetMainWnd()->GetMenu();
	menu->CheckMenuItem(IDM_STANDARD,MF_CHECKED);
	menu->CheckMenuItem(IDM_CHANGE,MF_UNCHECKED);
}

void CMyView::OnChange() 
{
	// TODO: Add your command handler code here
	game.Standard=FALSE;
	game.MaxNum=12;
	CMenu *menu=AfxGetMainWnd()->GetMenu();
	menu->CheckMenuItem(IDM_STANDARD,MF_UNCHECKED);
	menu->CheckMenuItem(IDM_CHANGE,MF_CHECKED);
}

void CMyView::OnLoad() 
{
	// TODO: Add your command handler code here
	CFile LoadWord;

    if (LoadWord.Open("game.dat",CFile::modeRead,NULL))
    {
	game.InitGame();
    LoadWord.SeekToEnd();
    int Length=LoadWord.GetLength();
    char *Buffer=new char[Length+1];
    LoadWord.SeekToBegin();
    LoadWord.Read(Buffer,Length);
    Buffer[Length]='\0';
    LoadWord.Close();
	//以下从Buffer指针获取数据
	int seek=0;
     for (int i=0;i<16;i++)
	 for (int j=0;j<25;j++)
	 {
		 if (*(Buffer+seek)=='1')
			 game.BoxStyle[i][j]=TRUE;
		 else
	         game.BoxStyle[i][j]=FALSE;
		 seek++;
		 game.BoxRgb[i][j]=CMyView::ColorFromCode(*(Buffer+seek)-48);
		 seek++;
	 }
	
	 seek++;
	 if(*(Buffer+seek)=='1')
		 game.Standard=TRUE;
	 else
		 game.Standard=FALSE;
	 seek++;
	 game.Level=*(Buffer+seek)-48;
	 seek++;
	 game.Floor=*(Buffer+seek)-48;
	 seek++;
	 seek++;
	 game.Movexy.x=*(Buffer+seek);
     seek++;
	 game.Movexy.y=*(Buffer+seek);
     seek++;
	 seek++;
	 game.BoxNum=*(Buffer+seek);
     seek++;
	 game.BoxPosition=*(Buffer+seek);
     seek++;
	 seek++;
     game.NextBoxNum=*(Buffer+seek);
     seek++;
	 game.NextBoxPosition=*(Buffer+seek);
	 seek++;
	 seek++;
     int n=0;
	 char temp[10]="";
	 while(*(Buffer+seek)!='*')
	 {
       temp[n++]=*(Buffer+seek);
	   seek++;
	 }
     game.DelBoxNum=atoi(temp);
	 strcpy(temp,"");
     n=0;
	 seek++;
	 while(*(Buffer+seek)!='*')
	 {
       temp[n++]=*(Buffer+seek);
	   seek++;
	   if (seek>=Length+1) break;
	 }
	 game.Score=atoi(temp);

	 delete Buffer;
	//
	game.GamePause=TRUE;
	game.GameHasOver=FALSE;
	CClientDC dc(this);
    CMenu *menu=AfxGetMainWnd()->GetMenu();
	menu->ModifyMenu(IDM_START,MF_BYCOMMAND,IDM_START,"重置游戏");
	menu->CheckMenuItem(IDM_BOX_DEFCOLOR,MF_CHECKED);
	menu->CheckMenuItem(IDM_BOX_RANDCOLOR,MF_UNCHECKED);
	menu->EnableMenuItem(IDM_SAVE,MF_ENABLED);
	if (game.Standard)
	{
		game.MaxNum=8;
		menu->CheckMenuItem(IDM_STANDARD,MF_CHECKED);
	    menu->CheckMenuItem(IDM_CHANGE,MF_UNCHECKED);
	}
	else
	{
		game.MaxNum=12;
	    menu->CheckMenuItem(IDM_STANDARD,MF_UNCHECKED);
	    menu->CheckMenuItem(IDM_CHANGE,MF_CHECKED);
	}
        menu->EnableMenuItem(IDM_STANDARD,MF_GRAYED);
		menu->EnableMenuItem(IDM_CHANGE,MF_GRAYED);

	game.PlayMidi.Close();
	if(strcmp(game.MidName,"")!=0 && game.PlayMidi.IsPlaying()==FALSE)
	{
		game.PlayMidi.Open(game.MidName);
		game.PlayMidi.Play();
	}
    int result=::joySetCapture(CMyView::m_hWnd,JOYSTICKID1,100-game.JoySpeed,FALSE);
	/*
    if(result==JOYERR_NOCANDO)
	{
        MessageBeep(MB_ICONEXCLAMATION);
        MessageBox("不能捕获游戏杆", NULL, MB_OK | MB_ICONEXCLAMATION);
	}
	else
    if(result==JOYERR_UNPLUGGED)
	{
        MessageBeep(MB_ICONEXCLAMATION);
        MessageBox("游戏杆未与系统连接", NULL, MB_OK | MB_ICONEXCLAMATION);
	}
	*/
   
    CMyView::SetTimer(IDT_DROP,game.Speed,NULL);
    game.m_hDC=GetDC()->m_hDC;
    CMyView::Invalidate(FALSE);
	}
	else 
		CMyView::MessageBox("没有进度 !","载入进度",MB_OK);
}

void CMyView::OnSave() 
{
	// TODO: Add your command handler code here
	if(CMyView::MessageBox("这将覆盖以前的进度,要继续吗?","载入进度",MB_YESNO)==IDYES)
	{
	CFile SaveFile;
    CString GameDat="";
	int seek=0;
    for(int i=0;i<16;i++)
	for(int j=0;j<25;j++)
	{
		if(game.BoxStyle[i][j])
			GameDat.Insert(seek++,"1");
		else 
			GameDat.Insert(seek++,"0");
		GameDat.Insert(seek++,CMyView::CodeFromColor(game.BoxRgb[i][j]));
	}
    seek++;
	GameDat.Insert(seek++,"*");

	if (game.Standard)
	GameDat.Insert(seek++,"1");
	else
	GameDat.Insert(seek++,"0");
	
	GameDat.Insert(seek++,game.Level+48);
	GameDat.Insert(seek++,game.Floor+48);
	GameDat.Insert(seek++,"*");
	GameDat.Insert(seek++,(int)game.Movexy.x);
	GameDat.Insert(seek++,(int)game.Movexy.y);
	GameDat.Insert(seek++,"*");
	GameDat.Insert(seek++,game.BoxNum);
	GameDat.Insert(seek++,game.BoxPosition);
	GameDat.Insert(seek++,"*");
    GameDat.Insert(seek++,game.NextBoxNum);
	GameDat.Insert(seek++,game.NextBoxPosition);
    GameDat.Insert(seek++,"*");
    char temp[10]="";
	sprintf(temp,"%d",game.DelBoxNum);
	GameDat.Insert(seek,temp);
	seek+=strlen(temp);
    GameDat.Insert(seek++,"*");
    strcpy(temp,"");
	sprintf(temp,"%d",game.Score);
	GameDat.Insert(seek++,temp);
	//
	SaveFile.Open("game.dat",CFile::modeReadWrite|CFile::modeCreate,NULL);
    SaveFile.Write(GameDat,GameDat.GetLength());
    SaveFile.Close();
	GameDat.Format("");
	}
}


void CMyView::OnAppHelp() 
{
	// TODO: Add your command handler code here
    HRSRC hrSrc = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(IDR_HELP), "HELP");
    HGLOBAL hGlobal = LoadResource(AfxGetResourceHandle(), hrSrc);
    LPVOID lpExe = LockResource(hGlobal);
    char *Buffer=(char *)LockResource(hGlobal);
 	game.HelpData.Format(Buffer);
    delete Buffer;
	game.HelpDialog.HelpData.Format(game.HelpData);
	game.HelpDialog.DoModal();
}


int CMyView::CodeFromColor(COLORREF color)
{
int code;
switch(color)
{
case RGB_0:
	code=0;
	break;
case RGB_1:
	code=1;
	break;
case RGB_2:
	code=2;
	break;
case RGB_3:
	code=3;
	break;
case RGB_4:
	code=4;
	break;
case RGB_5:
	code=5;
	break;
case RGB_6:
	code=6;
	break;
case RGB_7:
	code=7;
	break;
case RGB_8:
	code=8;
	break;
case RGB_9:
	code=9;
	break;
case RGB_10:
	code=10;
	break;
case RGB_11:
	code=11;
	break;
default:
	code=32;
	break;
}
code+=48;
return code;
}


COLORREF CMyView::ColorFromCode(int code)
{
COLORREF color;
switch(code)
{
case 0:
	color=RGB_0;
	break;
case 1:
	color=RGB_1;
	break;
case 2:
	color=RGB_2;
	break;
case 3:
	color=RGB_3;
	break;
case 4:
	color=RGB_4;
	break;
case 5:
	color=RGB_5;
	break;
case 6:
	color=RGB_6;
	break;
case 7:
	color=RGB_7;
	break;
case 8:
	color=RGB_8;
case 9:
	color=RGB_9;
	break;
case 10:
	color=RGB_10;
case 11:
	color=RGB_11;
	break;
default:
	color=RGB(0,0,0);
	break;
}
return color;
}

void CMyView::OnDestroy() 
{
    ::joyReleaseCapture(JOYSTICKID1);
	CView::OnDestroy();
	
	// TODO: Add your message handler code here
	
}

LRESULT CMyView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) 
{
	// TODO: Add your specialized code here and/or call the base class
	if (game.StartGame)
	{
	switch(message)
     {
     case MM_JOY1BUTTONDOWN :
    
	 if (wParam & JOY_BUTTON1)//如果按下按钮一
		 {
        	if (game.PassStage)
			{
			game.PlayMidi.Close();
			game.PlayMidi.Open(game.MidName);
			game.PlayMidi.Play();
			CMyView::Invalidate(FALSE);
			game.GamePause=1-game.GamePause;
			game.PassStage=FALSE;
			}
		 break;
		 }
     if (wParam & JOY_BUTTON3)//如果按下按钮三
		 {
		 CClientDC dc(this);
			if (game.StartGame && game.PassStage==FALSE)
			{
			game.GamePause=1-game.GamePause;
			dc.SetTextColor(RGB(0,0,255));
			dc.SetBkColor(RGB(192,192,192));
			if (game.GamePause==FALSE)
			dc.TextOut(250,190,"                 ");
			else 
			dc.TextOut(250,190,"游戏暂停");
			}
		 break;
		 }
	 if (wParam & JOY_BUTTON2)//如果按下按钮二
		if (game.PassStage==FALSE)
		{
		game.GamePause=1-game.GamePause;
		SetTextColor(game.m_hDC,RGB(0,0,255));
		SetBkColor(game.m_hDC,RGB(192,192,192));
		if (game.GamePause==FALSE)
		TextOut(game.m_hDC,250,190,"                 ",strlen("                 "));
		else 
		TextOut(game.m_hDC,250,190,"游戏暂停",strlen("游戏暂停"));
		}
		 break;

     case MM_JOY1MOVE :

     if (LOWORD(lParam)/2048<5) //按下左键
    if (game.GamePause==FALSE && game.IsDroping==TRUE && game.MoveLeft()==TRUE)
	{
		OnKeyDown(CON_LEFT,NULL,NULL);
		break;
	 }
     if (LOWORD(lParam)/2048>20) //按下右键
    if (game.GamePause==FALSE && game.IsDroping==TRUE && game.MoveRight()==TRUE)
	{   
		OnKeyDown(CON_RIGHT,NULL,NULL);
	    break;
	}
    if (HIWORD(lParam)/2048>20) //按下下键
 	if (game.GamePause==FALSE && game.IsDroping==TRUE)
	{
		 OnKeyDown(CON_DOWN,NULL,NULL);
         break;
	}
	 default:
		 break;
	}
	}
	return CView::WindowProc(message, wParam, lParam);
}

void CMyView::OnSetjoy() 
{
	//::joyReleaseCapture(JOYSTICKID1);
	int result=::joySetCapture(CMyView::m_hWnd,JOYSTICKID1,100-game.JoySpeed,FALSE);
    if(result==JOYERR_NOCANDO)
	{
        MessageBeep(MB_ICONEXCLAMATION);
        MessageBox("不能捕获游戏杆", NULL, MB_OK | MB_ICONEXCLAMATION);
	}
	else
    if(result==JOYERR_UNPLUGGED)
	{
        MessageBeep(MB_ICONEXCLAMATION);
        MessageBox("游戏杆未与系统连接", NULL, MB_OK | MB_ICONEXCLAMATION);
	}
	else
	{
	CMyView::SendMessage(WM_RBUTTONDOWN,0,0);
    JOYSPEED speed;
	speed.JoySpeed=game.JoySpeed;
    speed.TempTwoWindow=TwoWindow;
	speed.DoModal();
	TwoWindow=speed.TwoWindow;
	game.JoySpeed=speed.JoySpeed;
	CMyView::SendMessage(WM_RBUTTONDOWN,0,0);
	}

}

void CMyView::OnConset() 
{
	// TODO: Add your command handler code here
	CConSet dlg;
	dlg.m_conturn.m_key=CON_TURN;
	dlg.m_condown.m_key=CON_DOWN;
	dlg.m_conleft.m_key=CON_LEFT;
    dlg.m_conright.m_key=CON_RIGHT;
	dlg.m_conpause.m_key=CON_PAUSE;
	if(dlg.DoModal()==IDOK)
	{
	CON_TURN=dlg.m_conturn.m_key;
	CON_DOWN=dlg.m_condown.m_key;
	CON_LEFT=dlg.m_conleft.m_key;
    CON_RIGHT=dlg.m_conright.m_key;
	CON_PAUSE=dlg.m_conpause.m_key;
	}
}

⌨️ 快捷键说明

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