📄 manview.cpp
字号:
{
case MID:
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforbound[pler->getProcess()]);
break;
case RIGHT:
pler->mov_x(flex);
transparence(pler->get_x(),pler->get_y(),&mDC,idbforboundr[pler->getProcess()]);
break;
case LEFT:
pler->mov_x(flex*(-1));
transparence(pler->get_x(),pler->get_y(),&mDC,idbforboundl[pler->getProcess()]);
break;
}
break;
case WOUND: //钉板上
switch(pler->getDirect())
{
case MID:
transparence(pler->get_x(),pler->get_y(),&mDC,IDB_redm);
break;
case RIGHT:
pler->mov_x(5);
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforredfr[pler->getProcess()]);
break;
case LEFT:
pler->mov_x(-5);
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforredfl[pler->getProcess()]);
break;
}
if(!pler->IsLife_left())
{
state=DEAD;
}
break;
case DECLINE://撞天花
for(i=0;i<=3;i++)
{
for(int j=0,k=0;j<=7;j++)
if(bfl[j]->isIn_x(pler->get_x())&&bfl[j]->isEqu_y(pler->get_y()))
{
k=1;
break;
}
if(k==1)
break;
pler->mov_y(-1);
}
switch(pler->getDirect())
{
case MID:
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforreddownm[pler->getProcess()]);
break;
case RIGHT:
pler->mov_x(flex);
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforreddownr[pler->getProcess()]);
break;
case LEFT:
pler->mov_x(flex*(-1));
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforreddownl[pler->getProcess()]);
break;
}
if(!pler->decre_kpred())
pler->setState(FALLING);
if(!pler->IsLife_left())
{
state=DEAD;
}
break;
case BOUNCE://弹跳
for(i=0;i<=4;i++)
{
pler->mov_y(1);
if(pler->get_y()==66)
break;
}
switch(pler->getDirect())
{
case MID:
transparence(pler->get_x(),pler->get_y(),&mDC,nIdbforbound[pler->getProcess()]);
break;
case RIGHT:
pler->mov_x(flex);
transparence(pler->get_x(),pler->get_y(),&mDC,idbforboundr[pler->getProcess()]);
break;
case LEFT:
pler->mov_x(flex*(-1));
transparence(pler->get_x(),pler->get_y(),&mDC,idbforboundl[pler->getProcess()]);
break;
}
break;
}
}
func_infor(&mDC);//显示各种数据和状态
pDC->BitBlt(0,0,mBitmapInfo.bmWidth,mBitmapInfo.bmHeight,&mDC,0,0,SRCCOPY);
mDC.SelectObject(OldBitmap);
tag=1;
// TODO: add draw code for native data here
}
/////////////////////////////////////////////////////////////////////////////
// CManView diagnostics
#ifdef _DEBUG
void CManView::AssertValid() const
{
CView::AssertValid();
}
void CManView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CManDoc* CManView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CManDoc)));
return (CManDoc*)m_pDocument;
}
#endif //_DEBUG
/////////////////////////////////////////////////////////////////////////////
// CManView message handlers
void CManView::OnTimer(UINT nIDEvent)
{
if(state==DEAD)
{
KillTimer(ID_time);
if(bfl[0]->m_wDeviceID)
{
mciSendCommand(bfl[0]->m_wDeviceID,MCI_CLOSE,1,NULL);
bfl[0]->m_wDeviceID=music("die.wav");
}
else
{
bfl[0]->m_wDeviceID=music("die.wav");
}
}
else
{
if(delay--==0)
{
delay=2;
pler->setProcess((pler->getProcess()+1)%pler->getImage_num());//换图
}
decre_yw(speed);//移动墙柱
for(int i=0,k=0;i<=7;i++)
{
for(int j=0;j<speed;j++)
{
if(bfl[i]->get_y()==pler->get_y())
k=1;
bfl[i]->mov_y(1); //移动板块
}
if(k==1)
{
pler->mov_y(pler->get_y()-bfl[i]->get_y());
k=2;
}
}
if(k==0)
pler->mov_y(speed); //移动player
InvalidateRect(&rect,false);
}
CView::OnTimer(nIDEvent);
}
void CManView::Onkilltimer() //暂停
{
if(state==ACTIVE)
{
KillTimer(ID_time);
// TODO: Add your command handler code here
state=STILL;
InvalidateRect(&rect,false);
if(bfl[0]->m_wDeviceID)
{
mciSendCommand(bfl[0]->m_wDeviceID,MCI_CLOSE,1,NULL);
bfl[0]->m_wDeviceID=music("pause.wav");
}
else
{
bfl[0]->m_wDeviceID=music("pause.wav");
}
}
}
void CManView::Onstart() //重开一局
{
setRHest(pler->getGrade());
delete pler;
for(int j=0;j<8;j++)
delete bfl[j];
pler=new Player();
srand( (unsigned)time( NULL ) );
tag=0;
for(int i=7,y=352;i>0;i--,y=y-48)
{
int x=rand()%288+40;
int secu=rand()%6;
switch(secu)
{
case 0:bfl[i]=new Buffle(x,y,pler);break;
case 1:bfl[i]=new Skate(x,y,pler);break;
case 2:bfl[i]=new Spring(x,y,pler);break;
case 3:bfl[i]=new Nailboard(x,y,pler);break;
case 4:bfl[i]=new Roll_left(x,y,pler);break;
case 5:bfl[i]=new Roll_right(x,y,pler);break;
}
}
bfl[0]=new Buffle(130,400,pler);
state=ACTIVE;
delay=2;
m_y=66;
m_yw=66;
InvalidateRect(&rect,false);
}
void CManView::OnMiddle() //选择速度
{
// TODO: Add your command handler code here
speed=MIDDLE/13;
}
void CManView::Onspeedup()
{
speed=RAPID/13;
}
void CManView::Onlowdown()
{
speed=SLOW/13;
}
void CManView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags) //左右键移动player
{
// TODO: Add your message handler code here and/or call default
if(nChar==VK_RIGHT||nChar==VK_LEFT)
{
//SetTimer(ID_timeract,20,NULL);
if(nChar==VK_RIGHT)
pler->setDirect(RIGHT);
else if(nChar==VK_LEFT)
pler->setDirect(LEFT);
}
CView::OnKeyDown(nChar, nRepCnt, nFlags);
}
void CManView::OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags) //放弃移动
{
// TODO: Add your message handler code here and/or call default
// KillTimer(ID_timeract);
if(pler->getDirect()==LEFT&&nChar==VK_LEFT||pler->getDirect()==RIGHT&&nChar==VK_RIGHT)
{
pler->setDirect(MID);
pler->setProcess(0);
}
CView::OnKeyUp(nChar, nRepCnt, nFlags);
}
void CManView::setRHest(int record) //最高纪录
{
if(record>record_highest)
record_highest=record;
}
int CManView::getRHest()
{
return record_highest;
}
void CManView::Onrestart() //暂停后再开始
{
// TODO: Add your command handler code here
if(state==STILL)
{
state=ACTIVE;
SetTimer(ID_time,19,NULL);
if(bfl[0]->m_wDeviceID)
{
mciSendCommand(bfl[0]->m_wDeviceID,MCI_CLOSE,1,NULL);
bfl[0]->m_wDeviceID=music("pause.wav");
}
else
{
bfl[0]->m_wDeviceID=music("pause.wav");
}
}
}
void CManView::OnLButtonDown(UINT nFlags, CPoint point) //暂停
{
// TODO: Add your message handler code here and/or call default
if(point.x>=515&&point.y>=305&&point.x<=560&&point.y<=345)
{
if(state==ACTIVE)
{
KillTimer(ID_time);
state=STILL;
InvalidateRect(&rect,false);
}
else if(state==STILL)
{
SetTimer(ID_time,19,NULL);
state=ACTIVE;
}
if(state!=DEAD)
{
if(bfl[0]->m_wDeviceID)
{
mciSendCommand(bfl[0]->m_wDeviceID,MCI_CLOSE,1,NULL);
bfl[0]->m_wDeviceID=music("pause.wav");
}
else
{
bfl[0]->m_wDeviceID=music("pause.wav");
}
}
}
CView::OnLButtonDown(nFlags, point);
}
void CManView::func_infor(CDC *mdc)
{
stick(0,0,mdc,IDB_bg); //覆盖溢出的图像
stick(0,418,mdc,IDB_bbg);
for(int i=pler->getLife_left();i<12;i++)//标志生命线
stick(49+i*8, 33,mdc,IDB_life);
LOGFONT lf; //显示层数
mdc->GetCurrentFont()->GetLogFont(&lf);
CFont font,*pOldFont;
lf.lfCharSet=1;
lf.lfHeight=-35;
lf.lfWidth=0;
lf.lfItalic=true;
lf.lfWeight=FW_BOLD;
lf.lfQuality=PROOF_QUALITY;
strcpy(lf.lfFaceName,"黑体");
font.CreateFontIndirect(&lf);
pOldFont=mdc->SelectObject(&font);
mdc->SetBkMode(TRANSPARENT);
char t[6];
itoa(pler->getGrade(),t,10);
mdc->SetTextColor(RGB(255,255,0));
/*CString t;
t.Format("%d",pler->getGrade());*/
mdc->TextOut(280,15,t);
if(state==STILL) // 暂停或结束标志
stick(165,220,mdc,IDB_pause);
else if(state==DEAD)
mdc->TextOut(165,220,"GameOver");
lf.lfHeight=18;//最高纪录
CFont font_;
font_.CreateFontIndirect(&lf);
mdc->SelectObject(&font_);
mdc->SetTextColor(RGB(255,255,255));
itoa(getRHest(),t,10);
mdc->TextOut(550,163,t);
switch(speed*13) //标明玩速
{
case SLOW: strcpy(t,"SLOW");break;
case MIDDLE:strcpy(t,"COMMON");break;
case RAPID: strcpy(t,"RAPID");break;
}
mdc->TextOut(510,113,t);
mdc->SelectObject(pOldFont);
}
void CManView::decre_y(int speed)
{
m_y-=speed;
if(m_y<-287)
m_y=418;
}
void CManView::decre_yw(int speed)
{
m_yw-=speed;
if(m_yw<-287)
m_yw=418;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -