スコア表示処理

ステージクリアー!

今回もなんてことはないですが…。
 
例えば、1234を画像で表示する場合には、
こんな風に求めます。
 
千の位:1234÷(10^3)=1
百の位:1234%(10^3)÷(10^2)=2
十の位:1234%(10^2)÷(10^1)=3
一の位:1234%(10^1)÷(10^0)=4
 
DirectXソースコードに落とすとこんな感じです。

// ============================================================================
// 数字の描画
// @param *pos  描画開始座標
// @param num   描画数字
// @param digit 桁数
// @param scale 描画倍率
// @param color 描画色
// ============================================================================
void CDirectGraphics::DrawNumber(D3DXVECTOR2 *pos, LONG num, int digit, FLOAT scale, D3DCOLOR color)
{
	if(num < 0 || digit < 1) return;
	int rem = num % GetPowDecimal(digit); // 剰余を求めて
	int cnt = rem / GetPowDecimal(digit-1); // 桁の数値を求める
	if(cnt > 9) return;

	int cntX = 1;
	DrawSprite(-98, pos, &Rect(cnt*16, 0, (cnt+1)*16, 32).GetRect(), &D3DXVECTOR2(scale, scale), NULL, 0, color);
	for(int i = digit - 1; i > 0; i--)
	{
		rem = num % GetPowDecimal(i);
		cnt = rem / GetPowDecimal(i-1);
		DrawSprite(-98, &D3DXVECTOR2(pos->x+FLOAT(16*scale*cntX), pos->y), &Rect(cnt*16, 0, (cnt+1)*16, 32).GetRect(), &D3DXVECTOR2(scale, scale), NULL, 0, color);
		cntX++;
	}
}

個人的な処理を解説すると、
Rect::GetRect()はRECT構造体を返し、
GetPowDecimal()は10^xを返すinline関数です。
 
DrawSpriteはスプライト描画のラッパー関数です。
(テクスチャ番号、描画座標、描画サイズ、描画倍率、…)
 
…まあ、でも、stringに入れて一文字ずつ切り出した方が早い
(分かりやすいという意味で)かもしれませんね…(´Д`;