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

📄 menu.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
				m_pUI->GetGfx()->DrawLine(14, 26, 161, 26, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 27, 161, 27, MAKERGB(16, 81, 206));
				m_pUI->GetGfx()->DrawLine(14, 28, 161, 28, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 51, 161, 51, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 52, 161, 52, MAKERGB(16, 81, 206));
				m_pUI->GetGfx()->DrawLine(14, 53, 161, 53, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 71, 161, 71, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 72, 161, 72, MAKERGB(16, 81, 206));
				m_pUI->GetGfx()->DrawLine(14, 73, 161, 73, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 116, 161, 116, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 117, 161, 117, MAKERGB(16, 81, 206));
				m_pUI->GetGfx()->DrawLine(14, 118, 161, 118, MAKERGB(16, 56, 173));
				m_pUI->DrawMenuString(35, 31, "win", 1);
				SPRINTF(str, "%d", win);
				m_pUI->DrawMenuString(35, 41, str, 1);
				m_pUI->DrawMenuString(88, 31, "draw", 1);
				SPRINTF(str, "%d", draw);
				m_pUI->DrawMenuString(88, 41, str, 1);
				m_pUI->DrawMenuString(142, 31, "loss", 1);
				SPRINTF(str, "%d", loss);
				m_pUI->DrawMenuString(142, 41, str, 1);
				m_pUI->DrawMenuString(14, 61, "your stats");
				SPRINTF(str, "%d", hscore);
				m_pUI->DrawMenuString(35, 77, str, 1);
				SPRINTF(str, "%d", averank);
				m_pUI->DrawMenuString(35, 91, str, 1);
				SPRINTF(str, "%d", winrank);
				m_pUI->DrawMenuString(35, 105, str, 1);
				m_pUI->DrawMenuString(88, 77, "h.score", 1);
				m_pUI->DrawMenuString(88, 91, "ave.rank", 1);
				m_pUI->DrawMenuString(88, 105, "win%rank", 1);
			}
			if (m_accrej)
				m_pUI->DrawMenuString(SCREEN_WIDTH/2, 150, "Waiting opponent", 1);
			else
				if (m_acceptop)	{
					m_pEngine->GetNetwork()->getRivalName(str, &hscore, &winrank, &averank);
					m_pUI->DrawMenuString(SCREEN_WIDTH/2, 154, str, 1);
					SPRINTF(str, "%d", hscore);
					m_pUI->DrawMenuString(142, 77, str, 1);
					SPRINTF(str, "%d", averank);
					m_pUI->DrawMenuString(142, 91, str, 1);
					SPRINTF(str, "%d", winrank);
					m_pUI->DrawMenuString(142, 105, str, 1);
					m_pUI->DrawMenuString(SCREEN_WIDTH/2, 139, "play with?", 1);
					m_pUI->DrawMenuString(161, 122, "opponent", 2);
					for (i=0; i<m_nCount[s]; i++)
						if (i==m_nSel[s])
							m_pUI->DrawMenuString(36+i*80, 169, m_cItemString[s][i], 0, 0);
						else
							m_pUI->DrawMenuString(36+i*80, 169, m_cItemString[s][i], 0, 1);
				}	else
					m_pUI->DrawMenuString(SCREEN_WIDTH/2, 150, "Waiting for reply", 1);
		}
		break;
	case STATE_RANKING:
		{
			RANK_DATA rd[20];
			m_pUI->DrawMenuBg(3);
			m_pUI->DrawLButton(3);
			if (m_rank3)	{
				switch (m_nSel[s])	{
				case 0:
					m_pEngine->GetNetwork()->getRank(rd);
					m_pUI->DrawMenuString(155, 30, "h.score", 2, 1, 1);
					break;
				case 1:
					m_pEngine->GetNetwork()->getAveRank(rd);
					m_pUI->DrawMenuString(155, 30, "ave.point", 2, 1, 1);
					break;
				case 2:
					m_pEngine->GetNetwork()->getWinRank(rd);
					m_pUI->DrawMenuString(155, 30, "win%", 2, 1, 1);
					break;
				}
				m_pUI->GetGfx()->DrawLine(14, 23, 161, 23, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 24, 161, 24, MAKERGB(16, 81, 206));
				m_pUI->GetGfx()->DrawLine(14, 25, 161, 25, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 40, 161, 40, MAKERGB(16, 56, 173));
				m_pUI->GetGfx()->DrawLine(14, 41, 161, 41, MAKERGB(16, 81, 206));
				m_pUI->GetGfx()->DrawLine(14, 42, 161, 42, MAKERGB(16, 56, 173));
				m_pUI->DrawMenuString(20, 30, "name");
				for (i=0; i<10; i++)	{
					if (rd[i].score)	{
						m_pUI->DrawMenuString(20, 50+i*13, rd[i].name);
						SPRINTF(str, "%d", rd[i].score);
						m_pUI->DrawMenuString(140, 50+i*13, str, 1);
					}
				}
			}	else
				m_pUI->DrawMenuString(SCREEN_WIDTH/2, 100, "Retrieve ranking info...", 1);
		}
		break;
	case STATE_TIMEDINFO:
		m_pUI->DrawMenuBg(3);
		switch (m_nSel[s])	{
		case ERR_NONETWORK:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_NONETWORK], 1);
			break;
		case ERR_GETNICKNAME:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRGETNICK], 1);
			break;
		case ERR_SETNICKNAME:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRSETNICK], 1);
			break;
		case ERR_NICKNAMEDUP:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "nickname used", 1);
			break;
		case ERR_LOGIN:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRLOGIN], 1);
			break;
		case ERR_GETRIVALNAME:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRGETRIVAL], 1);
			break;
		case ERR_GETACCINFO:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRGETACC], 1);
			break;
		case ERR_REJECTED:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_ERRREJ], 1);
			break;
		case ERR_GETRANK:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "get rank error", 1);
			break;
		case STOP_CONNECT:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, m_pDataManager->m_pStringItem[ID_TIMEDINFO_EXITNET], 1);
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2+20, m_pDataManager->m_pStringItem[ID_TIMEDINFO_EXITNET2], 1);
			break;
		case RESET_SUC:
			m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Reset succeed", 1);
			break;
		}
		break;
	case STATE_INITCONNECT:
		m_pUI->DrawMenuBg(1);
		m_pUI->DrawLButton(3);
		m_pUI->DrawMenuString(SCREEN_WIDTH/2, SCREEN_HEIGHT/2, "Init Connection...", 1);
		break;
	}
	if (byesno)	{
		char *str;
		m_pEngine->GetGfx()->DrawColorMask(MAKERGB(96, 96, 96), 0, 0, 75, SCREEN_WIDTH, 50);
		m_pUI->GetGfx()->FillRec(0, 191, SCREEN_WIDTH, SCREEN_HEIGHT-191, 0);
		m_pUI->DrawLButton(3);
		m_pUI->DrawRButton(3);
		switch (m_iynState)	{
		case YESNO_EXITGAME:
			str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_EXITGAME];
			break;
		case YESNO_EXITFROMGAME:
			str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_EXITFROMGAME];
			break;
		case YESNO_SAVEGAME:
			str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_SAVEGAME];
			break;
		case YESNO_NEWSTORY:
			str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_NEWSTORY];
			break;
		case YESNO_SAVEGAMEANDEXIT:
			str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_SAVEGAMEANDEXIT];
			break;
		case YESNO_RESETONLINE:
			str = m_pDataManager->m_pStringItem[ID_STATE_YESNO_RESETONLINE];
			break;
		}
		m_pUI->DrawMenuString(SCREEN_WIDTH/2, 85, str, 1);
		for (i=0; i<m_nCount[STATE_YESNO]; i++)
			if (i==m_nSel[STATE_YESNO])
				m_pUI->DrawMenuString(36+i*80, 105, m_cItemString[STATE_YESNO][i], 0, 0);
			else
				m_pUI->DrawMenuString(36+i*80, 105, m_cItemString[STATE_YESNO][i], 0, 1);
		m_iState |= 1<<STATE_YESNO;
	}
}


