📄 wendlg.cpp
字号:
this->GetWindowRect(&rect);
CPaintDC dc(this); // 用于绘制的设备上下文
dc.BitBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,op_dc,0,0,SRCCOPY);
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CwenDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CwenDlg::OnLButtonDown(UINT nFlags, CPoint point)
{
if(tss.k_b)
return;
/* CBrush m_Brush,*m_pBrush;
int x,y;
x=point.x-(point.x+11)%20;
y=point.y-(point.y+11)%20;
if((x>809)|(y>609)|(x<10)|(y<10)) //超出表格退出
return;
tss.k_b=1;
k_x=(point.x+11)/20-1;
k_y=(point.y+11)/20-1;
m_Brush.CreateSolidBrush(RGB(0,255,255));
m_pBrush=bg_dc->SelectObject(&m_Brush);
my_dc->Rectangle(0,0,19,19);
my_dc->SetBkColor(RGB(255,0,0));
my_dc->TextOutA(1,1,"ab");
my_dc->SelectObject(m_pBrush);
m_Brush.DeleteObject();
op_dc->BitBlt(x,y,19,19,my_dc,0,0,SRCCOPY);
gdc->BitBlt(0,0,tss.window_k-90,tss.window_g,op_dc,0,0,SRCCOPY); //复制到显示缓存 OnPaint
*/
}
void CwenDlg::OnDestroy()
{
delete op_bitmap; // 背景图
delete op_dc;
delete bg_bitmap; // 背景图
delete bg_dc;
delete my_bitmap; // 背景图
delete my_dc;
m_this=m_head->next;
while(m_head!=m_this)
{
m_new=m_this; // 2
m_this=m_new->next; // 3
free(m_new);
}
free(m_head);
if(d_head!=NULL)
{
while(d_head->next!=NULL)
{
d_new=d_head; // 2
d_head=d_new->next; // 3
free(d_new);
}
free(d_head);
}
}
void CwenDlg::OnTimer(UINT_PTR nIDEvent)
{
switch(nIDEvent)
{
case 1:
{
CString tmp;
bool j=0,k=0;
int x,y;
if(tss.dell) //删除一个色块标志()
{
tss.dell=0;
return;
}
if(tss.k_b)
{
switch(tss.fx[0]) // 检测当前点位置
{
case 1:{y=m_head->y-1; x=m_head->x;} break;
case 2:{y=m_head->y+1; x=m_head->x;} break;
case 3:{x=m_head->x-1; y=m_head->y;} break;
case 4:{x=m_head->x+1; y=m_head->y;} break;
}
if((k_x==x)&(k_y==y)) // 检测是否遇到红点
{
m_new=(struct kuai_type *)malloc(sizeof(struct kuai_type));
m_new->next=m_head;
m_new->prv=m_this;
m_this->next=m_new;
m_head->prv=m_new;
m_head=m_new;
m_head->x=x;
m_head->y=y;
SetSk(m_head);
tss.sulan++;
tmp.Format("%d",tss.sulan);
m_11.SetWindowTextA(tmp);
if(tss.sulan>49)
{
playresource(IDR_WAVE4); // 播放声音
KillTimer(1);
tmp="下一关";
tss.sudu-=30;
m_5.SetWindowTextA(tmp);
tss.ToNext=1;
if(d_head!=NULL)
{
while(d_head->next!=NULL) // 清除空间
{
d_new=d_head; // 2
d_head=d_new->next; // 3
free(d_new);
}
free(d_head);
d_head=NULL;
}
return;
}
sk_rand();
dk_rand();
dk_rand();
//dk_rand();
if(tss.key==2)
tss.fx[0]=tss.fx[1];
if(tss.key>0)
tss.key--;
playresource(IDR_WAVE5); // 播放声音
return;
}
if(d_head!=NULL)
{
d_new=d_head;
if((d_new->x==x)&(d_new->y==y))
k=1;
while((d_new->next!=NULL)&!k) // 检测是否遇到炸弹
{
if(d_new->next!=NULL)
d_new=d_new->next;
if((d_new->x==x)&(d_new->y==y))
k=1;
else
k=0;
}
if(k) // 遇到炸弹后处理
{//-----------------------------------------
tss.sulan--;
tss.zd_su--;
tmp.Format("%d",tss.sulan);
m_11.SetWindowTextA(tmp);
if(tss.sulan<3)
{
playresource(IDR_WAVE1); // 播放声音
KillTimer(1);
tss.sudu=250;
tmp="OVER";
m_sta.SetWindowTextA(tmp);
tmp.Format("%d",tss.sudu);
m_9.SetWindowTextA(tmp);
if(d_head!=NULL)
{
while(d_head->next!=NULL) // 清除炸弹空间
{
d_new=d_head; // 2
d_head=d_new->next; // 3
free(d_new);
}
free(d_head);
d_head=NULL;
}
return;
}
if((d_new->prv==NULL)&(d_new->next==NULL))
d_head=NULL;
else if(d_new->prv==NULL)
{
d_head=d_new->next;
d_head->prv=NULL;
}
else if(d_new->next==NULL)
d_new->prv->next=NULL;
else
{
d_new->prv->next=d_new->next; //重链炸弹表
d_new->next->prv=d_new->prv;
}
free(d_new); //删除炸弹表
m_new=m_this->prv;
m_new->next=m_head; // 链接
m_head->prv=m_new; // 链接
DellSk(m_this); // 删除显示格
free(m_this); // 清除内存空间
m_this=m_new; // 将HEAD移动到
SetSkXy(x,y);
if(tss.key==2)
tss.fx[0]=tss.fx[1];
if(tss.key>0)
tss.key--;
playresource(IDR_WAVE3); // 播放声音
//dk_rand();
//dk_rand();
return;
}//------------------------------------------
}
}
DellSk(m_this); //删除最后的色块
m_head=m_this;
m_this=m_this->prv;
switch(tss.fx[0])
{
case 1:{m_head->y=m_head->next->y-1; m_head->x=m_head->next->x;} break;
case 2:{m_head->y=m_head->next->y+1; m_head->x=m_head->next->x;} break;
case 3:{m_head->x=m_head->next->x-1; m_head->y=m_head->next->y;} break;
case 4:{m_head->x=m_head->next->x+1; m_head->y=m_head->next->y;} break;
}
if(tss.key==2)
tss.fx[0]=tss.fx[1];
if(tss.key>0)
tss.key--;
m_new=m_head->next;
while(m_new!=m_head) // 追尾检测
{
if((m_head->x==m_new->x)&(m_head->y==m_new->y))
j=1;
m_new=m_new->next;
}
if((m_head->y>29)|(m_head->y<0)|(m_head->x>39)|(m_head->x<0)|j)
{
playresource(IDR_WAVE1); // 播放声音
KillTimer(1); // 边线检测
tss.sudu=250;
tmp="OVER";
m_sta.SetWindowTextA(tmp);
if(d_head!=NULL)
{
while(d_head->next!=NULL) // 清除空间
{
d_new=d_head; // 2
d_head=d_new->next; // 3
free(d_new);
}
free(d_head);
d_head=NULL;
}
return;
}
SetSk(m_head);
}break;
}
}
void CwenDlg::OnBnClickedSta()
{
static bool T;
CString tmp;
GetDlgItemText(IDC_5,tmp);
if(tmp=="下一关")
{
playresource(IDR_WAVE6); // 播放声音
this->SetTimer(1,tss.sudu,NULL);
tmp="暂停[F3]";
m_5.SetWindowTextA(tmp);
}
if(!T)
{
playresource(IDR_WAVE6);
this->SetTimer(1,tss.sudu,NULL);
tmp="停止";
m_cls();
m_sta.SetWindowTextA(tmp);
GetDlgItemText(IDC_16,tmp);
if(tmp=="显示网格")
OnBnClicked16();
}
else
{KillTimer(1);
playresource(IDR_WAVE5); // 播放声音
tmp="开始";
m_sta.SetWindowTextA(tmp);}
T=!T;
}
BOOL CwenDlg::PreTranslateMessage(LPMSG lpmsg)
{
BOOL bHandleNow=FALSE;
switch(lpmsg->message)
{
case WM_KEYDOWN:
if(lpmsg->wParam==VK_F3)
OnBnClickedButton5();
else
if(tss.key<2) // 判断是否按过
{
switch(lpmsg->wParam)
{
case VK_UP:
if(tss.fx[0]!=2)
tss.fanxan=1;
break;
case VK_DOWN:
if(tss.fx[0]!=1)
tss.fanxan=2;
break;
case VK_LEFT:
if(tss.fx[0]!=4)
tss.fanxan=3;
break;
case VK_RIGHT:
if(tss.fx[0]!=3)
tss.fanxan=4;
break;
case 'w':
if(tss.fx[0]!=2)
tss.fanxan=1;
break;
case 's':
if(tss.fx[0]!=1)
tss.fanxan=2;
break;
case 'a':
if(tss.fx[0]!=4)
tss.fanxan=3;
break;
case 'd':
if(tss.fx[0]!=3)
tss.fanxan=4;
break;
}
bHandleNow=TRUE;
tss.fx[tss.key]=tss.fanxan;
tss.key++;
}
}
return bHandleNow;
}
void CwenDlg::OnBnClicked1()
{
playresource(IDR_WAVE5); // 播放声音
if(tss.fx[0]==2)
return;
tss.fx[0]=1;
}
void CwenDlg::OnBnClicked2()
{
playresource(IDR_WAVE5); // 播放声音
if(tss.fx[0]==1)
return;
tss.fx[0]=2;
}
void CwenDlg::OnBnClicked3()
{
playresource(IDR_WAVE5); // 播放声音
if(tss.fx[0]==4)
return;
tss.fx[0]=3;
}
void CwenDlg::OnBnClickedButton4()
{
playresource(IDR_WAVE5); // 播放声音
if(tss.fx[0]==3)
return;
tss.fx[0]=4;
}
void CwenDlg::OnBnClickedButton5()
{
static bool T;
if(tss.ToNext)
{
CString tmp;
m_cls();
tmp.Format("%d",tss.sudu);
m_9.SetWindowTextA(tmp);
}
CString tmp;
if(!T)
{KillTimer(1);
playresource(IDR_WAVE5); // 播放声音
tmp="继续[F3]";
m_5.SetWindowTextA(tmp);}
else
{
playresource(IDR_WAVE6); // 播放声音
this->SetTimer(1,tss.sudu,NULL);
tmp="暂停[F3]";
m_5.SetWindowTextA(tmp);
}
T=!T;
}
void CwenDlg::OnBnClickedButton6()
{
playresource(IDR_WAVE5); // 播放声音
CString tmp;
if(tss.sulan>200)
return;
tss.sulan++;
m_new=(struct kuai_type *)malloc(sizeof(struct kuai_type));
m_new->next=m_head;
m_new->prv=m_this;
m_this->next=m_new;
m_head->prv=m_new;
m_head=m_new;
switch(tss.fx[0])
{
case 1:{m_head->y=m_head->next->y-1; m_head->x=m_head->next->x;} break;
case 2:{m_head->y=m_head->next->y+1; m_head->x=m_head->next->x;} break;
case 3:{m_head->x=m_head->next->x-1; m_head->y=m_head->next->y;} break;
case 4:{m_head->x=m_head->next->x+1; m_head->y=m_head->next->y;} break;
}
SetSk(m_head);
tmp.Format("%d",tss.sulan);
m_11.SetWindowTextA(tmp);
tss.dell=1;
}
void CwenDlg::OnBnClicked7()
{
playresource(IDR_WAVE5); // 播放声音
CString tmp;
if(tss.sulan<3)
return;
m_new=m_head->next; // 将第二个赋NEW
m_new->prv=m_this; // 链接
m_this->next=m_new; // 链接
DellSk(m_head); // 删除显示格
free(m_head); // 清除内存空间
m_head=m_new; // 将HEAD移动到NEW
tss.sulan--;
tss.dell=1;
tmp.Format("%d",tss.sulan);
m_11.SetWindowTextA(tmp);
}
void CwenDlg::OnBnClicked13()
{
playresource(IDR_WAVE5); // 播放声音
dk_rand();
}
void CwenDlg::OnBnClicked12()
{
playresource(IDR_WAVE5); // 播放声音
if(d_head==NULL)
return;
int x,y;
d_this=d_head;
while(d_this->next!=NULL)
d_this=d_this->next;
if(d_this->prv==NULL)
d_head=NULL;
else
d_this->prv->next=NULL;
x=d_this->x;
y=d_this->y;
free(d_this);
SetSkXy(x,y);
}
void CwenDlg::OnBnClicked14()
{
playresource(IDR_WAVE5); // 播放声音
if(tss.sudu<50)
return;
tss.sudu-=20;
KillTimer(1);
this->SetTimer(1,tss.sudu,NULL);
CString tmp;
tmp.Format("%d",tss.sudu);
m_9.SetWindowTextA(tmp);
}
void CwenDlg::OnBnClicked15()
{
playresource(IDR_WAVE5); // 播放声音
if(tss.sudu>300)
return;
tss.sudu+=20;
KillTimer(1);
this->SetTimer(1,tss.sudu,NULL);
CString tmp;
tmp.Format("%d",tss.sudu);
m_9.SetWindowTextA(tmp);
}
void CwenDlg::OnBnClicked16()
{
playresource(IDR_WAVE5); // 播放声音
static bool T;
CString tmp;
if(!T)
{
tmp="显示网格";
DellBg();
m_16.SetWindowTextA(tmp);
}
else
{
tmp="消隐网格";
DisBg();
m_16.SetWindowTextA(tmp);
}
T=!T;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -