📄 game.cpp
字号:
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 + -