📄 gamedlg.cpp
字号:
brush4.CreateSolidBrush (color4);
pDC->SelectObject(pen); //把之前的再重画,以覆盖走过的痕迹,边框
/////////////////////////////////////////////////////////////////////
// pDC->SelectObject(brush2); //美化添加一个边框
// pDC->Rectangle(X+i*r,Y+j*r,X+(i+1)*r,Y+(j+1)*r);
/////////////////////////////////////////////////////////////////////
/////////
////////////////////////////////////////////
//////////////////////////////////////////////
// if(go)
// {
/////上边
pDC->SelectObject(brush4);
POINT pt_up[4]={{X+i*r,Y+j*r},{X+(i+1)*r,Y+j*r},{X+(i+1)*r-5,Y+j*r+5},{X+i*r+5,Y+j*r+5}};
pDC->Polygon(pt_up,4);
/////左边
pDC->SelectObject(brush);
POINT pt_left[4]={{X+i*r,Y+j*r},{X+i*r+5,Y+j*r+5},{X+i*r+5,Y+(j+1)*r-5},{X+i*r,Y+(j+1)*r}};
pDC->Polygon(pt_left,4);
/////右边
pDC->SelectObject(brush2);
POINT pt_right[4]={{X+(i+1)*r,Y+j*r},{X+(i+1)*r-5,Y+j*r+5},{X+(i+1)*r-5,Y+(j+1)*r-5},{X+(i+1)*r,Y+(j+1)*r}};
pDC->Polygon(pt_right,4);
/////下边
pDC->SelectObject(brush3);
POINT pt_down[4]={{X+i*r,Y+(j+1)*r},{X+i*r+5,Y+(j+1)*r-5},{X+(i+1)*r-5,Y+(j+1)*r-5},{X+(i+1)*r,Y+(j+1)*r}};
pDC->Polygon(pt_down,4);
// }
////////////////////////////////////////////////////////////////////////////////
pDC->SelectObject(brush); //同上,矩形
pDC->Rectangle(X+i*r+4,Y+j*r+4,X+(i+1)*r-3,Y+(j+1)*r-3); //将对应的区域染上颜色,显示成方格
///////////////////////////////////////////////////////////
DeleteObject(brush);
DeleteObject(brush2);
DeleteObject(brush3);
DeleteObject(brush4);
DeleteObject(pen);
// ReleaseDC(pDC);
/////////////////////////////////////////////////////////////////////////////////补框工作
if(repaircount<=4) //本来3就可以,但是个别图像在刚下落时按变形还会破坏边框,所以加画一次
{
// repair--;
int line =18,rr=7;
int b=line*2/3,c=b-rr;
// CDC *pDC=GetDC();
CPen pen1,pen2,pen_bk;
pen1.CreatePen (PS_SOLID,1,RGB(43,45,57));
pen2.CreatePen (PS_SOLID,1,RGB(53,73,162));
pen_bk.CreatePen (PS_SOLID,1,RGB(233,230,214));
CBrush brush11,brush22,brush3_up,brush_bk;
brush11.CreateSolidBrush(RGB(53,73,162));//
brush3_up.CreateSolidBrush(RGB(20,20,20));
brush_bk.CreateSolidBrush(RGB(233,230,214));
pDC->Rectangle(X-2,Z-line,X+M*r+2,Z-1);
pDC->SelectObject (pen2); //
pDC->SelectObject (brush11);
pDC->Rectangle(X-2,Z-line+1,X+M*r+2,Z-2);//
pDC->SelectObject (pen1);
pDC->SelectObject (brush3_up);
POINT pt_up_bu[4]={{X-b,Z-b},{X-b+10,Z-b+7},{X+M*r+b-10,Z-b+7},{X+M*r+b,Z-b}};
pDC->Polygon(pt_up_bu,4);
pDC->SelectObject (pen_bk);
pDC->SelectObject (brush_bk);
pDC->Rectangle(X-2,0,X+M*r+2,Z-line);
DeleteObject(pen1);
DeleteObject(pen2);
DeleteObject(brush11);
DeleteObject(brush22);
DeleteObject(brush3_up);
}
///////////////////////////////////////////////////////////////////////////////////
ReleaseDC(pDC);
}
void CGameDlg::ObjectGroup(OBJECT object)//画组
{
if(Running==0)
{
OnDestroy();
return;
}
one(object,a1,a0); //调用one(OBJECT object,int a,int b)
one(object,a3,a2);
one(object,a5,a4);
one(object,a7,a6);
}
void CGameDlg::DeleteGroup(OBJECT object)//删组
{
if(Running==0)
{
OnDestroy();
return;
}
Clear(a0,a1); //下移一个单位后删除原位置上的图像 调用one(int Type,int i,int j)实际为重画,把原画覆盖
one(0,object.x+a2, object.y+a3); //可用次语句代替,也Clear(a2,a3)相同
//Clear(a2,a3);
Clear(a4,a5);
Clear(a6,a7);
}
void CGameDlg::ChangeShape(OBJECT object)//转组
{
int z[4][2] = {0};
int i,j,k;
if(Running==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(Running==0)
{
OnDestroy();
return;
}
CDC *pDC=GetDC();
ASSERT(pDC!=NULL);
CBrush brush;
brush.CreateSolidBrush(RGB(118,138,231));
pDC->SelectObject(brush);
pDC->Rectangle(m_a-10,m_b+50,m_a+90,m_b+113); //背景色
DeleteObject(brush);
//////////////////////////////////////////////////
//////////////////////////////////////////////////
char ch[10];
/* pDC->SetTextColor(RGB(200,13,6));
pDC->TextOut(m_a,m_b+30,"Type: ");
gcvt(object.Type,10,ch);
pDC->TextOut(m_a+40,m_b+30,ch);
pDC->SetTextColor(RGB(45,13,230));
pDC->TextOut(m_a,m_b+50,"i: ");
cout(object.x,m_a+20,m_b+50);
pDC->TextOut(m_a+40,m_b+50,"j: ");
cout(object.y,m_a+60,m_b+50);
pDC->SetTextColor(RGB(45,213,10));
pDC->TextOut(m_a,m_b+70,"groups: ");
gcvt(object.group,10,ch);
pDC->TextOut(m_a+50,m_b+70,ch);
pDC->SetTextColor(RGB(140,213,6));
pDC->TextOut(m_a,m_b+90,"ZZ: ");
cout(ZZ,m_a+50,m_b+90);
*/
// CFont font;
// font.CreateFont(15,0,0,0,300,0,0,0,OEM_CHARSET,OUT_DEFAULT_PRECIS, //20为字体大小 500为字体粗度
// CLIP_DEFAULT_PRECIS,DEFAULT_QUALITY,DEFAULT_PITCH,"楷体");//宋体楷体
// pDC->SelectObject(font);
pDC->SetBkMode(TRANSPARENT); //无背景色
pDC->SetTextColor(RGB(190,0,100));
pDC->TextOut(m_a-5,m_b+55," 分 数:");
pDC->SetTextColor(RGB(255,255,0));
gcvt(Score,10,ch);
pDC->TextOut(m_a+50,m_b+55,ch);
pDC->SetTextColor(RGB(190,0,100));
pDC->TextOut(m_a-5,m_b+75,"最高分:");
pDC->SetTextColor(RGB(255,255,0));
gcvt(HScore,10,ch);
pDC->TextOut(m_a+50,m_b+75,ch);
// DeleteObject(font);
pDC->SetTextColor(RGB(190,0,100));
pDC->TextOut(m_a-5,m_b+95," LEVEL:");
pDC->SetTextColor(RGB(255,255,0));
gcvt(level,10,ch);
pDC->TextOut(m_a+50,m_b+95,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)
{
////////////////////////////先暂停
KillTimer(11);
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)
{
////////////////////////////先暂停
KillTimer(11);
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)
{
////////////////////////////先暂停
KillTimer(11);
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)
{
////////////////////////////先暂停
KillTimer(11);
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;
CString strButtonCaption;
m_Pause.GetWindowText(strButtonCaption);
m_Pause.SetWindowText("继续");
}
}
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) // 当一个方块已经完全下落后,将预画的方块显示出来
{
repaircount++;
// if(repaircount==3)
// repair=2;
// TODO: Add your message handler code here
DeleteGroup(object);
int b_x=object.x,b_y=object.y;
object.y++;
//////////////////////////////////////////////////////
CDC *pDC=GetDC();
ASSERT(pDC!=NULL);
// CBrush brush;
// pDC->SetBkMode(TRANSPARENT);//无背景色
switch(movie)
{
case 0:
pDC->SetTextColor(RGB(200,73,75));
pDC->TextOut(m_a+5,m_b+240," ");
movie++;
break;
case 1:
pDC->SetTextColor(RGB(200,73,75));
pDC->TextOut(m_a+5,m_b+240," 加 ");
movie++;
break;
case 2:
pDC->SetTextColor(RGB(200,73,75));
pDC->TextOut(m_a+5,m_b+240," 加油 ");
movie++;
break;
case 3:
pDC->SetTextColor(RGB(200,73,75));
pDC->TextOut(m_a+5,m_b+240," 加油啊! ");
movie=0;
break;
}
ReleaseDC(pDC);
//////////////////////////////////////////////////////
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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -