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

📄 game_game.cpp

📁 我做的毕业设计
💻 CPP
📖 第 1 页 / 共 3 页
字号:
	}
	if(m_MagicAttack = m_presNpc[m_i]->m_selectAttack)
	{
		m_MagicPos = m_presNpc[m_i]->m_vPos;
	}

	if(m_pMagicPoPo->m_dwMagicNum)
	{
		m_pRole->m_CURMP -=m_pMagicPoPo->m_dwMagicNum * 2.0f;
		m_pMagicPoPo->m_dwMagicNum = 0;
	}
	static int a=0;
	a++;
	if(m_MagicAttack && m_pRole->m_CURMP >=0.1f && (0x80&m_pInput->GetIsKeyDown(DIK_1))&&!m_pRole->m_isdead&&!m_presNpc[m_i]->m_isdead)
	{
		if( m_pRole->m_bLoop==TRUE)
		{
			m_pRole->SetAnimationName( "skill2" );
			m_pMagicPoPo->m_bLive = true;
		}
	}

	if((m_pRole->m_pCurAnimSet->GetName()=="skill2"&&a==1)||m_pRole->m_CURMP <= 0.1f)
	{
		a=0;
		m_pMagicPoPo->m_bLive = false;
		m_pMagicPoPo->m_bMoving = true;
		m_pRole->m_fAngle = m_pRole->GetYaw(m_presNpc[m_i]->m_vPos,m_pRole->m_vPos);
	}

	if(0x80&m_pInput->GetIsKeyDown(DIK_2)&&m_pRole->m_CURMP >=0.1f&&!m_pRole->m_isdead&&m_pRole->DistanceOfTwoVec3(m_pRole->m_vPos, m_presNpc[m_i]->m_vPos) <= 50.0f)
	{
		m_pRole->SetAnimationName( "skil1" );
		m_presNpc[m_i]->m_CURHP -=1.0f;
		//m_pRole->m_CURMP -=2.0f;
	}

	/*if(0x80&m_pInput->GetIsKeyDown(DIK_1))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][0]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][0]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][0]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][0]);
				m_p3DUI->m_pEquip->m_ppbutton[0][0]=NULL;
			}
		}

	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_2))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][1]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][1]->p(m_pRole);

			if (m_p3DUI->m_pEquip->m_ppbutton[0][1]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][1]);
				m_p3DUI->m_pEquip->m_ppbutton[0][1]=NULL;
			}
		}
	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_3))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][2]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][2]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][2]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][2]);
				m_p3DUI->m_pEquip->m_ppbutton[0][2]=NULL;
			}
		}
	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_4))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][3]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][3]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][3]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][3]);
				m_p3DUI->m_pEquip->m_ppbutton[0][3]=NULL;
			}
		}
	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_5))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][4]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][4]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][4]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][4]);
				m_p3DUI->m_pEquip->m_ppbutton[0][4]=NULL;
			}
		}
	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_6))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][5]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][5]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][5]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][5]);
				m_p3DUI->m_pEquip->m_ppbutton[0][5]=NULL;
			}
		}
	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_7))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][6]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][6]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][6]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][6]);
				m_p3DUI->m_pEquip->m_ppbutton[0][6]=NULL;
			}
		}
	}
	if(0x80&m_pInput->GetIsKeyDown(DIK_8))
	{
		if (m_p3DUI->m_pEquip->m_ppbutton[0][7]!=NULL)
		{
			m_p3DUI->m_pEquip->m_ppbutton[0][7]->p(m_pRole);
			if (m_p3DUI->m_pEquip->m_ppbutton[0][7]->del)
			{
				delete (m_p3DUI->m_pEquip->m_ppbutton[0][7]);
				m_p3DUI->m_pEquip->m_ppbutton[0][7]=NULL;
			}
		}
	}*/

	if(0x80&m_pInput->GetIsKeyDown(DIK_B)&&!Key_b)
	{
		Key_b=true;
		time=0.0f;
		//m_p3DUI->m_pBag->m_bVisrul=m_p3DUI->m_pBag->m_bVisrul?false:true;
		////if (m_p3DUI->m_pBag->m_bVisrul)
		////{
		////	m_p3DUI->m_pBag->m_bVisrul=false;
		////}else
		////{
		////	m_p3DUI->m_pBag->m_bVisrul=true;
		////}
	}
	//else
	//{
	//	if (Key_b)
	//	{
	//		time+=m_tFrameTime;
	//	}

	//	if (time>0.3f)
	//	{
	//		Key_b=false;
	//		time=0.0f;
	//	}
	//}
	//if (!list)
	//{
	//	if (m_p3DUI->m_bIs)
	//	{
	//		m_p3DUI->UpDate();
	//	}
	//	m_p3DUI->m_bIs=false;
	//}


	//人物向前移动
	m_pRole->WalkFoward(dForward, nDirect);

	//处理碰撞
	ProcessCollision();

	if(m_pRole->m_isdead)
	{
		m_pRole->m_vPos.y -= 0.1f;
	}
	else
	{
		//重新设置人物的高度信息
		m_pRole->GetPosition(&m_RoleHeight);
		m_RoleHeight.y = m_pTerrain->GetHeight(m_pRole->GetPosition().x, 
			m_pRole->GetPosition().z);	
		m_pRole->SetPosition(&m_RoleHeight);
	}	

	//设置摄像机位置
	m_pCamera->SetLookAt(&(m_pRole->GetPosition()+D3DXVECTOR3(0,35,0)));

	//自动回血
	static int num_HP = 0;
	if(num_HP%2000 == 0 && m_pRole->m_CURHP < m_pRole->m_MAXHP && (!m_pRole->m_isAttacking))
	{
		m_pRole->m_CURHP += 0.05f;
	}
	//自动回魔法
	static int num_MP = 0;
	if(num_MP%2000 == 0 && m_pRole->m_CURMP < m_pRole->m_MAXMP && (!m_pRole->m_isAttacking))
	{
		m_pRole->m_CURMP += 0.01f;
	}
	//NPC AI
	for(i = 0; i < m_pNpcNum; i++)
	{
		m_presNpc[i]->AI(m_pRole, m_tFrameTime, 100.0f);
	}

	for(i = 0; i < m_pNpcNum; i++)
	{
		if(m_presNpc[i]->m_isdead)
		{
			m_presNpc[i]->m_IsEnemyHPMP = false;
			m_presNpc[i]->m_vPos.y -= 0.1f;
		}
		else
		{
			m_presNpc[i]->SetAltitude(m_pTerrain->GetHeight(m_presNpc[i]->GetPosition().x,
				m_presNpc[i]->GetPosition().z));
		}
	}
	//如果摄像机进到山里就将摄像机前推
	while( (m_pCamera->GetPos())->y <= m_pTerrain->GetHeight( (m_pCamera->GetPos())->x,
		(m_pCamera->GetPos())->z) )
	{
		m_pCamera->m_Distance -= 10;
		m_pCamera->SetLookAt(&(m_pRole->GetPosition()+D3DXVECTOR3(0,20,0)));
	}
	return true;
}
bool CGame::Attack()
{
	POINT p;
	GetCursorPos( &p );
	if( (0x80 & m_pInput->GetIsKeyDown(MK_LEFT)) && !m_pRole->m_isdead
		&& p.x >=90 && p.x <= 110 && p.y >= 730 && p.y <= 750 )
	{
		return true;
	}
	return false;
}

HRESULT CGame::DrawShadow(IDirect3DDevice9* m_pd3dDevice)
{
	//关闭深度测试, 启用Alpha混合
	m_pd3dDevice->SetRenderState( D3DRS_ZENABLE,          false );
	m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, true );
	m_pd3dDevice->SetRenderState( D3DRS_SRCBLEND,  D3DBLEND_SRCALPHA );
	m_pd3dDevice->SetRenderState( D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA );

	//设置模板相关渲染状态
	m_pd3dDevice->SetRenderState( D3DRS_STENCILENABLE,    true );
	m_pd3dDevice->SetRenderState( D3DRS_STENCILREF,  0x1 );
	m_pd3dDevice->SetRenderState( D3DRS_STENCILFUNC, D3DCMP_LESSEQUAL );
	m_pd3dDevice->SetRenderState( D3DRS_STENCILPASS, D3DSTENCILOP_KEEP );

	//渲染一个灰色矩形, 只有通过模板测试的像素才会被渲染到颜色缓冲区,表示阴影
	m_pd3dDevice->SetFVF( D3DFVF_CUSTOM_SHADOWVERTEX );
	m_pd3dDevice->SetStreamSource( 0, m_pBigSquareVB, 0, sizeof(SHADOWVERTEX) );
	m_pd3dDevice->DrawPrimitive( D3DPT_TRIANGLESTRIP, 0, 2 );

	//恢复渲染状态
	m_pd3dDevice->SetRenderState( D3DRS_ZENABLE,          true );
	m_pd3dDevice->SetRenderState( D3DRS_ALPHABLENDENABLE, false );
	m_pd3dDevice->SetRenderState( D3DRS_STENCILENABLE,    false );

	return S_OK;
}

bool CGame::Render()
{
	static float m_timeNow = timeGetTime()/1000.0f;
	m_tFrameTime = timeGetTime()/1000.0f-m_timeNow;	//后一时刻减前一时刻
	m_timeNow += m_tFrameTime;						//更新前一时刻
	
	FrameStart(m_tFrameTime);

	m_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER|D3DCLEAR_STENCIL, 
		D3DCOLOR_XRGB(0,0,0), 1.0f, 0 );
	if( SUCCEEDED( m_pd3dDevice->BeginScene() ) )
	{		
		//更新3D变换矩阵
		m_pCamera->Update3DMatrix(m_tFrameTime);
		if(m_pRole->m_isMoving)
		{
			if(m_IsWalk)
			{
				m_pRole->SetAnimationName("walk"); 
				m_pRole->SetSpeed(50.0f);
			}
			else		
			{
				m_pRole->SetAnimationName("run"); 
				m_pRole->SetSpeed(150.0f);
			}
			m_pRole->MoveTo(m_pRole->m_vTarget, m_tFrameTime, m_pRole->m_speed1);
			if( ProcessCollision() )
				m_pRole->m_isMoving = false;
		}
		
		//绘制天空盒
		m_pSkyBox->SetPosition( m_pCamera->GetPos() );    
		m_pSkyBox->Render( m_tFrameTime );		

		//绘制主角及AABB盒		
		m_pRole->Render( m_tFrameTime);
		static D3DXVECTOR3 vMin, vMax;
		m_pRole->GetBoundingBox( &vMin, &vMax );
		if( m_IsAABB )
		{
			RenderAABB( m_pd3dDevice, &vMin, &vMax );			
		}

		//绘制怪物及AABB盒
		for(i = 0; i < m_pNpcNum; i++)
		{
			m_presNpc[i]->Render(m_tFrameTime);
		}
		for(i = 0; i < m_pNpcNum; i++)
		{
			m_presNpc[i]->GetBoundingBox( &vMin, &vMax );
			if(m_IsAABB)
			{
				RenderAABB( m_pd3dDevice, &vMin, &vMax );
			}
		}		
		
		//绘制商店NPC
		m_pNpc->Render(m_tFrameTime);

		//魔法阵
		if(m_pMagicPoPo->m_bMoving ==false&&m_pMagicPoPo->m_bLive ==true)
		{
			m_pMagicZhen->SetPosition( m_pRole->m_vPos.x, m_pRole->m_vPos.y, m_pRole->m_vPos.z );
			m_pMagicZhen->Render(m_tFrameTime);
		}
		if( m_IsAABB )
		{
			m_pNpc->GetBoundingBox( &vMin, &vMax);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//设置宫殿的世界变换		  缩放   X值    Y值     Z值     旋转
		m_pTempler->setTransform(4.0f, -900.0f, 8.0f, 2000.0f, 0.0f);

		//绘制宫殿
		m_pTempler->Render();
		if( m_IsAABB )
		{
			m_pTempler->GetBoundingBox( &vMin, &vMax ,0.9f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//设置雕像的世界变换		 缩放   X值    Y值     Z值     旋转
		m_pGlyph->setTransform( 50.0f, -1000.0f, 0.0f, 1200.0f,0.0f);	

		//绘制雕像
		m_pGlyph->Render();
		if( m_IsAABB )
		{
			m_pGlyph->GetBoundingBox( &vMin, &vMax,0.6f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//设置树1的世界变换       缩放   X值    Y值     Z值     旋转
		m_pTree1->setTransform(2.0f,-600.0f, 0.0f, 1200.0f, 0.0f);
		m_pTree1->Render();
		if( m_IsAABB )
		{
			m_pTree1->GetBoundingBox( &vMin, &vMax,0.15f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//绘制树2
		m_pTree2->setTransform(2.0f,-1500.0f, 0.0f, 1200.0f, 0.0f);
		m_pTree2->Render();
		if( m_IsAABB )
		{
			m_pTree2->GetBoundingBox( &vMin, &vMax,0.15f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//绘制树3
		m_pTree3->setTransform(10.0f,-2330.0f, 10.0f, 800.0f, 0.0f);
		m_pTree3->Render();
		if( m_IsAABB )
		{
			m_pTree3->GetBoundingBox( &vMin, &vMax,0.2f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}
		static int i,j;
		for (i=1;i<4;i++)
		{
			for (j=1;j<5;j++)
			{
				m_pTree2->setTransform(5.0f,-2800.0f/i, m_pTerrain->GetHeight(-2800.0f/i,-1500.0f*j*i/2)-150, -1500.0f*j*i/2, 0.0f);
				m_pTree2->Render();
			}
		}

		//绘制草
		m_pGrass->setTransform(0.5f,-1000.0f, 8.0f, 1110.0f, 0.0f);
		m_pGrass->Render();

		//绘制火堆
		m_pFire->setTransform(200.0f,-2150.0f, -5.0f, 1000.0f, 0.0f);
		m_pFire->Render();
		if( m_IsAABB )
		{
			m_pFire->GetBoundingBox( &vMin, &vMax,0.5f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//绘制死骨
		m_pBone->setTransform(2.0f,-2050.0f, -5.0f, 440.0f, 0.0f);
		m_pBone->Render();
		if( m_IsAABB )
		{
			m_pBone->GetBoundingBox( &vMin, &vMax,0.5f);
			RenderAABB( m_pd3dDevice, &vMin, &vMax );
		}

		//绘制水晶
		m_pCrystal->setTransform(0.01f,-2150.0f, 140.0f, 1000.0f, 0.0f);
		m_pCrystal->Render();

		//绘制地形
		m_pTerrain->Render();		
		
		//绘制粒子
		m_pParticle->Render(m_tFrameTime,&D3DXVECTOR3(-2215,41,960));

		//渲染阴影
		m_pShadowVolume->Render(m_pd3dDevice, &m_pGlyph->GetMat(), m_bRenderVolume);
		DrawShadow(m_pd3dDevice);

		//绘制蝴蝶
		m_pButterflyMesh1->OnFrameMove(m_pd3dDevice,0.0f,0.0f);
		m_pButterflyMesh1->Render();

		//主角技能
		m_pMagicPoPo->SetPosition(&(m_pRole->m_vPosOld));
		m_pMagicPoPo->Render(m_tFrameTime, &m_MagicPos);

		//处理2D画面
		m_pCamera->Update2DMatrix(); 

		//设置主角血条
		m_pPanelRole->MoveTo(0, 20);
		m_pPanelRole->Render();
		m_pRoleHP->SetRoleHP( (m_pRole->m_CURHP/m_pRole->m_MAXHP) * 12 );
		m_pRoleHP->Render();
		m_pRoleMP->SetRoleMP( (m_pRole->m_CURMP/m_pRole->m_MAXMP) * 16 );
		m_pRoleMP->Render();
		for(i = 0; i < m_pNpcNum; i++)
		{
			if(m_presNpc[i]->m_IsEnemyHPMP==true)
			{
				m_pPanelEnemy->MoveTo(400, 20);
				m_pPanelEnemy->Render();
				m_pEnemyHP->SetEnemyHP( (m_presNpc[m_i]->m_CURHP / m_presNpc[m_i]->m_MAXHP) * 9);
				m_pEnemyHP->Render();
				m_pEnemyMP->SetEnemyMP( (m_presNpc[m_i]->m_CURMP / m_presNpc[m_i]->m_MAXMP) * 12);
				m_pEnemyMP->Render();

			}
		}

		//mini地图
		m_pSmallMap->Render(m_pRole->m_vPos,m_pRole->m_fAngle);

		m_pMiNiMapBar->MoveTo(845, 2);
		m_pMiNiMapBar->Render();

		//设置技能栏
		m_pJiNenglan->MoveTo(20,700);
		m_pJiNenglan->Render();

		//3DUI
		//m_p3DUI->Render();

		if(m_bBag==true)
		{
			m_pNpcBag->MoveTo(200,100);
			m_pNpcBag->Render();
		}

		if( m_isMouseDown )
		{
			//设置鼠标图片位置
			m_pCursor->SetPosition( m_pCursor->m_oldPos );
			//设置鼠标真正位置
			SetCursorPos( m_pCursor->m_oldPos.x, m_pCursor->m_oldPos.y );
		}
		else
		{
			static POINT p;
			//取鼠标真正位置
			GetCursorPos( &p );
			m_pCursor->SetPosition( p );
		}
		m_pCursor->Render();
		m_isMouseDown = false;
				
		RenderText(m_tFrameTime);
		m_pd3dDevice->EndScene();
	}
	m_pd3dDevice->Present( NULL, NULL, NULL, NULL );
	return true;
}

bool CGame::GameLoop()
{
	MSG msg; 
	BOOL fMessage;

	PeekMessage(&msg, NULL, 0U, 0U, PM_NOREMOVE);

	while(msg.message != WM_QUIT)
	{
		fMessage = PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE);

		if(fMessage)
		{
			TranslateMessage( &msg );
			DispatchMessage( &msg );
		}
		else
		{	
			
			if(m_isMP3)
			{
				m_isMP3 = false;
				m_pMP3 = new CSound(m_hWnd);
				m_pMP3->Play("\\stormwind01-moment.mp3", MP3);
			} 
			else
			{
				Render();
			}			
		}
	}
	return true;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -