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

📄 ui.cpp

📁 一个3D的保龄球的源代码
💻 CPP
📖 第 1 页 / 共 4 页
字号:
			m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_R, x, y);
		j=k=0;
		for (i=0; i<3; i++)	{
			while ((str[j]) && (str[j] != '@'))
				j++;
			if (str[j])	{
				str[j] = 0;
				DrawMenuString(x-31-(lr?41:0), y-48+8*i, str+k);
				str[j] = '@';
				k=++j;
			}	else	{
				DrawMenuString(x-31-(lr?41:0), y-48+8*i, str+k);
				k=j;
			}
		}
		return;
	}
	i=j=k=0;
	if (lr)
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_LP2, x, y);
	else
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_RP2, x, y);
	if (m_tutString != str)	{
		m_tutString = str;
		m_tutFrame = 9;
	}	else
		m_tutFrame--;
	k=m_tutFrame;
	while (k<0)	{
		k+=8;
		while (str[i] && (str[i] != '@'))
			i++;
		if (str[i])
			i++;
		else
			i=0;
	}
	while (k<=34)	{
		j=i;
		while (str[j] && (str[j] != '@'))
			j++;
		if (str[j])	{
			str[j] = 0;
			DrawMenuString(x-31-(lr?41:0), y-56+k, str+i);
			str[j] = '@';
			i = j+1;
		}	else	{
			DrawMenuString(x-31-(lr?41:0), y-56+k, str+i);
			i=0;
		}
		k+=8;
	}
	if (lr)
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_LP1, x, y);
	else
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_RP1, x, y);
}

void CUI::CollideMString(int y, int yinc, int xdir, int ydir, const char *str[], int frame)
{
}

int CUI::GetB2CharModuleid(char ch) const
{
	if (ch >= 'A' && ch <= 'Z')
		return ch-'A'+14;
	if ((ch >= 'a' && ch <= 'z'))
		return ch-'a'+14;
	if (ch >= '0' && ch <= '9')
		return ch-'0';
	if (ch == '!')
		return 12;
	if (ch == '\'')
		return 13;
	return 0;
}

void CUI::BHChar(int ch, int x, int y, int size)
{
	SYS_ASSERT(ch>=0&&ch<=10);
	if (size == 0)
		m_pAnim[IDA_RESULTNUM].drawModule(99+ch, x, y);
	if (size == 1)
		m_pAnim[IDA_RESULTNUM].drawModule(110+ch, x, y-1);
	if (size == 2)
		m_pAnim[IDA_RESULTNUM].drawModule(121+ch, x, y-2);
}

void CUI::TVScreen(int cam, int ctrl, int maxf, int curf)
{
	const int i = INFOBARF_0+cam;
	//to fill the first line in tv screen when height be 204
	m_pGfx->DrawLine(0, 0, SCREEN_WIDTH, 0, MAKERGB(0, 0, 0));
	
	m_pGfx->DrawBmp(10, 24, m_Images[IMAGE_TVSPECULAR]->w, m_Images[IMAGE_TVSPECULAR]->h, m_Images[IMAGE_TVSPECULAR], 0, 0, GFX_SEMITRANS);
	m_pAnim[IDA_INFOBAR].drawFrame(i, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
	switch (ctrl)	{
	case -1:
		m_pGfx->DrawBmp(10, 24, m_Images[IMAGE_REPTUT]->w, m_Images[IMAGE_REPTUT]->h, m_Images[IMAGE_REPTUT], 0, 0, 0);
		break;
	case 1:
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_BW, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		break;
	case 2:
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_PAUSE, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_STEP, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		break;
	case 3:
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_FW, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		break;
	case 4:
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_PAUSE, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_STEP, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_STEPBW, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		break;
	case 5:
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_PAUSE, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_STEP, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_STEPFW, SCREEN_WIDTH/2, SCREEN_HEIGHT/2);
		break;
	}
	if (maxf)	{
		m_pAnim[IDA_INFOBAR].drawFrame(INFOBARF_PROGRESS, SCREEN_WIDTH/2+curf*68/maxf, SCREEN_HEIGHT/2);
		if (curf*68/maxf>=2)	{
			m_pGfx->DrawLine(85, SCREEN_HEIGHT-23, 85+curf*68/maxf-2, SCREEN_HEIGHT-23, MAKERGB(181, 239, 206));
			m_pGfx->DrawLine(85, SCREEN_HEIGHT-22, 85+curf*68/maxf-2, SCREEN_HEIGHT-22, MAKERGB(132, 207, 156));
			m_pGfx->DrawLine(85, SCREEN_HEIGHT-21, 85+curf*68/maxf-2, SCREEN_HEIGHT-21, MAKERGB(82, 158, 107));
		}
	}
}

int CUI::TVAnim(int i, int anim)
{
	if (anim < 0)
		anim = 0;
	m_pGfx->FillRec(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 0xffff);
	m_pGfx->DrawFadeMask(0x6e, 0x30, 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, 1);
	const int seq[12] =	{
		IMAGE_TVSPLASHA5, IMAGE_TVSPLASHA6, IMAGE_TVSPLASHA5, IMAGE_TVSPLASHA2, IMAGE_TVSPLASHA1, IMAGE_TVSPLASHA2, 
		IMAGE_TVSPLASHA7, IMAGE_TVSPLASHA8, IMAGE_TVSPLASHA7, IMAGE_TVSPLASHA4, IMAGE_TVSPLASHA3, IMAGE_TVSPLASHA4
	};
	const int seq2[12] =	{
		IMAGE_TVSPLASHB6, IMAGE_TVSPLASHB7, IMAGE_TVSPLASHB6, IMAGE_TVSPLASHB1, IMAGE_TVSPLASHB2, IMAGE_TVSPLASHB1, 
		IMAGE_TVSPLASHB8, IMAGE_TVSPLASHB5, IMAGE_TVSPLASHB8, IMAGE_TVSPLASHB3, IMAGE_TVSPLASHB4, IMAGE_TVSPLASHB3
	};
	m_pGfx->DrawBmp(10, 24, m_Images[i?seq[anim%12]:seq2[anim%12]]->w, m_Images[i?seq[anim%12]:seq2[anim%12]]->h, m_Images[i?seq[anim%12]:seq2[anim%12]], 0, 0, GFX_SEMITRANS);
	if (anim >= 30)
		return false;
	return true;
}

void CUI::Bet(int min, int max, int cur, int total)
{
	m_pGfx->DrawColorMask(MAKERGB(128, 128, 128), 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
	DrawMenuString(16, 43, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BET_TITLE]);
	DrawMenuString(SCREEN_WIDTH/2, 58, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BET_STRING], 1);
	DrawMenuString(SCREEN_WIDTH/2, 73, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BET_STRING2], 1);
	m_pGfx->DrawLine(10, 84, 166, 84, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(10, 85, 166, 85, MAKERGB(16, 81, 206));
	m_pGfx->DrawLine(10, 86, 166, 86, MAKERGB(16, 56, 173));
	char str[50];
	SPRINTF(str, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BET_MINMAX], min, max);
	DrawMenuString(SCREEN_WIDTH/2, 91, str, 1);
	SPRINTF(str, "$ %d", cur);
	DrawMenuString(SCREEN_WIDTH/2, 110, "      ", 1, 0, 1);
	DrawMenuString(SCREEN_WIDTH/2, 110, str, 1, 0);
	SPRINTF(str, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BET_TOTALMONEY], total);
	DrawMenuString(34, 137, str);
}

void CUI::BetResult(int money, int min, int total, int seed, int win)
{
	m_pGfx->DrawColorMask(MAKERGB(128, 128, 128), 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
	DrawMenuString(16, 58, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BETR_TITLE]);
	if (seed%9<6)
		if (win)
			BigString2(SCREEN_WIDTH/2, 73, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BETR_WIN], 1);
		else
			BigString2(SCREEN_WIDTH/2, 73, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_BETR_LOSE], 1);
	m_pGfx->DrawLine(10, 99, 166, 99, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(10, 100, 166, 100, MAKERGB(16, 81, 206));
	m_pGfx->DrawLine(10, 101, 166, 101, MAKERGB(16, 56, 173));
	char str[50];
	if (win>0)
		SPRINTF(str, "$ %d", money);
	else
		SPRINTF(str, "- $ %d", money);
	DrawMenuString(156, 106, str, 2);
	DrawMenuString(16, 137, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_TOTALMONEY]);
	if (seed < money/min)
		if (win)
			SPRINTF(str, "$ %d", total-money+seed*min);
		else
			SPRINTF(str, "$ %d", total+money-seed*min);
		else
			SPRINTF(str, "$ %d", total);
		DrawMenuString(156, 137, str, 2);
}

void CUI::RepResult(const MoneySys& ms, int& animseed, int need, int win)
{
	m_pGfx->DrawColorMask(MAKERGB(64, 64, 64), 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
	TVScreen();
	DrawMenuString(18, 36, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_RESULT]);
	m_pGfx->DrawLine(14, 46, 161, 46, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(14, 47, 161, 47, MAKERGB(16, 81, 206));
	m_pGfx->DrawLine(14, 48, 161, 48, MAKERGB(16, 56, 173));
	char str[50];
	int seed = animseed;
	int isSoundPlaying = false;
	seed-=4;
	if (seed<0)
		return;
	DrawMenuString(16, 57, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_SCORE]);
	seed-=2;
	if (seed<0)
		return;
	SPRINTF(str, "%d", ms.currScore);
	DrawMenuString(80, 57, str, 2);
	seed-=2;
	if (seed<0)
		return;
	DrawMenuString(84, 57, "X");
	SPRINTF(str, "%d", MONEY_SCORE);
	DrawMenuString(116, 57, str, 2);
	seed-=2;
	if (seed<0)
		return;
	if ((seed==0) && ms.currScore)	{
		m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_REPUTATION),0);
		isSoundPlaying = true;
	}
	SPRINTF(str, "%d", RollMoney(ms.currScoreMoney, seed));
	DrawMenuString(159, 57, str, 2);
	if(seed!=0 && isSoundPlaying)	
		m_pEngine->GetSound()->stopMIDI();
	seed-=4;
	if (seed<0)
		return;
	DrawMenuString(16, 72, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_STRIKE]);
	seed-=2;
	if (seed<0)
		return;
	SPRINTF(str, "%d", ms.currStrikeCount);
	DrawMenuString(80, 72, str, 2);
	seed-=2;
	if (seed<0)
		return;
	DrawMenuString(84, 72, "X");
	SPRINTF(str, "%d", MONEY_STRIKE);
	DrawMenuString(116, 72, str, 2);
	seed-=2;
	if (seed<0)
		return;
	if ((seed==0) && ms.currStrikeCount)	{
		m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_REPUTATION),0);
			isSoundPlaying = true;
	}
	SPRINTF(str, "%d", RollMoney(ms.currStrikeMoney, seed));
	DrawMenuString(159, 72, str, 2);
	if(seed!=0 && isSoundPlaying)
		m_pEngine->GetSound()->stopMIDI();
	seed-=4;
	if (seed<0)
		return;
	DrawMenuString(16, 87, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_SPARE]);
	seed-=2;
	if (seed<0)
		return;
	SPRINTF(str, "%d", ms.currSpareCount);
	DrawMenuString(80, 87, str, 2);
	seed-=2;
	if (seed<0)
		return;
	DrawMenuString(84, 87, "X");
	SPRINTF(str, "%d", MONEY_SPARE);
	DrawMenuString(116, 87, str, 2);
	seed-=2;
	if (seed<0)
		return;
	if ((seed==0) && ms.currSpareCount)	{
		m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_REPUTATION),0);
			isSoundPlaying = true;
	}
	SPRINTF(str, "%d", RollMoney(ms.currSpareMoney, seed));
	DrawMenuString(159, 87, str, 2);
	if(seed!=0 && isSoundPlaying)
		m_pEngine->GetSound()->stopMIDI();
	seed-=4;
	if (seed<0)
		return;
	if (need)	{
		DrawMenuString(16, 102, "Win Bonus");
		if (win)
			DrawMenuString(159, 102, "1000", 2);
		else
			DrawMenuString(159, 102, "0", 2);
	}
	DrawMenuString(18, 105+need*15, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_YOUEARN]);
	DrawMenuString(116, 105+need*15, "$", 2);
	if ((seed==0) && ms.currScoreMoney)	{
		m_pEngine->GetSound()->playMIDI(ConvertSoundID(ID_SOUND_REPUTATION),0);
			isSoundPlaying = true;
	}
	SPRINTF(str, "%d", RollMoney(ms.currScoreMoney+ms.currSpareMoney+ms.currStrikeMoney+ms.winBonus, seed));
	DrawMenuString(159, 105+need*15, str, 2);
	if(seed!=0 && isSoundPlaying)
		m_pEngine->GetSound()->stopMIDI();
	seed-=2;
	if (seed<0)
		return;
	m_pGfx->DrawLine(14, 118+need*15, 161, 118+need*15, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(14, 119+need*15, 161, 119+need*15, MAKERGB(16, 81, 206));
	m_pGfx->DrawLine(14, 120+need*15, 161, 120+need*15, MAKERGB(16, 56, 173));
	DrawMenuString(18, 126+need*15, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_REP_TOTALMONEY]);
	if (seed%9<6)	{
		SPRINTF(str, "$ %d", ms.totalMoney);
		DrawMenuString(159, 126+need*15, str, 2);
	}
	if (animseed<MAXANIMFRAME)
		animseed = MAXANIMFRAME+1;
}

