📄 gamedlg.cpp
字号:
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);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -