3.3「章簡単な選択画面を作る」について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
dicon

3.3「章簡単な選択画面を作る」について

#1

投稿記事 by dicon » 12年前

この章では↓キーを押すことでSelectNum = (SelectNum + 1) % 5の処理で0~5のループをしていました。
そこで↑キーでも同じ事をやってみようと思い、SelectNum = (SelectNum - 1) % 5で処理をしてみたのですが、この場合0から-1された時に-1となり、ループが出来ません。
if(SelectNum < 0) SelectNum = 4;とすればいいと思うのですが入れると上にある処理を分解しなくてはいけないし、↑キーの処理だけ見た目があれになるのも嫌なので、いい方法ありませんか?


<code=C>
while(!ProcessMessage() && !ScreenFlip() && !ClearDrawScreen() && !gpUpdateKey())
{
//----更新処理----//

if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_DOWN ] > 30)
{ // 下キーが押された瞬間だけ処理
SelectNum = ( SelectNum + 1 ) % 5; // 現在の選択項目を一つ下にずらす(ループする)
}
if(Key[ KEY_INPUT_UP ] == 1 || Key[ KEY_INPUT_UP ] > 30)
{ //上キーが押された瞬間だけ処理
SelectNum = ( SelectNum - 1 ) % 5; // 現在の選択項目を一つ上にずらす(ループする)
}


//----描画処理----//

for( int i=0; i<5; i++ ){ // メニュー項目を描画
if(i == SelectNum)
{
DrawFormatString( MenuElement.x - 20, MenuElement.y, GetColor(255,255,255), MenuElement.name );
}
else
{
DrawFormatString( MenuElement.x, MenuElement.y, GetColor(255,255,255), MenuElement.name );
}
}

}
</code>

アバター
みけCAT
記事: 6734
登録日時: 15年前
住所: 千葉県
連絡を取る:

Re: 3.3「章簡単な選択画面を作る」について

#2

投稿記事 by みけCAT » 12年前

SelectNum = ((SelectNum - 1)+5) % 5とするのがいいと思います。
また、「5」というマジックナンバーではなく、定数を利用するとさらに良くなると思います。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Tice
記事: 1
登録日時: 12年前

Re: 3.3「章簡単な選択画面を作る」について

#3

投稿記事 by Tice » 12年前

なるほど!解決しました!ありがとうございます。
しかし3.4章に書いてあったのですね;少し焦りすぎました;

でも書き方が2つ知れた事もいい経験値となったと思います。ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る