ページ 11

スコアが正常に表示されない

Posted: 2012年7月09日(月) 18:19
by yui
ボスを倒したらリザルト画面になり、スコア等を表示してその画面でメニュー処理を行わせるプログラムを作ったのですが、スコアが000000のままです。
メニュー処理を無くしてスコア表示だけの場合は正常に表示されます。
どうすればメニュー処理を行いつつスコアを正常に表示出来るでしょうか?
以下プログラム

コード:

void result(){
	int i,p;
	int score=ch.score;
	int hiscore=ch.hiscore;
	int point=ch.point;
	int total_score=score+point;

	int x;
	int y;
	int SelectNum = 0;

		
        while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
			
			if( Key[ KEY_INPUT_DOWN ] == 1 ){
				SelectNum = ( SelectNum + 1 ) % 3;
			}
			
			if( Key[ KEY_INPUT_UP ] == 1 ){
				SelectNum = ( SelectNum + 2 ) % 3;
			}
				
			switch ( SelectNum ){

				case 0:
					x=480;
					y=440;
					break;
				case 1:
					x=480;
					y=480;
					break;
				case 2:
					x=480;
					y=520;
					break;
			}
			
			if( Key[ KEY_INPUT_Z ] ==1 ){
				break;
		}
			DrawGraph( 0, 0, img_result[1], TRUE );
			DrawGraph( x, y, img_menu[2], TRUE );
			DrawGraph( 30, 50, img_result[2], TRUE );			

				for(i=0;i<6;i++){//スコア表示
					DrawRotaGraph(500-30*i,180,1.0f,0.0f,img_num[1][hiscore%10],TRUE);
					DrawRotaGraph(500-30*i,255,1.0f,0.0f,img_num[1][score%10],TRUE);
					DrawRotaGraph(500-30*i,390,1.0f,0.0f,img_num[1][total_score%10],TRUE);
					score/=10;
					hiscore/=10;
					total_score/=10;
				}
				for(p=0;p<4;p++){//ポイント表示
					DrawRotaGraph(500-30*p,315,1.0f,0.0f,img_num[1][point%10],TRUE);
					point/=10;
				}
		}
}

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 18:35
by nil
スコアに/=10をしているからではないですか?
あと、resultの中にループ処理を書き込むのは良くない設計だと思います。[追記:修正]

あと見た感じコメントの量が少ないですね。

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 19:06
by yui
whileの条件は後で見直したいと思います。
メニュー処理は以下を参考にして作りました。/10を消したら表示がおかしくなりました。
http://dixq.net/g/03_04.html

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 19:07
by box
yui さんが書きました: メニュー処理を無くしてスコア表示だけの場合は正常に表示されます。
これは、どういう風に確認されたのでしょうか。

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 19:23
by yui
13行目~41行目を消して確認しました。

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 20:22
by nil
やはり/=10ではないかと……
おそらくこれは1桁づつ画像を表示する処理を行うためのものでしょうが、
はじめにscoreはch.scoreをもらい、
1ループ目は正常に描画されるはずです。
しかし、2ループ目以降、scoreは前のフレームの1/1,000,000の値であるはずです。

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 20:38
by box
まあ、デバッガーか何かを使って、変数の値を確認してみる、というのが
まっとうな手でありましょう。
あと、本題とは全然関係ないですけど、
yui さんが書きました:

コード:

			switch ( SelectNum ){

				case 0:
					x=480;
					y=440;
					break;
				case 1:
					x=480;
					y=480;
					break;
				case 2:
					x=480;
					y=520;
					break;
			}
ここは、単に

コード:

            x = 480;    // 固定値
            y = 440 + 40 * SelectNum;
くらいでじゅうぶんかと。
わざわざswitch文を使う意味があまりないように見えました。
簡単に書けるところはなるべく簡単に書いた方が、
コードが見やすいし、
何をしているかが一目瞭然だし、
後で修正するのが簡単そうだと思います。

Re: スコアが正常に表示されない

Posted: 2012年7月09日(月) 20:45
by nil
更に手直しをするならば
result_updateとかresult_drawなんかに関数を分けて更新と描画を分離したほうが関数としての役割を意識しやすく、可読性も上がるかと思います

Re: スコアが正常に表示されない

Posted: 2012年7月10日(火) 06:37
by yui

コード:

    int score=ch.score;
    int hiscore=ch.hiscore;
    int point=ch.point;
    int total_score=score+point;
この部分をwhile内に入れましたら正常表示されました。
他細かい指摘等ありがとうございました。