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

📄 game.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
		m_iPlayerStatus = 0;
		// set tempin's state
		// set player's and ball's position
		if(m_pMatch->m_iMatchType==MATCH_TYPE_BONUS)
		{
			m_pMatch->SkipDelivery();
		}
		m_pScene->DeliveryInit();

#ifdef _COIN_SHOWING 
		if(m_pMatch->m_mode==MODE_FREE || m_pMatch->m_mode==MODE_QUICK || m_pMatch->m_mode==MODE_STORY)
		{
			CoinNextFunc();

			if(m_pMatch->GetCurPlayerAI()!=0)
				m_pScene->m_object[RENDER_COIN]->SetHideProperty(true);
			else if(m_pMatch->m_cnNextUCoinMatch==m_pMatch->m_cnMatchCount && 
				m_pMatch->m_uCoinRound==m_pMatch->GetCurRoundNumber() && !m_pMatch->m_smUCoinPassed &&m_SaveBonusCanSel[BONUS_COUNT-1]==false && !m_pScene->m_bIsDraw)
			{
				if(m_pMatch->m_uCoinInfo!=-1)
					if(m_SaveBonusCanSel[m_pMatch->m_uCoinInfo]==false)
					{	
						m_pScene->m_object[RENDER_COIN]->SetHideProperty(false);
						m_pScene->m_object[RENDER_COIN]->SetPosition(m_pMatch->m_uCoinPos);
						m_pMatch->m_cnInitPos=m_pMatch->m_uCoinPos;
						m_pScene->m_cnCurCType=m_pMatch->m_uCoinType;
						m_pScene->m_object[RENDER_COIN]->SetCurrentFrame(0);
						m_pScene->m_cnFlying=0;
					}
					//			m_pMatch->m_smUCoinPassed=false;
			}
			else if(m_pMatch->m_fCoinRound==m_pMatch->GetCurRoundNumber() && !m_pScene->m_bIsDraw)
			{
				m_pScene->m_object[RENDER_COIN]->SetHideProperty(false);
				m_pScene->m_object[RENDER_COIN]->SetPosition(m_pMatch->m_fCoinPos);
				m_pMatch->m_cnInitPos=m_pMatch->m_fCoinPos;
				m_pScene->m_cnCurCType=m_pMatch->m_fCoinType;
				m_pScene->m_object[RENDER_COIN]->SetCurrentFrame(0);
				m_pScene->m_cnFlying=0;
//			m_pMatch->m_smUCoinPassed=false;
			}
			else
				m_pScene->m_object[RENDER_COIN]->SetHideProperty(true);
		}
		else
			m_pScene->m_object[RENDER_COIN]->SetHideProperty(true);
#else
	m_pScene->m_object[RENDER_COIN]->SetHideProperty(true);
#endif

		m_pMatch->m_cnReplayHide=m_pScene->m_object[RENDER_COIN]->GetHideProperty();
		
		m_pMatch->m_bnRound=m_pMatch->GetCurRoundNumber();
		DBGPRINTF("MatchCount:%d CurrentRound:%d NextUnlockMatch:%d UnlockRound:%d FuncRound:%d",
			m_pMatch->m_cnMatchCount, m_pMatch->GetCurRoundNumber(), m_pMatch->m_cnNextUCoinMatch, 
			m_pMatch->m_uCoinRound, m_pMatch->m_fCoinRound);
		
		if(MODE_BONUS==m_pMatch->m_mode)
			m_MatchState=MS_BONUS_MONEY_BET;
		else
			m_MatchState=MS_DELIVERY;
		break;

	case MS_BONUS_MONEY_BET:
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_LEFT)||
			m_pEngine->GetInput()->KeyHold(VKEY_MENU_LEFT))//reduce money
		{	
			int i;
			for(i=0;(m_pMatch->m_BonusId)>BET_MONEY_LEVEL_INCREMENT_MAPPING[i];++i);
			int tmp=m_money.currBet-BET_MONEY_INCREMENT[i];
			m_money.currBet=tmp>0?tmp:0;
		}
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_RIGHT)||
			m_pEngine->GetInput()->KeyHold(VKEY_MENU_RIGHT)
			)//add money
		{
			int i;
			for(i=0;(m_pMatch->m_BonusId)>BET_MONEY_LEVEL_INCREMENT_MAPPING[i];++i);
			int tmp=m_money.currBet+BET_MONEY_INCREMENT[i];
			tmp=tmp>=m_money.totalMoney?m_money.totalMoney:tmp;
			tmp=tmp<BET_MONEY_lIMIT[i]?tmp:BET_MONEY_lIMIT[i];
			m_money.currBet=tmp;		
		}
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT))//confirm
		{
			updateBet(m_money,matchUpdateBet,m_money.currBet);//update the bet
			moneySave();//save, in case you cheats
			m_MatchState=MS_DELIVERY;
		}
	
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_CLR))
		{
			m_pause=true;
			m_pMenu->ResetState();
			m_pMenu->SetState(STATE_PAUSE);
			//don't show view score menu item
			m_pMenu->SetState(STATE_BONUSMODE);
		}

		break;
	case MS_DELIVERY:
		
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_PAUSE) && m_pScene->m_curStage!=DS_CLOSE_SEE_COIN 
			&& !(m_pScene->GetIsTutStage() && (m_pScene->GetCurTutorialStage() == TUTORIAL_FOUL || m_pScene->GetCurTutorialStage() == TUTORIAL_OVER_POWER)&& !m_pEngine->GetInput()->KeyPressed(gk_RSOFT|VKEY_MENU_CLR))
			&& !((m_pScene->GetIsWholeScoreBoard()||m_pScene->m_view || (m_pScene->m_curStage==DS_PLAYER_POWER_CONFIRM && (m_pMatch->GetCurPlayerAI()!=1)) ) && m_pEngine->GetInput()->KeyPressed(VKEY_MENU_CLR)))
		{
			if(m_pEngine->GetInput()->KeyPressed(gk_RSOFT)&&m_pScene->m_curStage==DS_DELIVERY_REPLAY)
			{
				;
			}
			else
			{			
				/*if((m_pScene->m_curStage == DS_PLAYER_POWER_CONFIRM))m_pScene->GetIsWholeScoreBoard() ||
				{
					;										
				}
				else*/
				{				
				m_pause=true;
				m_pScene->m_iPlayerMoving = 0 ; 
				m_pScene->SetMoving(false);

				pauseMIDI(); 
				m_pMenu->ResetState();
				if(m_pMatch->m_mode==MODE_STORY)
				{
					m_pMenu->SetState(STATE_STORYMODE);
				}
				else if(m_pMatch->m_mode==MODE_BONUS)
				{
					m_pMenu->SetState(STATE_BONUSMODE);
				}
				
					m_pMenu->SetState(STATE_PAUSE);
					return;
				}
			}
		
		}
		// call scene.update
	
		m_pScene->UpdateScene(m_pMatch->GetCurPlayerAI());
		

			


		++m_iRollingTime[1];
		
		if(m_pScene->m_curStage==DS_DELIVERY_END)
		{
			if(m_pMatch->GetMatchType()==MATCH_TYPE_VS || m_pMatch->GetMatchType()==MATCH_TYPE_FREE)
				m_MatchState=MS_VS_SCORE;
			else if(m_pMatch->GetMatchType()==MATCH_TYPE_BONUS && m_pMatch->m_mode!=MODE_STORY)
			{				
				m_MatchState=MS_BONUS_SCORE;
			}			
		}				
		
#ifdef ONLINE
		
		if(m_bOverTime && m_bOnlineMode)// now is online mode and time is up
		{			
			dealWithOverTime();
		}

		
#endif
		break;


	case MS_VS_SCORE:
		// call ToNextDelivery
		if(m_pScene->GetCheatMode() != CHEAT_JUMP_TO_NEXT_ROUND)
		{
			if(m_iPlayerStatus!=1)
			{
				if(m_pScene->GetIsDraw())
				{
					m_pMatch->ExtraNext();
				}
				m_pMatch->NextDelivery();
				m_iPlayerStatus = 1;
			}
		}
		m_MatchState=MS_DELIVERY_END;
		break;

	case MS_BONUS_SCORE:
		// call ToNextDelivery	
		if(m_pScene->GetCheatMode() != CHEAT_JUMP_TO_NEXT_ROUND)
		{
			m_pMatch->NextDelivery();
			m_iPlayerStatus = 1;			
			// for the money system
			updateBet(m_money,matchUpdateBetResult,m_money.currBet,(m_money.currSpareCount!=0));
			
			if(checkMoneyUnlock(m_money))//check if unlock new things 
			{
				updateMoneyUnlock(m_money);// update the new unlock
			}
			moneySave();
			m_moneyState=STATE_MONEY_RESULT_DONE;
		}
		if(m_pMatch->m_bnRound>=9 && m_pMatch->m_mode==MODE_BONUS)
		{
			m_pScene->SetCurHint(ID_HINT_BONUS_QUIT);
			m_pMatch->SetMatchFinish(true);
			m_pMatch->SetDrawMatchFinish(true);
			//m_MatchState=MS_RESULT_ANI;		
		}
		
		
		// to MS_DELIVERY_SCOREBOARD
		m_MatchState=MS_BONUS_WATING;
		break;
	case MS_BONUS_WATING:// display the bonus result
		++m_counterForMoney;
		switch(m_moneyState)
		{
		case STATE_MONEY_RESULT:
		case STATE_MONEY_RESULT_DONE:
			if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT))
			{
				if(m_money.newUnlock)//have something unlocked
					if(onlyOneUnlockToShow(m_money))
						m_moneyState=STATE_MONEY_UNLOCK_DONE;
					else
						m_moneyState=STATE_MONEY_UNLOCK;
					else// need to go out
					{
						//if it's not the bonus mode or the bonus mode round is less than 9: you can continue
						if((m_pMatch->m_bnRound<9 && m_pMatch->m_mode==MODE_BONUS)||m_pMatch->m_mode!=MODE_BONUS)
						{
							moneyMatchInit(m_money);
							m_MatchState=MS_DELIVERY_END;							
						}						
					}
			}
			if(!m_money.newUnlock)
			{
				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_EXIT|VKEY_MENU_CLR)
					|| (m_pMatch->m_bnRound>=9 && m_pMatch->m_mode==MODE_BONUS 
					&& m_pEngine->GetInput()->KeyPressed(gk_NUM5)))
				{
					m_MatchState=MS_MATCH_END;
				}
			}
			else
			{//added by Milo 06-02

				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_CLR))
				{
					if(onlyOneUnlockToShow(m_money))
						m_moneyState=STATE_MONEY_UNLOCK_DONE;
					else
						m_moneyState=STATE_MONEY_UNLOCK;			
				}
			}
			break;
		case STATE_MONEY_UNLOCK:
			if(m_money.newUnlock)// have some unlocked item
			{
				if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT|VKEY_MENU_CLR))
				{
					removeOneUnlock(m_money);
					if(onlyOneUnlockToShow(m_money))
						m_moneyState=STATE_MONEY_UNLOCK_DONE;
				}	
			}
			
				
			break;
		case STATE_MONEY_UNLOCK_DONE:
			
			if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT|VKEY_MENU_CLR))
			{
				//if it's not the bonus mode or the bonus mode round is less than 9: you can continue
				if((m_pMatch->m_bnRound<9 && m_pMatch->m_mode==MODE_BONUS)||m_pMatch->m_mode!=MODE_BONUS)
				{
					m_MatchState=MS_DELIVERY_END;
					moneyMatchInit(m_money);
				}
				
			}
			if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_EXIT|VKEY_MENU_CLR)
				|| (m_pMatch->m_bnRound>=9 && m_pMatch->m_mode==MODE_BONUS 
				&& m_pEngine->GetInput()->KeyPressed(gk_NUM5)))
			{
					m_MatchState=MS_MATCH_END;
					moneyMatchInit(m_money);
				}			
			break;
		}
		
		break;

	case MS_DELIVERY_END:
		if(m_pMatch->m_mode == MODE_FREE || m_pMatch->m_mode == MODE_QUICK || m_pMatch->m_mode == MODE_STORY)
			CoinUnlock();
		
		//if(!m_pScene->GetIsDraw())
		{
			isGameFinish();
		}
		
		
		break;

	case MS_MATCH_DRAW:
		if(m_pScene->UpdateScene(0) == MATCH_DRAW_RETURN)
		{
			//m_MatchState = MS_DELIVERY_INIT;
			m_pScene->SetStage(DS_MATCH_RESULT_SCOREBOARD);			
			m_MatchState=MS_MATCH_RESULT_SCOREBOARD;
		}			
		else if(m_pScene->UpdateScene(0) == MATCH_FINISH_RETURN)
		{
			m_pScene->SetStage(DS_MATCH_RESULT_SCOREBOARD);			
			m_MatchState=MS_MATCH_RESULT_SCOREBOARD;
		}
		
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT | VKEY_MENU_CLR))
		{
			m_pMatch->SetCurPlayer(0);
			m_pMatch->SetCurPinMode(ALL_TENPINS_STAND);
			m_pScene->SetStage(DS_MATCH_RESULT_SCOREBOARD);			
			m_MatchState=MS_MATCH_RESULT_SCOREBOARD;
		}
		break;

	case MS_RESULT_ANI:
		if(m_pMatch->GetMatchType() == MATCH_TYPE_FREE)// add by sunfishfine
		{
			m_pScene->SetStage(DS_MATCH_RESULT_SCOREBOARD);
			m_MatchState=MS_MATCH_RESULT_SCOREBOARD;
		}else
			m_pScene->UpdateScene(0);
		// TODO: animation
		// key press confirm
			// if vs mode, to MS_MATCH_RESULT_SCOREBOARD
			// else if bonus mode, to MS_MATCH_END
		if(m_pScene->m_frameIndex>=m_pScene->m_player->GetStopFrame())
			m_pScene->m_frameIndex=m_pScene->m_player->GetStopFrame();

		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_SELECT | VKEY_MENU_CLR))
		{
			if(m_pMatch->GetMatchType() == MATCH_TYPE_BONUS)
				m_MatchState=MS_MATCH_END;
			else if(m_pMatch->GetMatchType() == MATCH_TYPE_VS)
			{
				m_pScene->SetStage(DS_MATCH_RESULT_SCOREBOARD);
				m_MatchState=MS_MATCH_RESULT_SCOREBOARD;
			}
		}
		break;

	case MS_MATCH_RESULT_SCOREBOARD:
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_NEXT|VKEY_MENU_SELECT | VKEY_MENU_CLR))
		{
			if(m_pScene->GetIsDraw())
			{
				m_MatchState = MS_DELIVERY_INIT;
				//++m_iDrawCount;
			}
			else
			{
				int score;
			if(m_pMatch->GetPlayerAI(0)==0 && m_pMatch->GetPlayerAI(1)==0)//it is 2 human play
			{
				if(m_pMatch->GetPlayerScore(1)->totalScores[m_pMatch->GetRoundCount()]>m_pMatch->GetPlayerScore(0)->totalScores[m_pMatch->GetRoundCount()])
				{
					score=m_pMatch->GetPlayerScore(1)->totalScores[m_pMatch->GetRoundCount()];
					exchange2PlayerData(m_money,score);
				}
				else
				{
					score=m_pMatch->GetPlayerScore(0)->totalScores[m_pMatch->GetRoundCount()];
				}

			}
			else
			{
				score=m_pMatch->GetPlayerScore(0)->totalScores[m_pMatch->GetRoundCount()];// get the total score
			}
			
			if(m_pMatch->GetPlayerCount()==2 && m_pScene->m_bIsVSWin)
			{
				m_money.winBonus =MONEY_WINBONUS;	
			}
			m_counterForMoney=0;// the money animation counter
			m_moneyState=STATE_MONEY_RESULT;// set the money state
			m_pEngine->GetSound()->stopMIDI();
			//			m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_REPUTATION),1);//Milo 03-19
			
			if(!m_pMatch->m_smIsStoryMode)
			{
				calculateMoney(m_money,score);//calculate and update all the money
				if(checkMoneyUnlock(m_money))//check if unlock new things 
				{
					updateMoneyUnlock(m_money);// update the new unlock
				}
				//save money, when you are in story mode, do not save money. the money will be saved when you save story	
				
				moneySave();
			}
			else
			{
			calculateMoney(m_money,score,false);
			}
			
			m_MatchState=MS_MONEY_RESULT;
			}
		}
		break;

	case MS_QUICK_POSTSHOW:
		m_pScene->UpdateScene(0);
		if(m_pEngine->GetInput()->KeyPressed(VKEY_MENU_NEXT) || m_pEngine->GetInput()->KeyPressed(gk_NUM5) ||
			m_pEngine->GetInput()->KeyPressed(gk_MSOFT))
		{
			// press Next or Retry to next level
			m_MatchState=MS_MATCH_END;
		}
		m_step++;
		break;

	case MS_MATCH_END:
		if(m_pMatch->m_mode==MODE_FREE || m_pMatch->m_mode==MODE_QUICK || m_pMatch->m_mode==MODE_STORY)
		{
			m_pMatch->m_cnMatchCount++;
			CoinNextUnlock();
		}

		if(m_pMatch->m_mode==MODE_QUICK && m_pMatch->m_MatchResult!=0)
		{
			int t[]={2,3,4,5};
		//	if(m_SaveQMFinishTime<4)
		//		m_SavePlayerCanSel[t[m_SaveQMFinishTime]]=true;

			m_SaveQMFinishTime++;
		}
		unlockBallIcon();		// unlockballIcon
		
		if(m_pMatch->m_mode==MODE_QUICK || m_pMatch->m_mode==MODE_STORY || m_pMatch->m_mode==MODE_FREE)
			unlockPlayer();
		
		m_MatchState=MS_MATCH_EXIT;
		break;
		
	case MS_MATCH_EXIT:
		break;
		
	case MS_MONEY_RESULT:			
		++m_counterForMoney;// update the counter

		switch(m_moneyState) {// the money state
			// show the result
		case STATE_MONEY_RESULT:
			if(key)m_counterForMoney=CUI::MAXANIMFRAME+1;			
			if(m_counterForMoney>CUI::MAXANIMFRAME)// change the state
			{							
				m_pEngine->GetSound()->stopMIDI();
				if(m_money.newUnlock)
				{
					m_moneyState=STATE_MONEY_RESULT_DONE;					
				}
				else
				{
					m_moneyState=STATE_MONEY_UNLOCK_DONE;
				}
			}
				break;
			
			//the final result	
		case STATE_MONEY_RESULT_DONE:

			if(key)// if next key is pressed
					m_moneyState=STATE_MONEY_UNLOCK;				

⌨️ 快捷键说明

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