void CUI::Unlock(int type, const char* name, int brep)
{
	if (!brep)	{
		m_pGfx->DrawColorMask(MAKERGB(128, 128, 128), 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
		DrawMenuString(SCREEN_WIDTH/2, 74, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_TITLE], 1);
		m_pGfx->DrawLine(10, 84, 166, 84, MAKERGB(16, 56, 173));
		m_pGfx->DrawLine(10, 85, 166, 85, MAKERGB(16, 81, 206));
		m_pGfx->DrawLine(10, 86, 166, 86, MAKERGB(16, 56, 173));
		char str[50];
		if (type == 1)
			SPRINTF(str, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_CHAR], name);
		if (type == 0)
			SPRINTF(str, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_BALL], name);
		if (type == 2)
			SPRINTF(str, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_COSTUME], name);
		DrawMenuString(SCREEN_WIDTH/2, 88, str, 1);
		return;
	}
	m_pGfx->DrawColorMask(MAKERGB(64, 64, 64), 0, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
	TVScreen();
	DrawMenuString(18, 36, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_RESULT]);
	m_pGfx->DrawLine(14, 46, 161, 46, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(14, 47, 161, 47, MAKERGB(16, 81, 206));
	m_pGfx->DrawLine(14, 48, 161, 48, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(14, 118, 161, 118, MAKERGB(16, 56, 173));
	m_pGfx->DrawLine(14, 119, 161, 119, MAKERGB(16, 81, 206));
	m_pGfx->DrawLine(14, 120, 161, 120, MAKERGB(16, 56, 173));
	DrawMenuString(SCREEN_WIDTH/2, 68, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_TITLE], 1);
	if (type == 1)
		DrawMenuString(SCREEN_WIDTH/2, 85, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_CHAR2], 1);
	if (type == 0)
		DrawMenuString(SCREEN_WIDTH/2, 85, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_BALL2], 1);
	if (type == 2)
		DrawMenuString(SCREEN_WIDTH/2, 85, ((CGame*)m_pEngine->m_pGame)->GetDataManager()->m_pStringItem[ID_UI_UNLOCK_COSTUME], 1);
	DrawMenuString(SCREEN_WIDTH/2, 102, name, 1);
}

