項目選択画面をC言語で作成中理解できない点が出てきました。

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

項目選択画面をC言語で作成中理解できない点が出てきました。

#1

投稿記事 by C言語初心者 » 3年前

コード:

const static int GAME_Y   = 240;    //「ゲーム」文字のy位置
const static int CONFIG_Y = 270;    //「設定」文字のy位置

typedef enum{
    eMenu_Game,        //ゲーム
    eMenu_Config,    //設定

    eMenu_Num,        //本項目の数
} eMenu ;

static int NowSelect = eMenu_Game;    //現在の選択状態(初期はゲーム選択中)

//更新
void Menu_Update(){
    if(Keyboard_Get(KEY_INPUT_DOWN)==1){//下キーが押されていたら
        NowSelect = (NowSelect+1)%eMenu_Num;//選択状態を一つ下げる
    }
    if(Keyboard_Get(KEY_INPUT_UP)==1){//上キーが押されていたら
        NowSelect = (NowSelect+(eMenu_Num-1))%eMenu_Num;//選択状態を一つ上げる
    }
    if(Keyboard_Get(KEY_INPUT_RETURN)==1){//エンターキーが押されたら
        switch(NowSelect){//現在選択中の状態によって処理を分岐
        case eMenu_Game://ゲーム選択中なら
            SceneMgr_ChangeScene(eScene_Game);//シーンをゲーム画面に変更
            break;
        case eMenu_Config://設定選択中なら
            SceneMgr_ChangeScene(eScene_Config);//シーンを設定画面に変更
            break;
        }
    }
}
新ゲームプログラミングの館のソースを参考に項目を選択できるようなプログラムを書いています。

コード:

void Menu_Update(){
    if(Keyboard_Get(KEY_INPUT_DOWN)==1){//下キーが押されていたら
        NowSelect = (NowSelect+1)%eMenu_Num;//選択状態を一つ下げる
    }
    if(Keyboard_Get(KEY_INPUT_UP)==1){//上キーが押されていたら
        NowSelect = (NowSelect+(eMenu_Num-1))%eMenu_Num;//選択状態を一つ上げる
このプログラムで躓いてしまい、なぜ NowSelect に+1して Menu_Num; で割ると状態を一つ下げることができるのでしょうか?Menu_Numは前文で特に数値など定義されておらず計算結果がどのように出ているかがよく理解できていません。
これさえ分かれば前文理解できると思うので教えていただけると助かります。

よもやま
記事: 68
登録日時: 5年前
連絡を取る:

Re: 項目選択画面をC言語で作成中理解できない点が出てきました。

#2

投稿記事 by よもやま » 3年前

Visual Studio 2007 Communityでコンパイル(CPP)

コード:

typedef enum {
	eMenu_Game,        //ゲーム
	eMenu_Config,    //設定

	eMenu_Num,        //本項目の数
} eMenu;

static int NowSelect = eMenu_Game;    //現在の選択状態(初期はゲーム選択中)
int main()
{
	printf("menu item Down\n");
	for (int i = 0; i < 12; i++) {
		NowSelect = (NowSelect + 1) % eMenu_Num;
		printf("NowSelect=%d\n", NowSelect);
	}
	printf("menu item Up\n");
	for (int i = 0; i < 12; i++) {
		NowSelect = (NowSelect + (eMenu_Num - 1)) % eMenu_Num;
		printf("NowSelect=%d\n", NowSelect);
	}
	return 0;
}
enum”eMenu”での値の割り当てがeMenu_Game=0.eMenu_Config=1,eMenu_Num=2
となりメニュー数2個ですが、値の範囲としては0と1となります。
そのうえで上記プログラムを動かしてみるとわかりますが0~1の範囲に収まっているとおもいます。

返信

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