[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]
テトリスC++版のプレイ中に暫定順位を表示するのに合わせて、ランクインしている場合はカラー化してリアルタイムで表示するようにしました。
for文を使ってレンダリングする場合は、バイト数が一致するようにしないと表示がおかしくなります。今回は6〜9位と10位(1バイト多い)を別扱いにしています。
これで基本的な機能はほぼ実装したでしょうか。
void Game::DrawPlaying(Renderer& renderer)
{
<中略>
for (int i = 0 ; i < 5 ; i++){
snprintf(text, sizeof(text), "High score %d: %s %s", i+1, to_string(scores[i]).c_str(), dates[i].c_str());
if (fullDates[i] != startTime){
renderer.DrawText(text, 20, 170 + 40*i, mFont, 0xffffffff );
} else {
renderer.DrawText( text, 20, 170 + 40*i, mFont, 0xFF4500ff );
}
}
for (int i = 5 ; i < 9 ; i++){
snprintf(text, sizeof(text), "High score %d: %s %s", i+1, to_string(scores[i]).c_str(), dates[i].c_str());
if (fullDates[i] != startTime){
renderer.DrawText(text, 100, 370 + 30*(i-5), mFont2, 0xffffffff );
} else {
renderer.DrawText(text, 100, 370 + 30*(i-5), mFont2, 0xFF4500ff );
}
}
snprintf(text, sizeof(text), "High score 10: %s %s", to_string(scores[9]).c_str(), dates[9].c_str());
if (fullDates[9] != startTime){
renderer.DrawText(text, 100, 370 + 30*4, mFont2, 0xffffffff );
} else {
renderer.DrawText(text, 100, 370 + 30*4, mFont2, 0xFF4500ff );
}
<以下略>