📄 xunaelsfkdlg.cpp
字号:
void CXuNaElsFKDlg::MoveOn(int n)
{
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 CXuNaElsFKDlg::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 CXuNaElsFKDlg::OnCancelMode()
{
CDialog::OnCancelMode();
// TODO: Add your message handler code here
}
void CXuNaElsFKDlg::OnChar(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnChar(nChar, nRepCnt, nFlags);
}
void CXuNaElsFKDlg::OnDestroy()
{
CXuNaElsFKDlg::OnDestroy();
for(int i=1;i<=11;i++) KillTimer(i);
}
void CXuNaElsFKDlg::OnDraw(CDC *pDC)
{
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);
if (Run_Time == 0)
Run_Time =500;
SetTimer(11,Run_Time,NULL);
pointo.x=pointo.y=0;
ClientToScreen(&pointo);
poinfrom=pointo;
}
void CXuNaElsFKDlg::one(OBJECT object, int a, int b)
{
one(object.Type, object.x+b, object.y+a);
}
void CXuNaElsFKDlg::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+10,X+(i+1)*r,Y+(j+1)*r+10);
DeleteObject(pen);DeleteObject(brush);
ReleaseDC(pDC);
}
void CXuNaElsFKDlg::one(OBJECT object)
{
Clear_away;
one(object.Type, object.x, object.y);
}
void CXuNaElsFKDlg::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
// TODO: Add your message handler code here and/or call default
CDialog::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CXuNaElsFKDlg::OnTimer(UINT nIDEvent)
{
// TODO: Add your message handler code here and/or call default
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);
}
//CDialog::OnTimer(nIDEvent);
}
BOOL CXuNaElsFKDlg::PreTranslateMessage(MSG *pMsg)
{
if(WM_KEYDOWN == pMsg->message )
{
if(stopflag == true) return true;
if('W' == pMsg->wParam || VK_UP == pMsg->wParam)
{
if(!Runing)return true;
MoveOn(1);
return true;
}
if('A' == pMsg->wParam || VK_LEFT == pMsg->wParam)
{
if(!Runing)return true;
MoveOn(4);
return true;
}
if('S' == pMsg->wParam || VK_DOWN == pMsg->wParam)
{
if(!Runing)return true;
MoveOn(3);
ObjectGroup(object);
KillTimer(11);
SetTimer(11,10,NULL);
}
if('D' == pMsg->wParam || VK_RIGHT == pMsg->wParam)
{
if(!Runing)return true;
MoveOn(2);
return true;
}
}
return CDialog::PreTranslateMessage(pMsg);
}
void CXuNaElsFKDlg::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 CXuNaElsFKDlg::ReDraw()
{
Shape();
for(int j,i=0;i<M;i++) for(j=0;j<N;j++)
one(G[i][j],i,j);
}
void CXuNaElsFKDlg::Shape()
{
int line=18;int rr=4;
CDC *pDC=GetDC();
ASSERT(pDC!=NULL);
CPen pen;
pen.CreatePen (PS_SOLID,1,RGB(0,100,200));
CBrush brush1,brush2,brush3;
brush1.CreateSolidBrush (RGB(10,10,10));
brush3.CreateSolidBrush (RGB(10,10,10));
brush2.CreateSolidBrush (BackColor);
pDC->SelectObject (pen);
pDC->SelectObject (brush1);
//pDC->Rectangle(X-line,Y-line+10,X+M*r+line,Y+N*r+line+10);
int b=line*2/3,c=b-rr;
pDC->SelectObject (brush3);
//pDC->Rectangle(X-b,Y-b+10,X+M*r+b,Y+N*r+b+10);
pDC->SelectObject (brush1);
//pDC->Rectangle(X-c,Y-c+10,X+M*r+c,Y+N*r+c+10);
pDC->SelectObject (brush2);
pDC->Rectangle(X-2,Y-2+10,X+M*r+2,Y+N*r+2+10);
DeleteObject(pen);DeleteObject(brush1);
DeleteObject(brush2);DeleteObject(brush3);
ReleaseDC(pDC);
}
void CXuNaElsFKDlg::Show(OBJECT object)
{
if(Runing==0){OnDestroy();return;}
UpdateData(true);
m_fenshu = Score;
UpdateData(false);
}
void CXuNaElsFKDlg::OnStart()
{
// TODO: Add your control notification handler code here
CDC *pDC=GetDC(); ASSERT(pDC!=NULL);
OnDraw(pDC);
ReleaseDC(pDC);
}
void CXuNaElsFKDlg::OnStop()
{
// TODO: Add your control notification handler code here
stopflag = true;
SetTimer(11,100000,NULL);
//Run_TimeTemp =0;
return;
}
void CXuNaElsFKDlg::OnContinue()
{
// TODO: Add your control notification handler code here
stopflag = false;
SetTimer(11,Run_Time,NULL);
}
void CXuNaElsFKDlg::OnExit()
{
// TODO: Add your control notification handler code here
CXuNaElsFKDlg::OnCancel();
}
void CXuNaElsFKDlg::OnYouxiimf()
{
CGameAboutDlg dlg;
dlg.DoModal();
}
void CXuNaElsFKDlg::OnZuozheimf()
{
CAboutDlg dlg;
dlg.DoModal();
}
void CAboutDlg::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
}
BOOL CXuNaElsFKDlg::OnEraseBkgnd(CDC* pDC)
{
CBitmap Bitmap;
CDC dcMemory;
Bitmap.LoadBitmap(IDB_BITMAP2); //IDB_BITMAP2
dcMemory.CreateCompatibleDC(pDC);
CBitmap* OldBitmap=dcMemory.SelectObject(&Bitmap);
pDC->BitBlt(0,0,800,700,&dcMemory,0,0,SRCCOPY);
Bitmap.DeleteObject();
dcMemory.SelectObject(OldBitmap);
dcMemory.DeleteDC();
ReleaseDC(pDC);
return TRUE;
//return CDialog::OnEraseBkgnd(pDC);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -