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

📄 game.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				break;
				
			// display the unlock item
		case STATE_MONEY_UNLOCK:
			if(key)// if any key is pressed 
				{
					removeOneUnlock(m_money);
					if(onlyOneUnlockToShow(m_money))
						m_moneyState=STATE_MONEY_UNLOCK_DONE;
				}

			if(onlyOneUnlockToShow(m_money))
				m_moneyState=STATE_MONEY_UNLOCK_DONE;
			
			break;
			
	
			// end, change to other normal game
		case STATE_MONEY_UNLOCK_DONE:			
			if(m_pMatch->m_mode==MODE_STORY)
			{
				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT|VKEY_MENU_CLR))
					m_MatchState=MS_MATCH_END;
			}
			else if(m_pMatch->m_mode==MODE_QUICK || m_pMatch->m_mode==(MODE_FREE))
			{
				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT|VKEY_MENU_CLR))
			{
					
					m_moneyState = STATE_MONEY_ASK_RETRY;
					bRetryState = true;	//yes
					break;
				}
			}
			else if(m_pMatch->m_mode==MODE_ONLINE)
			{
#ifdef ONLINE
				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT|VKEY_MENU_CLR))
				m_MatchState=MS_MATCH_END;				
#endif
			}
			else
			{
				if(!m_pMatch->m_MatchResult)
					if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT))
					{
						if(/*m_pMatch->m_mode==MODE_FREE ||*/ m_pMatch->m_mode==MODE_STORY)
						{
							m_pMatch->m_cnMatchCount++;
							CoinNextUnlock();
						}
						m_MatchState=MS_MATCH_INIT;
					}
					
				if(m_pMatch->m_MatchResult)
					if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_NEXT|gk_NUM5|gk_MSOFT))
					{
					if(/*m_pMatch->m_mode==MODE_FREE ||*/ m_pMatch->m_mode==MODE_STORY)
						{
							m_pMatch->m_cnMatchCount++;
							CoinNextUnlock();
						}
						
						m_MatchState=MS_MATCH_INIT;
					}
						
				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_EXIT||VKEY_MENU_CLR))
				{
					m_MatchState=MS_MATCH_END;
				}
			}			
			break;
		case STATE_MONEY_ASK_RETRY:

			if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_CLR))
				bRetryState=false;

			if(m_pEngine->GetInput()->KeyPressed(VKEY_SCROLL_LEFT|VKEY_SCROLL_RIGHT))
			{
				bRetryState = !bRetryState;
			}
			else if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT | VKEY_MENU_CLR))
			{
				if( bRetryState == true )//retry
				{
					m_pMatch->m_cnMatchCount++;
					CoinNextUnlock();
					
					if(m_pMatch->m_mode==MODE_FREE){
						
						m_MatchState=MS_MATCH_INIT;
					}
					else
					{
						//add by sunfishfine. to random player when rematch
						int m_playerId=getRandomNumber(100);
						m_playerId%=6;
						if (m_pMatch->GetPlayerID(1)==m_playerId)
						{
							m_playerId=(m_playerId+1)%6;
						}
						
						if(m_pMatch->GetPlayerID(0)==m_playerId)// the same person
						{
							//change suit
							int suitId=getRandomNumber(100);
							suitId%=3;
							if(m_pMatch->GetPlayerClothes(0)==suitId)
								suitId=(suitId+1)%3;
							m_pMatch->SetPlayerClothes(1, suitId);
							
						}
						m_pMatch->SetPlayer(1, m_playerId); 
						m_step=0;
						m_GameState=GS_LOADING;
					}	
					
				}
				else{	//exit
					m_MatchState=MS_MATCH_END;
				}
			}
			break;
		}
		
		break;	
		
		case MS_ONLINE_WAIT:
#ifdef ONLINE			
	if(m_pEngine->GetInput()->KeyPressed(gk_BACK))
		{
						
				m_pause=true;
				m_pMenu->ResetState();
				m_pMenu->SetState(STATE_PAUSE);

		}


#endif
		break;
			
		case MS_ONLINE_ERROR:// display the error message

		if(m_pEngine->GetInput()->KeyPressed(VKEY_COMMAND))// press ok to continue
		{
			m_MatchState=MS_MATCH_END;

		}

			break;
		
		default:
			break;
	}
}



int CGame::UpdateMenu()
// return value: 
// 0,menu; 
// -1, exit; 
// 1, quick mode;
// 2, free mode;
// 3, bonus mode;
// 4, story mode;
// 5, cameraview;
{
	int ret=0;

	int i=m_chcode;
	m_pMenu->Update();
	if (i!=m_chcode)
		if (m_chcode)	{
			int i, j;
			for (i=0; i<BALL_COUNT; i++)
				m_SaveBallCanSel[i] = m_SaveBallCanSel[i]= true;
			for (i=0; i<BONUS_COUNT; i++)
				m_SaveBonusCanSel[i] = m_SaveBonusCanSel[i] = true;
			for (i=0; i<PLAYER_COUNT; i++)
				m_SavePlayerCanSel[i] = m_SavePlayerCanSel[i] = true;
			m_SaveQMFinishTime=4; 
			for (i=0; i<PLAYER_COUNT; i++)
				for (j=0; j<CLOTH_COUNT; j++)
					m_SaveClothCanSel[i][j] = m_SaveClothCanSel[i][j] = true;
			for (i=0; i<BALLICON_COUNT; i++)
				m_SaveBallIconCanSel[i] = m_SaveBallIconCanSel[i] = true;
			for (i=0; i<LANE_COUNT; i++)
				m_SaveLaneCanSel[i] = m_SaveLaneCanSel[i] = true;
			for (i=0; i<LANE_COUNT; i++)
				m_SaveLaneCanView[i] = m_SaveLaneCanView[i] = true;
		}

	if (m_pMenu->GetState() == STATE_STARTGAME)	{
		m_pEngine->GetSound()->stopMIDI();  
		m_pMatch->SetInitPinMode(ALL_TENPINS_STAND);
		m_pMatch->m_smIsStoryMode=false;
		m_pMatch->SetPlayer(0, m_pMenu->GetSel(STATE_PLAYERSELECTA)); 
		m_pMatch->SetPlayer(1, m_pMenu->GetSel(STATE_PLAYERSELECTB)); 
		m_pMatch->SetPlayerBall(0, m_pMenu->GetSel(STATE_BALLSELECTA));
		m_pMatch->SetPlayerBall(1, m_pMenu->GetSel(STATE_BALLSELECTB));
		m_pMatch->SetBallIconID(0, m_pMenu->GetSel(STATE_ICONSELECTA));
		m_pMatch->SetBallIconID(1, m_pMenu->GetSel(STATE_ICONSELECTB));
		//added by Milo 01-19
		m_pMatch->SetPlayerClothes(0, m_pMenu->GetSel(STATE_CLOTHSELECTA));
		m_pMatch->SetPlayerClothes(1, m_pMenu->GetSel(STATE_CLOTHSELECTB));
		//end
		m_pMatch->SetLane(m_pMenu->GetSel(STATE_LANESELECT));
		//// quick mode
		if (m_pMenu->CheckState(STATE_QUICKMODE))	{
			if (m_pMenu->GetSel(STATE_QUICKMODE) == 0)	{
				m_pMatch->SetMatchType(MATCH_TYPE_FREE);
				m_pMatch->InitMatch(5,1);
			}	else	{
				m_pMatch->SetMatchType(MATCH_TYPE_VS);
				m_pMatch->InitMatch(5,2);
				if (m_pMenu->GetSel(STATE_QUICKMODE) == 1)	{
					m_pMatch->SetPlayerAI(0,false);
					m_pMatch->SetPlayerAI(1,true);
				}
			}
			//InitOnlineMode();
			ret=MODE_QUICK;
		}
		//// free mode
		if (m_pMenu->CheckState(STATE_FREEMODE))	{
			if (m_pMenu->GetSel(STATE_FREEMODE) == 0)	{
				m_pMatch->SetMatchType(MATCH_TYPE_FREE);
				m_pMatch->InitMatch(10,1);
			}	else	{
				m_pMatch->SetMatchType(MATCH_TYPE_VS);
				m_pMatch->InitMatch(10,2);
				if (m_pMenu->GetSel(STATE_FREEMODE) == 1)	{
					m_pMatch->SetPlayerAI(0,false);
					m_pMatch->SetPlayerAI(1,true);
				}
			}
			ret=MODE_FREE;
		}
		//// bonus mode
		if (m_pMenu->CheckState(STATE_BONUSSELECT))	{				
			m_pMatch->SetMatchType(MATCH_TYPE_BONUS);
			m_pMatch->SetInitPinMode(m_pDataManager->m_pBonuses[m_pMenu->GetSel(STATE_BONUSSELECT)]);
//			m_pMatch->InitMatch(11,1); //Milo 12-27 // 1
			m_pMatch->InitMatch(12,1);
			m_pMatch->m_BonusId=m_pMenu->GetSel(STATE_BONUSSELECT);
			ret=MODE_BONUS;
		}
		//// storymode
		if (m_pMenu->CheckState(STATE_STORYMODE))	{

			m_pMatch->m_smIsStoryMode=true;
			if (m_pMenu->GetSel(STATE_STORYMODE))
				ret=MODE_STORY_CONTINUE;
			else	{
				m_pMatch->m_smPlayerId = m_pMenu->GetSel(STATE_PLAYERSELECTA);
				m_pMatch->m_smBallId = m_pMenu->GetSel(STATE_BALLSELECTA);
				ret=MODE_STORY;
			}

		}
		// online mode 
		if(m_pMenu->CheckState(STATE_ONLINEMODE))
		{
#ifdef ONLINE

			m_pMatch->SetMatchType(MATCH_TYPE_VS);

			m_pMatch->InitMatch(10,2);
			m_pMatch->SetPlayerAI(0,false);
			m_pMatch->SetPlayerAI(1,true);
			
			InitOnlineMode();
			ret=MODE_ONLINE;
#endif
		}
		//// camera view
		else if (m_pMenu->CheckState(STATE_BONUSMODE) && m_pMenu->GetSel(STATE_BONUSMODE))	{
			ret=MODE_CAMERA;
		}
		else
		{
		}
	}
	if (m_pMenu->GetState() == STATE_SUSPEND)
	{
		ret=-1;
	}

	if (m_pMenu->GetSel(STATE_PREGAME) == 3)
	{
		if(m_iTitleType == TITLE_FIRST_ANI)
		{
			if(m_pScene->PlayingTitleAni(TITLE_FIRST_ANI) == PLAYER_ANI_FINISH )
			{
				m_iTitleType = TITLE_SECOND_ANI;
				m_pScene->LoadTitleAni(TITLE_SECOND_ANI);//Milo
			}
		}
		else if(m_iTitleType == TITLE_SECOND_ANI)
		{ 
			if(m_pScene->PlayingTitleAni(TITLE_SECOND_ANI) == PLAYER_ANI_FINISH)
			{
				m_iTitleType = TITLE_ANI_DONE;
				//m_pMenu->GoBack(m_pMenu->GetState());
				//ReleaseLocalResource();
				//m_pMenu->SetState(STATE_SPLASH2);
			}
		}
	}

	if (m_pMenu->GetState() == STATE_MAINMENU)
	{
		
	}
	return ret;
}

bool CGame::Loading(int step, int info)
{
	if(m_pMatch->m_mode==MODE_QUICK || m_pMatch->m_mode==MODE_FREE || m_pMatch->m_mode==MODE_BONUS||m_pMatch->m_mode==MODE_ONLINE)
	{
		if(step==0)
		{
			ReleaseLocalResource();
			m_pDataManager->LoadPlayerInfo(m_pMatch->GetPlayerID(0),&m_pMatch->m_player[0]);
			m_pDataManager->LoadPlayerInfo(m_pMatch->GetPlayerID(1),&m_pMatch->m_player[1]);
		}
		else if(step<20)
		{
			m_pMatch->LoadMatchRes(m_pDataManager,step-1);
		}

		if(step>=20)
		{
			m_pScene->CoinReset();
			m_pScene->MatchInit();
			m_pScene->DeliveryInit();
			m_pScene->m_object[RENDER_COIN]->SetHideProperty(true);
			return true;
		}
		else
			return false;
	}

	// load story mode
	if(m_pMatch->m_mode==MODE_STORY)
	{
		if(step==0)
		{			
			int rounds=m_pDataManager->m_CoinLevelRounds[m_pMatch->m_smStageIndex];
			m_pMatch->InitMatch(rounds,2);
			m_pMatch->SetPlayerAI(0,false);
			m_pMatch->SetPlayerAI(1,true);
			m_pMatch->m_pCurStage=&(m_pMatch->m_pCurStoryMode->storyStages[m_pMatch->m_smStageIndex]);
			m_pDataManager->LoadPlayerInfo(m_pMatch->m_pCurStage->competitor, &m_pMatch->m_player[1]);
			m_pScene->LinkPlayer(m_pMatch->GetCurPlayer());
			m_pMatch->SetPlayer(1, m_pMatch->m_pCurStage->competitor);
			m_pMatch->SetPlayerBall(1, m_pMatch->m_player[1].m_ballIndex);
			m_pMatch->SetLane(m_pMatch->m_pCurStage->place);
			ReleaseLocalResource();
			m_pDataManager->LoadPlayerInfo(m_pMatch->GetPlayerID(1),&m_pMatch->m_player[1]);
			
		}
		else if(step<20)
			m_pMatch->LoadMatchRes(m_pDataManager,step-1);
		else if(step==20)
		{
			m_pScene->CoinReset();
			m_pScene->MatchInit();
			m_pScene->DeliveryInit();
			m_pScene->m_object[RENDER_COIN]->SetHideProperty(true);
		}

		if(step>=20)
			return true;
		else
			return false;
	}


	// load camera view
	if(m_pMatch->m_mode==MODE_CAMERA)
	{
		switch(step)
		{
		case 0:
			ReleaseLocalResource();
			break;

		case 1:
			m_pDataManager->LoadBgRes(m_pMatch->GetLane());
			break;

		case 2:
			m_pScene->CameraViewInit();
			break;

		default:
			break;
		}
		if(step>=5)
			return true;
		else
			return false;
	}

	return true;
}

void CGame::paint()
{
	char name[2][10];
	
	
	m_Time[m_TimeTick] = GETUPTIMEMS();
		if(m_pause)
		{
			m_pMenu->Draw();
			
			
#ifdef ONLINE		
			if(m_bOnlineMode)
			{					
				onlineStateUpdate();	
				drawOnlineTimer(m_pUI);//draw timer			
				if(m_bOverTime)// now is online mode and time is up
				{			
					dealWithOverTime();
					m_pause=false;
					resumeMIDI();
					m_pMenu->ResetState();
					
					
				}		
			}
#endif
			m_pEngine->GetGfx()->UpdateToForeground();
			return;
		}

	


	if((m_GameState==GS_STORYMODE && m_StoryModeState==SMS_LEVEL_PRE_TALK) || 
		(m_pMatch->m_mode==MODE_QUICK && (m_MatchState==MS_QUICK_PRESHOW || m_MatchState==MS_QUICK_POSTSHOW))||
		(m_pMatch->m_mode==MODE_FREE && m_pMatch->m_iMatchType==MATCH_TYPE_VS))
		m_pScene->m_bShowSecondPlayer=true;
	else
		m_pScene->m_bShowSecondPlayer=false;

	// update game state
	switch(m_GameState)
	{
	case GS_MENU:
		if (m_pMenu->GetSel(STATE_PREGAME) == 3)
		{
			m_pScene->PaintTitleAni(m_iTitleType, m_pUI);
		}
		else
		{
			m_pMenu->Draw(); 
		}

		
		break;


	case GS_LOADING:
		m_pEngine->GetGfx()->FillRec(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, MAKERGB(0, 0, 0));
		m_pUI->Loading(m_pMatch->GetLane());
		break;

	case GS_LEVEL_INTRODUCTION:
		{
			m_pScene->Paint(m_pUI);
			char* pStr=this->m_pDataManager->m_pSt

⌨️ 快捷键说明

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