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

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

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

#1

投稿記事 by yui » 12年前

ボスを倒したらリザルト画面になり、スコア等を表示してその画面でメニュー処理を行わせるプログラムを作ったのですが、スコアが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;
				}
		}
}

nil
記事: 428
登録日時: 12年前

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

#2

投稿記事 by nil » 12年前

スコアに/=10をしているからではないですか?
あと、resultの中にループ処理を書き込むのは良くない設計だと思います。[追記:修正]

あと見た感じコメントの量が少ないですね。
最後に編集したユーザー nil on 2012年7月09日(月) 20:17 [ 編集 1 回目 ]

yui

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

#3

投稿記事 by yui » 12年前

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

box
記事: 2002
登録日時: 13年前

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

#4

投稿記事 by box » 12年前

yui さんが書きました: メニュー処理を無くしてスコア表示だけの場合は正常に表示されます。
これは、どういう風に確認されたのでしょうか。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

yui

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

#5

投稿記事 by yui » 12年前

13行目~41行目を消して確認しました。

nil
記事: 428
登録日時: 12年前

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

#6

投稿記事 by nil » 12年前

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

box
記事: 2002
登録日時: 13年前

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

#7

投稿記事 by box » 12年前

まあ、デバッガーか何かを使って、変数の値を確認してみる、というのが
まっとうな手でありましょう。
あと、本題とは全然関係ないですけど、
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文を使う意味があまりないように見えました。
簡単に書けるところはなるべく簡単に書いた方が、
コードが見やすいし、
何をしているかが一目瞭然だし、
後で修正するのが簡単そうだと思います。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

nil
記事: 428
登録日時: 12年前

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

#8

投稿記事 by nil » 12年前

更に手直しをするならば
result_updateとかresult_drawなんかに関数を分けて更新と描画を分離したほうが関数としての役割を意識しやすく、可読性も上がるかと思います

yui

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

#9

投稿記事 by yui » 12年前

コード:

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

閉鎖

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