タイトルについて

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

タイトルについて

#1

投稿記事 by サンタクロース » 15年前

龍神録さんの「ゲームプログラミングの館」を参考に作ってみました。
しかし下に押しても選択している段が一瞬下に行くだけですぐまた上に戻ってきてしまいます
タイトル0は一番初めで、タイトル1以降は未実装です。
今どの段をセレクトしているかはi(0<=i<=7)の値を加減して決めているつもりです。

#include "GV.h"

void title0(){//一番初めのやつ
    int i=0,select_count=0;
  
       DrawGraph(0,0,img_title_back[0],TRUE);//タイトルの背景
            
      DrawGraph(140,100,img_title[0],TRUE);//START
            DrawGraph(140,120,img_title[2],TRUE);//EXTRA
            DrawGraph(140,140,img_title[4],TRUE);//PRACTICE
            DrawGraph(140,160,img_title[6],TRUE);//REPLAY
            DrawGraph(140,180,img_title[8],TRUE);//RESULT    
            DrawGraph(140,200,img_title[10],TRUE);//RESULT
            DrawGraph(140,220,img_title[12],TRUE);//OPTION
            DrawGraph(140,240,img_title[14],TRUE);//QUIT


      if(CheckStatePad(configpad.down)==1){//下に移動
             i+=1; 
            if(i==8)
            i-=8;
            se_flag[11]=1;
                
            }


        if(CheckStatePad(configpad.up)==1){//上に移動
               i-=1;
               if(i==-1) 
               i+=8;
               se_flag[11]=1;
              
          }
    
  switch(i){
      case 0: 
          DrawGraph(140,100,img_title[1],TRUE);
          if(CheckStatePad(configpad.shot)==1)
          game_start.flag=1;
          break;
      case 1:
          DrawGraph(140,120,img_title[3],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title1();
          break; 
     
      case 2:
          DrawGraph(140,140,img_title[5],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title2();
          break; 

      case 3:
          DrawGraph(140,160,img_title[7],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title3();
          break; 

      case 4:
          DrawGraph(140,180,img_title[9],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title4();
          break; 

      case 5:
          DrawGraph(140,200,img_title[11],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title5();
          break; 
      
      case 6:
          DrawGraph(140,220,img_title[13],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title6();
          break; 

      case 7:
          DrawGraph(140,240,img_title[15],TRUE);
          if(CheckStatePad(configpad.shot)==1)
              title7();
          break; 
      
  }

}




void title1(){}//EXTRA
void title2(){}//PRACTICE
void title3(){}//REPLAY
void title4(){}//RESURT
void title5(){}//MUSIC
void title6(){}//OPTION
void title7(){}//QUIT

 
void title_main(){
    title0();
    title1();
    title2();
    title3();
    title4();
    title5();
    title6();
    title7();
}
<pre/>

   画像

softya

Re:タイトルについて

#2

投稿記事 by softya » 15年前

これは変数のスコープの問題ですね。
int i=0
と宣言されているローカル変数iは、title0()関数に入ると0に毎回初期化されますので、必ず0から始まります。
更にtitle0()関数を抜けるときに消滅してしまします。
この関数がメインループから呼び出されるなら、毎回消えないようにグローバル変数で保持する必要があります。

それと関数の関係で気になることが、
title_main()と各 title0()、title1()、title2()の関数たちとの関係は?
今のままだとtitle_main()→ title0()→title1()で、一旦title_main()に戻ってまたtitle1()が呼び出されますが?
このままだと異常な動作をする可能性が高いですよ。

サンタクロース

Re:タイトルについて

#3

投稿記事 by サンタクロース » 15年前

遅くなってしまってすみませんでした。
int iをtitle0()の外に出すことで解決することができました。
ありがとうございました

閉鎖

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