⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manview.cpp

📁 c++写的游戏
💻 CPP
📖 第 1 页 / 共 2 页
字号:
			{
			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 + -