void CMenu::Update()
{
	MENUSTATE mainsel[] = 
	{
		STATE_QUICKMODE,
#ifdef	ONLINE
		STATE_ONLINEMODE,
#endif
		STATE_STORYMODE,
		STATE_FREEMODE,
		STATE_BONUSMODE,
		STATE_OPTION,
		STATE_HELP,
		STATE_CREDIT,
		STATE_YESNO,
	};
	MENUSTATE pausesel[6] = 
	{
		STATE_STARTGAME,
		STATE_OPTION,
		STATE_HELP,
		CheckState(STATE_BONUSMODE)?STATE_YESNO:STATE_VIEWSCORE,
		STATE_YESNO,
		STATE_YESNO,
//		CheckState(STATE_BONUSMODE)?STATE_EXITFROMGAME:STATE_VIEWSCORE,
//		(CheckState(STATE_STORYMODE) && ((CGame*)m_pEngine->m_pGame)->m_saveFlag <= 0)?STATE_SAVEGAME:STATE_EXITFROMGAME,
//		STATE_EXITFROMGAME,
	};
	MENUSTATE s = GetState();
	if (!m_pGame)
		m_pGame = (CGame*)m_pEngine->m_pGame;
	int i;
	switch (s)	{
	case STATE_SUSPEND:
		m_pGame->m_chcode = false;
		return;
	case STATE_PREGAME:
		switch (m_nSel[s])	{
		case 0:
#ifdef AEE_SIMULATOR
			if((GETUPTIMEMS()-m_WindDur)>2)
#else
			if((GETUPTIMEMS()-m_WindDur)>2000)
#endif
				m_nSel[s]++;
			if(m_pInput->KeyPressed(VKEY_MENU_CLR))
				ResetState();
			break;
		case 1:
			if(m_pInput->KeyPressed(gk_RSOFT)||m_pInput->KeyPressed(VKEY_COMMAND))	{//yes, have sound
				if (m_pEngine->GetSound()->m_soundVolume == 0)

#ifdef LG
				m_pEngine->GetSound()->SetVolume(CSound::soundMid);
#else
				m_pEngine->GetSound()->SetVolume(CSound::soundLoud);
#endif
			

				if (((CGame*)m_pEngine->m_pGame)->m_saveFlag <= 0)	{
					m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_LEE_THROW2),0);
					m_pGame->GetScene()->LoadTitleAni(TITLE_FIRST_ANI);//Milo
					m_nSel[s] += 2;
					m_pGame->saveGeneralRecord(SAVE_OPTION);
				}	else
					m_nSel[s]++;
					
			}	else
				if (m_pInput->KeyPressed(gk_LSOFT))	{//no, no sound
#ifndef LG
					m_pEngine->m_bSoundVolumeSet=true;
#endif
					m_pEngine->GetSound()->SetVolume(CSound::soundNone);
				if (((CGame*)m_pEngine->m_pGame)->m_saveFlag <= 0)	{
					m_pGame->GetScene()->LoadTitleAni(TITLE_FIRST_ANI);//Milo
					m_nSel[s] += 2;
					m_pGame->saveGeneralRecord(SAVE_OPTION);
				}	else
					m_nSel[s]++;
			
				}
			if(m_pInput->KeyPressed(VKEY_MENU_CLR))
				ResetState();
			break;
		case 2:
			if (m_pInput->KeyPressed(VKEY_MENU_NEXT))	{
				if (m_pEngine->GetSound()->m_soundVolume != CSound::soundNone)
					m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_LEE_THROW2),0);
				m_pGame->GetScene()->LoadTitleAni(TITLE_FIRST_ANI);//Milo
				m_nSel[s]++;
			}
			if(m_pInput->KeyPressed(VKEY_MENU_BACK))
				ResetState();
			break;
		case 3:
			if ((m_pInput->KeyPressed(gk_RSOFT) || m_pInput->KeyPressed(VKEY_COMMAND) ) || 
				(m_pGame->GetTitleType() == TITLE_ANI_DONE) )	{
				m_pGame->ReleaseLocalResource();
				m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_MENU),1);
				m_nSel[s]++;
			}
			if(m_pInput->KeyPressed(VKEY_MENU_CLR))
				ResetState();
			break;
		case 4:
			if (m_pInput->isAnyKeyDown() && !m_pInput->KeyPressed(gk_SEND) && !m_pInput->KeyPressed(VKEY_MENU_CLR))	{
				GoBack(GetState());
				SetState(STATE_MAINMENU);
			}
			if (m_pInput->KeyPressed(VKEY_MENU_CLR))
				ResetState();
			break;
		}
		return;
	case STATE_MAINMENU:
		
		m_pGame->onlineClear();
		if(isCheatOpen() == CHEAT_OPEN)
		{
			if (m_pInput->KeyPressed(gk_NUM9))
				m_pGame->m_chcode = true;
			if (m_pInput->KeyPressed(gk_NUM7))	
			{
				m_pGame->initGeneralRecord();
				m_pGame->GetScene()->m_pMatch->m_cnMatchCount = 0;
			}
		}		
		if (m_mminAnim < MMANIMFRAME*3)
			return;
		HandleUD(s);
		if (m_pInput->KeyPressed(VKEY_MENU_UP) || m_pInput->KeyPressed(VKEY_MENU_DOWN))
			m_mmAnim=0;
		if (m_pInput->KeyPressed(VKEY_MENU_RIGHT))
			if ((mainsel[m_nSel[s]] == STATE_STORYMODE) || (mainsel[m_nSel[s]] == STATE_FREEMODE)
				 || (mainsel[m_nSel[s]] == STATE_BONUSMODE) || (mainsel[m_nSel[s]] == STATE_ONLINEMODE))
				SetState(mainsel[m_nSel[s]]);
		if (m_pInput->KeyPressed(VKEY_MENU_SELECT))
			switch (mainsel[m_nSel[s]])	{
			case STATE_BONUSMODE:
			case STATE_FREEMODE:
			case STATE_STORYMODE:
			case STATE_ONLINEMODE:
				SetState(mainsel[m_nSel[s]]);
				break; 
			case STATE_QUICKMODE:
				// random selection
				m_nSel[STATE_QUICKMODE] = 1;
				SetState(STATE_QUICKMODE);
				SetState(STATE_PLAYERSELECTA, 1);
				InitSel();
				m_nSel[STATE_PLAYERSELECTB] = _rand(0, m_nCount[STATE_PLAYERSELECTB]-1);
				m_nSel[STATE_CLOTHSELECTB] = _rand(0, m_nCount[STATE_CLOTHSELECTB]-1);
				m_nSel[STATE_BALLSELECTA] = _rand(0, m_nCount[STATE_BALLSELECTA]-1);
				while (!m_pGame->m_SaveBallCanSel[m_nSel[STATE_BALLSELECTA]])
					m_nSel[STATE_BALLSELECTA] = _rand(0, m_nCount[STATE_BALLSELECTA]-1);
				m_nSel[STATE_BALLSELECTB] = m_pDataManager->m_pPlayer[m_nSel[STATE_PLAYERSELECTB]].ballIndex;
				m_nSel[STATE_ICONSELECTA] = _rand(0, m_nCount[STATE_ICONSELECTA]-1);
				m_nSel[STATE_ICONSELECTB] = _rand(0, m_nCount[STATE_ICONSELECTB]-1);
				m_nSel[STATE_LANESELECT] = _rand(0, m_nCount[STATE_LANESELECT]-1);
				ReleaseResource();
				break;
			default:
				SetState(mainsel[m_nSel[s]], 1);
				m_iynState = YESNO_EXITGAME;
				ReleaseResource();
			}
		if (m_pInput->KeyPressed(VKEY_MENU_CLR))
			ResetState();
		return;
	case STATE_BONUSMODE:
	case STATE_FREEMODE:
	case STATE_STORYMODE:
	case STATE_ONLINEMODE:
		if (m_pGame->m_SaveCanContinue && ((CGame *)m_pEngine->m_pGame)->m_saveFlag <= 0)
			m_nCount[STATE_STORYMODE] = 2;
		else
			m_nCount[STATE_STORYMODE] = 1;
		m_nSel[s] %= m_nCount[s];
		HandleUD(s);
		if (m_pInput->KeyPressed(VKEY_MENU_BACK) || m_pInput->KeyPressed(VKEY_MENU_LEFT))	{
			int temp = m_mminAnim;
			GoBack(GetState());
			m_mminAnim = temp;
		}
		if (m_pInput->KeyPressed(VKEY_MENU_SELECT))	{
			switch (s)	{
			case STATE_BONUSMODE:
				if (m_nSel[s])
					SetState(STATE_LANESELECT, 1);
				else
					SetState(STATE_BONUSSELECT);
				break;
			case STATE_ONLINEMODE:
				if (m_pEngine->m_pIWeb && m_pEngine->m_pIWebUtil)	{
					if (!m_nSel[s])	{
						SetState(STATE_PLAYERSELECTA, 1);
						InitSel();
					}
					if (m_nSel[s] == 2)	{
						SetState(STATE_YESNO);
						m_iynState = YESNO_RESETONLINE;
					}
					if (m_nSel[s] == 1)
						SetState(STATE_RANKING);
				}	else
					SetState(STATE_TIMEDINFO, ERR_NONETWORK);
				break;
			case STATE_STORYMODE:
				if (m_nSel[s])
					SetState(STATE_STARTGAME);
				else
					if (m_pGame->m_SaveCanContinue && ((CGame *)m_pEngine->m_pGame)->m_saveFlag <= 0)	{
						SetState(STATE_YESNO);
						m_iynState = YESNO_NEWSTORY;

⌨️ 快捷键说明

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