📄
字号:
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 + -