//draw VS string effect, move from right to center
bool CUI::DrawVStringEffect(const char ** strings, int strCount, int y, int cpt, int space)
{
	bool ret=false;

	int i;
	int pStrWidth[10];
	int pStrX[10];
	char **str = (char **)strings;
	int total_width=0;
	int step = 33;

	//calculate string witdh
	for( i=0; i<strCount; i++ )
	{
		pStrWidth[i] = BStr2Len(str[i]);
		total_width += pStrWidth[i];
	}

	//calculate Y value
/*	if( strCount == 3 )
	{
		pStrX[1] = (SCREEN_WIDTH - pStrWidth[1])/2;
		pStrX[0] = pStrX[1] - pStrWidth[0] - space;
		pStrX[2] = pStrX[1] + pStrWidth[1] + space;
	}
	else
*/	{
		pStrX[0] = (SCREEN_WIDTH - total_width - (strCount-1)*space )/2;
		for( i=1; i<strCount; i++ )
		{
			pStrX[i] = pStrX[i-1] + pStrWidth[i-1] + space;
		}
	}

	//init
	if( cpt == 0 )
	{
		curLine = 0;
		curLine_deltacpt = 0;
	}
	else
	{
		curLine_deltacpt++;
	}

	//draw moving string
	for( i=0; i<strCount; i++ )
	{
		if( i < curLine )
		{
			//draw string at exact place
			BigString2(pStrX[i], y, str[i], 0);	//align left
		}
		else if( i == curLine )
		{
			int x = SCREEN_WIDTH + step*2 - step * curLine_deltacpt;
			if( x < pStrX[i] )
			{
				x = pStrX[i];
				curLine++;
				curLine_deltacpt = 0;
			}
			BigString2(x, y, str[i], 0);	//align left
		}
	}

	if( curLine >= strCount )
		ret = true;

	return ret;
}

void CUI::DrawTutAction(int type)
{
	switch (type)	{
	case 0:
		m_pAnim[IDA_AIMSPOT].drawAction(1, ((m_arrAni++)&4)>>2, SCREEN_WIDTH/2, SCREEN_HEIGHT-15);
		break;
	case 1:
		m_pAnim[IDA_AIMSPOT].drawAction(0, ((m_arrAni++)&4)>>2, SCREEN_WIDTH/4, SCREEN_HEIGHT/2+15);
		break;
	case 2:
		m_pAnim[IDA_AIMSPOT].drawAction(0, ((m_arrAni++)&4)>>2, SCREEN_WIDTH/2, SCREEN_HEIGHT-50);
		break;
	case 3:
		m_pAnim[IDA_AIMSPOT].drawAction(2, ((m_arrAni++)&4)>>2, SCREEN_WIDTH/2, SCREEN_HEIGHT-30);
		break;
	}
}

int CUI::RollMoney(int money, int& seed)
{
	int ret = 0;
	int i, j = 1;
	while (money && seed)	{
		if (i=money%10)
			if (seed > i)	{
				ret += j*i;
				seed -= i;
			}	else	{
				ret += j*seed;
				seed = 0;
			}
		j*=10;
		money/=10;
	}
	return ret;
}

void CUI::SelArrow(int x, int y)
{
	m_arrAni %= m_pAnim[IDA_MENU].GetActionSize(MENUA_2_A)*4;
	m_pAnim[IDA_MENU].drawModule(10, x-30-7-(m_arrAni++)/4, y-6);
	m_pAnim[IDA_MENU].drawModule(9, x+30+(m_arrAni++)/4, y-6);
}

⌨️ 快捷键说明

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