www.gusucode.com > VC++俄罗斯方块源码源码程序 > VC++俄罗斯方块源码源码程序\code\gameDlg.cpp
// gameDlg.cpp : implementation file // download by http://www.NewXing.com #include "stdafx.h" #include "game.h" #include "gameDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif #include "Gameover.h" #define M 13 #define N 20 #define V 34 int G[M][N]; int Run_Time=500; #define Clear_away one(0,object.x, object.y) int X=47,Y=40,r=25; COLORREF BackColor=RGB(118,4,118);//RGB(223,194,108); OBJECT object; int a0,a1,a2,a3,a4,a5,a6,a7; int ZZ; OBJECT object2; int b0,b1,b2,b3,b4,b5,b6,b7; int ZZ2; OBJECT object3; int c0,c1,c2,c3,c4,c5,c6,c7; int ZZ3; int Runing=0,Score=0; int X1=250,X2=300;int OK_X=960,OK_Y=20,sizeZ=40; int J_x=430,J_y=245; int m_a=435,m_b=95; int Back; CPoint pointo,poinfrom; CPoint p1,pp; CRect rect; CRect desktopRect; int Read=1; int m_W,m_H;int LW,LH; CPoint ooo; CRect rect0;//桌面大小 CRect rectO;//窗口大小 CPoint rectp;//鼠标位置 CPoint recto;//窗口位置 CRect So,Si,Sj; float R=0.15; int T=30,Set=0; ///////////////////////////////////////////////////////////////////////////// // CAboutDlg dialog used for App About class CAboutDlg : public CDialog { public: CAboutDlg(); // Dialog Data //{{AFX_DATA(CAboutDlg) enum { IDD = IDD_ABOUTBOX }; //}}AFX_DATA // ClassWizard generated virtual function overrides //{{AFX_VIRTUAL(CAboutDlg) protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support //}}AFX_VIRTUAL // Implementation protected: //{{AFX_MSG(CAboutDlg) //}}AFX_MSG DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD) { //{{AFX_DATA_INIT(CAboutDlg) //}}AFX_DATA_INIT } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CAboutDlg) //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CAboutDlg, CDialog) //{{AFX_MSG_MAP(CAboutDlg) // No message handlers //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGameDlg dialog CGameDlg::CGameDlg(CWnd* pParent /*=NULL*/) : CDialog(CGameDlg::IDD, pParent) { //{{AFX_DATA_INIT(CGameDlg) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT // Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); } void CGameDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CGameDlg) DDX_Control(pDX, IDC_COMBO1, m_str); DDX_Control(pDX, IDC_OUT, m_Out); // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CGameDlg, CDialog) //{{AFX_MSG_MAP(CGameDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_BN_CLICKED(IDC_BACKCOLOR, OnBackcolor) ON_BN_CLICKED(IDC_BUTTON1, OnButton1) ON_BN_CLICKED(IDC_DOWN, OnDown) ON_BN_CLICKED(IDC_LEFT, OnLeft) ON_BN_CLICKED(IDC_RIGHT, OnRight) ON_BN_CLICKED(IDC_UP, OnUp) ON_WM_TIMER() ON_WM_DESTROY() ON_BN_CLICKED(IDC_BUTTON2, OnButton2) ON_BN_CLICKED(IDC_BUTTON3, OnButton3) ON_BN_CLICKED(IDC_BUTTON4, OnButton4) ON_BN_CLICKED(IDC_BUTTON5, OnButton5) ON_BN_CLICKED(IDC_MYSELF, OnMyself) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CGameDlg message handlers BOOL CGameDlg::OnInitDialog() { CDialog::OnInitDialog(); // Add "About..." menu item to system menu. // IDM_ABOUTBOX must be in the system command range. ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { CString strAboutMenu; strAboutMenu.LoadString(IDS_ABOUTBOX); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // Set the icon for this dialog. The framework does this automatically // when the application's main window is not a dialog SetIcon(m_hIcon, TRUE); // Set big icon SetIcon(m_hIcon, FALSE); // Set small icon m_str.AddString("低级"); m_str.AddString("高级"); m_str.AddString("中级"); m_str.SetCurSel(0); ooo.x=ooo.y=0; recto=rectp=ooo;//桌面大小 ClientToScreen(&recto); GetCursorPos(&rectp); GetClientRect(&rect); m_W=rect.Width();m_H=rect.Height()+30; GetDesktopWindow()->GetWindowRect(desktopRect); LW=desktopRect.Width (); LH=desktopRect.Height (); So.bottom=int(LH-R*LH);So.top=int(R*LH); So.right=int(LW-R*LW); So.left=int(R*LW); SetTimer(10,1,NULL); SetTimer(9,1,NULL); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control } void CGameDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialog::OnSysCommand(nID, lParam); } } // If you add a minimize button to your dialog, you will need the code below // to draw the icon. For MFC applications using the document/view model, // this is automatically done for you by the framework. void CGameDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // device context for painting SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0); // Center icon in client rectangle int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // Draw the icon dc.DrawIcon(x, y, m_hIcon); } else { CDialog::OnPaint(); } } // The system calls this to obtain the cursor to display while the user drags // the minimized window. HCURSOR CGameDlg::OnQueryDragIcon() { return (HCURSOR) m_hIcon; } //========================================================================================= //======================================================================================= void CGameDlg::one(OBJECT object) //以组形式画出 { Clear_away; one(object.Type, object.x, object.y); } void CGameDlg::one(OBJECT object,int a,int b) { one(object.Type, object.x+b, object.y+a); } void CGameDlg::Clear(int a,int b) { one(0,object.x+a, object.y+b); } int CGameDlg::check1() //走动条件 { if(object.x+a2>M-1||object.x+a4>M-1||object.x+a6>M-1 ||object.x+a2<0||object.x+a4<0||object.x+a6<0) return 1; else if( G[object.x+a0][object.y+a1]||G[object.x+a2][object.y+a3] ||G[object.x+a4][object.y+a5]||G[object.x+a6][object.y+a7]) return 1; else return 0; } int CGameDlg::check2() //走动条件 { if(object.y+a3>N-1||object.y+a5>N-1||object.y+a7>N-1 ||object.y+a3<0||object.y+a5<0||object.y+a7<0) return 1; else if( G[object.x+a0][object.y+a1]||G[object.x+a2][object.y+a3] ||G[object.x+a4][object.y+a5]||G[object.x+a6][object.y+a7]) return 1; else return 0; } int CGameDlg::check3() //走动条件 { if(object.y>N-1||object.y+a3>N-1||object.y+a5>N-1||object.y+a7>N-1) return 1; else if(G[object.x+a0][object.y+a1]||G[object.x+a2][object.y+a3] ||G[object.x+a4][object.y+a5]||G[object.x+a6][object.y+a7] ) return 1; else return 0; } void CGameDlg::cout(int a1,int x,int y) { char ch[10]; CDC *pDC=GetDC(); ASSERT(pDC!=NULL); if(a1==-1) pDC->TextOut(x,y,"-1"); else if (a1==0) pDC->TextOut(x,y,"0"); else {gcvt(a1,10,ch);pDC->TextOut(x,y,ch);} ReleaseDC(pDC); } ///////////////////////////////////////////////////////////////////////////// // CMyView message handlers void CGameDlg::OnDraw(CDC* pDC) //开始进入 { // TODO: add draw code for native data here Shape(); int i,j; for(i=0;i<M;i++)for(j=0;j<N;j++)G[i][j]=0; Runing=1;Score=0; object.Type=3;object.x=M/2;object.y=0;object.group=3; ZZ=1; PreView(); Show(object); ChangeShape(object); ObjectGroup(object); switch(m_str.GetCurSel()) { case 0: Run_Time=700;break; case 1: Run_Time=100;break; case 2: Run_Time=400;break; } SetTimer(11,Run_Time,NULL); pointo.x=pointo.y=0; ClientToScreen(&pointo); poinfrom=pointo; } void CGameDlg::Shape() //外部框架 { int line=18;int rr=4; CDC *pDC=GetDC(); ASSERT(pDC!=NULL); CPen pen; pen.CreatePen (PS_SOLID,1,RGB(0,0,0)); CBrush brush1,brush2,brush3; brush1.CreateSolidBrush (RGB(60,60,60)); brush3.CreateSolidBrush (RGB(0,170,0)); brush2.CreateSolidBrush (BackColor); pDC->SelectObject (pen); pDC->SelectObject (brush1); pDC->Rectangle(X-line,Y-line,X+M*r+line,Y+N*r+line); int b=line*2/3,c=b-rr; pDC->SelectObject (brush3); pDC->Rectangle(X-b,Y-b,X+M*r+b,Y+N*r+b); pDC->SelectObject (brush1); pDC->Rectangle(X-c,Y-c,X+M*r+c,Y+N*r+c); pDC->SelectObject (brush2); pDC->Rectangle(X-2,Y-2,X+M*r+2,Y+N*r+2); DeleteObject(pen);DeleteObject(brush1); DeleteObject(brush2);DeleteObject(brush3); ReleaseDC(pDC); } void CGameDlg::one(int Type, int i, int j) //某元格颜色 位置 { if(Runing==0){OnDestroy();return;} CDC *pDC=GetDC(); ASSERT(pDC!=NULL); COLORREF color,L_color=RGB(0,0,0); switch(Type) { case 0: color=L_color=BackColor;break; case 1: color=RGB(131,129,222); break; case 2: color=RGB(250,90,130); break; case 3: color=RGB(40,220,250); break; case 4: color=RGB(40,120,50); break; case 5: color=RGB(0,250,0); break; case 6: color=RGB(131,19,222); break; case 7: color=RGB(120,190,30); break; case 8: color=RGB(140,20,150); break; case 9: color=RGB(40,120,150); break; case 10: color=RGB(23,62,180); break; case 11: color=RGB(131,129,22); break; case 12: color=RGB(20,190,130); break; case 13: color=RGB(40,234,220); break; case 14: color=RGB(140,70,150); break; case 15: color=RGB(30,150,40); break; case 16: color=RGB(78,203,30); break; case 17: color=RGB(120,100,30); break; case 18: color=RGB(240,70,20); break; case 19: color=RGB(40,180,90); break; case 20: color=RGB(123,62,180); break; case 21: color=RGB(120,0,20); break; case 22: color=RGB(0,0,250); break; case 23: color=RGB(0,250,0); break; case 24: color=RGB(0,250,250); break; case 25: color=RGB(250,0,0); break; case 26: color=RGB(250,0,250); break; case 27: color=RGB(250,250,0); break; case 28: color=RGB(250,250,250);break; case 29: color=RGB(rand()%250,rand()%250,rand()%250); break; case 30: color=RGB(rand()%250,rand()%250,rand()%250); break; case 31: color=RGB(rand()%250,rand()%250,rand()%250); break; case 32: color=RGB(rand()%250,rand()%250,rand()%250); break; case 33: color=RGB(rand()%250,rand()%250,rand()%250); break; case 34: color=RGB(rand()%250,rand()%250,rand()%250); break; } CPen pen; CBrush brush; pen.CreatePen (PS_SOLID,1,L_color); brush.CreateSolidBrush (color); pDC->SelectObject (pen); pDC->SelectObject (brush); pDC->Rectangle(X+i*r,Y+j*r,X+(i+1)*r,Y+(j+1)*r); DeleteObject(pen);DeleteObject(brush); ReleaseDC(pDC); } void CGameDlg::ObjectGroup(OBJECT object)//画组 { if(Runing==0){OnDestroy();return;} one(object,a1,a0); one(object,a3,a2); one(object,a5,a4); one(object,a7,a6); } void CGameDlg::DeleteGroup(OBJECT object)//删组 { if(Runing==0){OnDestroy();return;} Clear(a0,a1); Clear(a2,a3); Clear(a4,a5); Clear(a6,a7); } void CGameDlg::ChangeShape(OBJECT object)//转组 { int z[4][2]={0},i,j,k; if(Runing==0){OnDestroy();return;} do{ switch(object.group) { case 1: ZZ=0; z[1][0]=1;z[1][1]=0; z[2][0]=0;z[2][1]=1;z[3][0]=1;z[3][1]=1;break; case 2: ZZ++; ZZ%=4; switch(ZZ) { case 0: z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][0]=-1;z[3][1]=-1;break; case 1: z[1][0]=0;z[1][1]=1; z[2][0]=0;z[2][1]=-1;z[3][0]=1;z[3][1]=-1;break; case 2: z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=1;break; case 3: z[1][0]=0;z[1][1]=-1; z[2][0]=0;z[2][1]=1;z[3][0]=-1;z[3][1]=1;break; } break; case 3: ZZ++; ZZ%=4; switch(ZZ) { case 0: z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=-1;break; case 1: z[1][0]=0;z[1][1]=1; z[2][0]=0;z[2][1]=-1;z[3][0]=1;z[3][1]=1;break; case 2: z[1][0]=-1;z[1][1]=0; z[2][0]=1;z[2][1]=0;z[3][0]=-1;z[3][1]=1;break; case 3: z[1][0]=0;z[1][1]=-1; z[2][0]=0;z[2][1]=1;z[3][0]=-1;z[3][1]=-1;break; } break; case 4: ZZ++; ZZ%=2; switch(ZZ) { case 1:z[1][0]=0;z[1][1]=-1; z[2][0]=0;z[2][1]=2;z[3][0]=0;z[3][1]=1;break; case 0:z[1][0]=1;z[1][1]=0; z[2][0]=2;z[2][1]=0;z[3][0]=-1;z[3][1]=0;break; } break; case 5: ZZ++; ZZ%=2; switch(ZZ) { case 1:z[1][0]=0;z[1][1]=-1; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=1;break; case 0:z[1][0]=0;z[1][1]=1; z[2][0]=-1;z[2][1]=1;z[3][0]=1;z[3][1]=0;break; } break; case 6: ZZ++; ZZ%=2; switch(ZZ) { case 1:z[1][0]=0;z[1][1]=1; z[2][0]=1;z[2][1]=0;z[3][0]=1;z[3][1]=-1;break; case 0:z[1][0]=-1;z[1][1]=0; z[2][0]=0;z[2][1]=1;z[3][0]=1;z[3][1]=1;break; } break; case 7: ZZ++; ZZ%=4; switch(ZZ) { case 0:z[1][0]=0;z[1][1]=-1; z[2][0]=1;z[2][1]=0;z[3][0]=-1;z[3][1]=0;break; case 1:z[1][0]=0;z[1][1]=1; z[2][0]=0;z[2][1]=-1;z[3][0]=1;z[3][1]=0;break; case 2:z[1][0]=0;z[1][1]=1; z[2][0]=-1;z[2][1]=0;z[3][0]=1;z[3][1]=0;break; case 3:z[1][0]=-1;z[1][1]=0; z[2][0]=0;z[2][1]=1;z[3][0]=0;z[3][1]=-1;break; } break; } int t[8];for(i=0,k=0;i<4;i++)for(j=0;j<2;j++) {t[k]=z[i][j];k++;} InPut(object,t); } while(check2()||check1()); } void CGameDlg::Show(OBJECT object)//显示某组信息 { if(Runing==0){OnDestroy();return;} CDC *pDC=GetDC(); ASSERT(pDC!=NULL); CBrush brush; brush.CreateSolidBrush (RGB(255,255,255)); pDC->SelectObject (brush); pDC->Rectangle(m_a-10,m_b-10,m_a+95,m_b+140); DeleteObject(brush); char ch[10]; pDC->SetTextColor(RGB(200,13,6)); pDC->TextOut(m_a,m_b,"Type: ");gcvt(object.Type,10,ch); pDC->TextOut(m_a+40,m_b,ch); pDC->SetTextColor(RGB(45,13,230)); pDC->TextOut(m_a,m_b+20,"i:"); cout(object.x,m_a+20,m_b+20); pDC->TextOut(m_a+40,m_b+20,"j:"); cout(object.y,m_a+70,m_b+20); pDC->SetTextColor(RGB(45,213,10)); pDC->TextOut(m_a,m_b+38,"groups: ");gcvt(object.group,10,ch); pDC->TextOut(m_a+50,m_b+40,ch); pDC->SetTextColor(RGB(140,213,6)); pDC->TextOut(m_a,m_b+60,"ZZ: "); cout(ZZ,m_a+50,m_b+60); int R=0; cout(a1,m_a+R*20,m_b+80);R++; cout(a3,m_a+R*20,m_b+80);R++; cout(a5,m_a+R*20,m_b+80);R++; cout(a7,m_a+R*20,m_b+80);R++; R=0; cout(a0,m_a+R*20,m_b+100);R++; cout(a2,m_a+R*20,m_b+100);R++; cout(a4,m_a+R*20,m_b+100);R++; cout(a6,m_a+R*20,m_b+100);R++; pDC->SetTextColor(RGB(0,123,125)); pDC->TextOut(m_a,m_b+120,"分数: "); pDC->SetTextColor(RGB(230,23,125)); gcvt(Score,10,ch); pDC->TextOut(m_a+40,m_b+120,ch); ReleaseDC(pDC); } void CGameDlg::InPut(OBJECT object,int t[])//状态付值 { a0=t[0];a1=t[1];a2=t[2];a3=t[3]; a4=t[4];a5=t[5];a6=t[6];a7=t[7]; } void CGameDlg::OnTimer(UINT nIDEvent) //处理往下运动过程 { //+_______________________________________________________________________________________ //============================================2 if(nIDEvent==2) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.x+=10; if(p1.x>desktopRect.Width()) { KillTimer(2); Set=2; Si.left=LW-T; Si.top=Sj.top; Si.right=LW; Si.bottom=Sj.bottom; } } if(nIDEvent==6) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.x-=10; if(p1.x<=pp.x) KillTimer(6); } //============================================3 if(nIDEvent==3) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.y+=10; if(p1.y>desktopRect.Height()) { KillTimer(3); Set=3; Si.left=Sj.left; Si.top=LH-T; Si.right=Sj.right; Si.bottom=LH; } } if(nIDEvent==7) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.y-=10; if(p1.y<=pp.y) KillTimer(7); } //============================================1 if(nIDEvent==1) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.y-=10; if(p1.y+m_H+10<0) { KillTimer(1); Set=1; Si.left=Sj.left; Si.top=0; Si.right=Sj.right; Si.bottom=T; } } if(nIDEvent==5) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.y+=10; if(p1.y>=30) KillTimer(5); } //============================================4 if(nIDEvent==4) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.x-=10; if(p1.x+m_W+10<0) { KillTimer(4); Set=4; Si.left=0; Si.top=Sj.top; Si.right=T; Si.bottom=Sj.bottom; } } if(nIDEvent==8) { MoveWindow(p1.x,p1.y,m_W,m_H); p1.x+=10; if(p1.x>=30) KillTimer(8); } //____________________________________________ if(nIDEvent==9) { CPoint p2; GetCursorPos(&p2); if(Check(p2,Si)&&Set) {SetTimer(Set+4,10,NULL);Set=0;} } if(nIDEvent==10) { CPoint p; GetCursorPos(&p); if(p!=rectp) rectp=p; p=ooo; ClientToScreen(&p); if(p!=recto) recto=p; Sj.left=recto.x; Sj.top=recto.y; Sj.right=recto.x+m_W; Sj.bottom=recto.y+m_H; } //___________________________________________________________________________________________ if(nIDEvent==11) { // TODO: Add your message handler code here DeleteGroup(object); int b_x=object.x,b_y=object.y; object.y++; pointo.x=pointo.y=0; ClientToScreen(&pointo); if(poinfrom!=pointo||Back){ poinfrom=pointo;ReDraw();Back=0;} if(check3()) { object.y=b_y; ObjectGroup(object); KillTimer(11); KeepData(); object.Type=object2.Type;object.x=object2.x; object.y=object2.y;object.group=object2.group;ZZ=ZZ2; a0=b0;a1=b1;a2=b2;a3=b3;a4=b4;a5=b5;a6=b6;a7=b7; SetTimer(11,Run_Time,NULL); for(int i=0;i<ZZ;i++)ChangeShape(object); object3.Type=object.Type;object3.x=object.x; object3.y=object.y;object3.group=object.group;ZZ3=ZZ; c0=a0;c1=a1;c2=a2;c3=a3;c4=a4;c5=a5;c6=a6;c7=a7; ClearUp(); PreView(); object.x=16;object.y=10; object.Type=object2.Type; object.group=object2.group;ZZ=ZZ2; a0=b0;a1=b1;a2=b2;a3=b3;a4=b4;a5=b5;a6=b6;a7=b7; ObjectGroup(object); object.Type=object3.Type;object.x=object3.x; object.y=object3.y;object.group=object3.group;ZZ=ZZ3; a0=c0;a1=c1;a2=c2;a3=c3;a4=c4;a5=c5;a6=c6;a7=c7; } else ObjectGroup(object); Show(object); } } void CGameDlg::KeepData() //保存放好所在位置 { G[object.x+a0][object.y+a1]=object.Type; G[object.x+a2][object.y+a3]=object.Type; G[object.x+a4][object.y+a5]=object.Type; G[object.x+a6][object.y+a7]=object.Type; int i,j,k,p,q,o=0; for(i=0;i<M;i++) if(G[i][1]>0||G[i][0]>0) {Runing=0;AfxMessageBox("游戏结束!");CGameDlg dlg; dlg.DoModal();return;} for(j=N-1;j>=0;j--) { for(i=0,k=0;i<M;i++) if(G[i][j]>0) k++; if(k==M) { o++; for(p=j;p>=1;p--)for(q=0;q<M;q++) {G[q][p]=G[q][p-1];one(G[q][p],q,p);} for(q=0;q<M;q++) {G[q][0]=0;one(G[q][p],q,p);} j++;Score+=100*o; } } } void CGameDlg::OnDestroy() //关闭 { CGameDlg::OnDestroy(); for(int i=1;i<=11;i++) KillTimer(i); // TODO: Add your message handler code here } void CGameDlg::PreView() //预先显示组 { if(Runing==0){OnDestroy();return;} CTime tm=CTime::GetCurrentTime(); object2.Type=(rand()+tm.GetMinute()+tm.GetSecond())%V+1; object2.x=M/2;object2.y=0; object2.group=(tm.GetMinute()*tm.GetSecond()+rand())%7+1; ZZ2=(rand()+tm.GetDay()*tm.GetHour())%97; b0=b1=b2=b3=b4=b5=b6=b7=0; switch(object2.group) { case 1: b2=0;b3=1;b4=1;b5=0;b6=1;b7=1; break; case 2: b2=0;b3=1;b4=0;b5=-1;b6=1;b7=-1;break; case 3: b2=0;b3=1;b4=0;b5=-1;b6=1;b7=1; break; case 4: b2=0;b3=1;b4=0;b5=2;b6=0;b7=-1; break; case 5: b2=0;b3=-1;b4=1;b5=0;b6=1;b7=1; break; case 6: b2=0;b3=1;b4=1;b5=0;b6=1;b7=-1; break; case 7: b2=0;b3=1;b4=0;b5=2;b6=1;b7=1; break; } for(int i=0;i<ZZ2;i++) ChangeShape(object2); if(object2.y+b3<0||object2.y+b5<0||object2.y+b7<0||object2.y<0) object2.y=object2.y+1; if(object2.y+b3>0&&object2.y+b5>0&&object2.y+b7>0&&object2.y>0) object2.y=0; } void CGameDlg::OnButton1() { CDC *pDC=GetDC(); ASSERT(pDC!=NULL); OnDraw(pDC); ReleaseDC(pDC); } void CGameDlg::OnDown() { if(!Runing)return; MoveOn(3); ObjectGroup(object); KillTimer(11); SetTimer(11,10,NULL); } void CGameDlg::OnLeft() { if(!Runing)return; MoveOn(4); } void CGameDlg::OnRight() { if(!Runing)return; MoveOn(2); } void CGameDlg::OnUp() { if(!Runing)return; MoveOn(1); } void CGameDlg::MoveOn(int n) { // TODO: Add your message handler code here and/or call default CDC *pDC=GetDC(); ASSERT(pDC!=NULL); DeleteGroup(object);int b_x=object.x,b_y=object.y; switch(n) { case 1: ChangeShape(object); ObjectGroup(object); break; case 2: object.x=object.x<M-1?object.x+1:M-1; if(check1())object.x=b_x; ObjectGroup(object); break; case 3: object.y=object.y<N-1?object.y+1:N-1; if(check2())object.y=b_y; ObjectGroup(object); break; case 4: object.x=object.x>1?object.x-1:0; if(check1())object.x=b_x; ObjectGroup(object); break; case 5: object.y=object.y>1?object.y-1:0; if(check2())object.y=b_y; ObjectGroup(object); break; } Show(object); ReleaseDC(pDC); } void CGameDlg::ClearUp() //清空预备显示 地方 { CDC *pDC=GetDC(); ASSERT(pDC!=NULL); COLORREF color=RGB(233,230,214); CPen pen; CBrush brush; pen.CreatePen (PS_SOLID,1,color); brush.CreateSolidBrush (color); pDC->SelectObject (pen); pDC->SelectObject (brush); pDC->Rectangle(J_x,J_y,J_x+118,J_y+155); DeleteObject(brush);DeleteObject(pen); ReleaseDC(pDC); } void CGameDlg::OnBackcolor() //背景色 { CColorDialog dlg(BackColor); //++++++++++++++ if(dlg.DoModal()==IDOK) BackColor=dlg.GetColor(); Back=1; } void CGameDlg::ReDraw() { Shape(); for(int j,i=0;i<M;i++) for(j=0;j<N;j++) one(G[i][j],i,j); } int CGameDlg::Check(CPoint p, CRect rect) { if(p.x>=rect.left&&p.x<=rect.right&&p.y>=rect.top&&p.y<=rect.bottom) return 1; else return 0; } int CGameDlg::WentTo() { int AB1,AB2,AB3,AB4,k,t; AB4=Sj.left; AB1=Sj.top; AB2=LW-Sj.right; AB3=LH-Sj.bottom; AB1>AB4?(k=AB4,t=4):(k=AB1,t=1); k>AB2?(k=AB2,t=2):(k=k,t=t); k>AB3?(k=AB3,t=3):(k=k,t=t); if(k<10) return t; else return 0; } void CGameDlg::OnButton5() { // TODO: Add your control notification handler code here p1.x=p1.y=0; ClientToScreen(&p1); pp=p1; SetTimer(1,10,NULL); UpdateData(FALSE); } void CGameDlg::OnButton2() { // TODO: Add your control notification handler code here p1.x=p1.y=0; ClientToScreen(&p1); pp=p1; SetTimer(2,10,NULL); } void CGameDlg::OnButton3() { // TODO: Add your control notification handler code here p1.x=p1.y=0; ClientToScreen(&p1); pp=p1; SetTimer(3,10,NULL); } void CGameDlg::OnButton4() { // TODO: Add your control notification handler code here p1.x=p1.y=0; ClientToScreen(&p1); pp=p1; SetTimer(4,10,NULL); } void CGameDlg::OnMyself() { // TODO: Add your control notification handler code here CDC *pDC=GetDC(); ASSERT(pDC!=NULL); int m_x=425,m_y=490; pDC->SetBkMode(TRANSPARENT); pDC->SetTextColor(RGB(15,113,210)); pDC->TextOut(m_x,m_y,"2004年10月11日"); CFont font; font.CreateFont(25,0,0,0,800,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"楷体");//宋体楷体 pDC->SelectObject(font); pDC->SetTextColor(RGB(165,124,10)); pDC->TextOut(m_x+20,m_y+30,"作者: "); pDC->SetTextColor(RGB(165,13,170)); pDC->TextOut(m_x,m_y+60,"ZhuSunsheng"); DeleteObject(font); Gameover dlg; if(dlg.DoModal()==IDOK) CDialog::OnCancel(); Back=1; //重画 ReleaseDC(pDC); }