私はシューティングゲームで避け切った時間を計測し、タイトル画面でランキングとして表示するプログラムを考えています。制作環境はwindows7、VisualStudioExpress2012、DXライブラリです。流れは、タイトル画面(ランキングが表示されている)→ゲーム開始(タイム計測)→被弾するとリザルト画面へ(タイムの表示、ランキング更新)→タイトル画面のような流れです。stimeとranking[10]はグローバル変数として宣言してあります。秒",i+1,ranking[i]);}ここでズラッと1位から10位までのタイムを縦に表示します。time)/1000;で時間を取得しています。ranking_sort(stime);}※ranking_sortはhttp://dixq.net/forum/viewtopic.php?f=3&t=14395のTatu様のプログラムを使用させて頂きました。実行すると最初のタイトル画面では1位~10位まで0.0秒と表示。ゲームで5.0秒のタイムを出したとしリザルト画面を経てタイトルに戻ります。すると1位~10位まで全て5.0秒というタイムになってしまいます。そこからまたタイムを更新し、5.5秒の記録を出したとすると、1位~10位まで全て5.5秒のタイムが表示されます。タイムを更新しなければ何も変化なしです。理想とする実行結果はタイムが長い順(降順)に1位から順番に表示していく、一つずつランキングの更新をしていく事です。10位のタイムよりタイムが長ければ10位にタイムを代入。そこからバブルソートで順位を降順にソートする方法も考え組んでみました。temp;}}}}バブルソートのプログラムは書籍から参照このように書きましたが10位のタイムだけが更新され、1位~9位が0.0秒、10位が5.0秒という結果になってしまいます。そこからタイムを更新すると1位~9位が0.0秒、10位が5.5秒といった結果です。ポインタやアドレスを扱うのでしょうか・・・。一通り見てみましたが配列(ranking[])に対してポインタを使う方法は探せませんでした。このプログラムで実行がうまくいかないのか、どうすればランキングの実装ができるのか、ご教授下さい。5年前Tatuさんのコードで間違いないと思いますが。以下のように組んだけど、ちゃんと出てますね。Expressならデバッグでブレークポイントをはり、変数の内容を調べることができるはずです。ranking_sort関数の終わりにブレークしてみて、rankingの内容を表示してみてください。そこで問題がなければ、ほかの処理で何か上書きしているのです。オフトピックインデントはそろえましょう。10位のタイムよりタイムが長ければ10位にタイムを代入。そこからバブルソートで順位を降順にソートする方法も考え組んでみました。temp;}}}}バブルソートのプログラムは書籍から参照このように書きましたが10位のタイムだけが更新され、1位~9位が0.0秒、10位が5.0秒という結果になってしまいます。そこからタイムを更新すると1位~9位が0.0秒、10位が5.5秒といった結果です。このプログラムだと、降順ではなく昇順にソートされると思います。ranking_sort(stime);}※ranking_sortはhttp://dixq.net/forum/viewtopic.php?f=3&t=14395のTatu様のプログラムを使用させて頂きました。5年前へにっくすさんみけCATさん回答ありがとうございます。思いますが、result()をリザルト画面で毎フレーム呼び出している、なんてことは無いですよね?まさかでした。毎フレームと一度だけの処理を区別するのは難しいです・・・。//リザルト画面を表示(タイムなど)}前まではresultscreen()の中にresult()を入れていました。そこで、タイトル画面(ランキングが表示されている)→ゲーム開始(タイム計測)→被弾するとランキングの更新→リザルト画面へ(タイムの表示)→タイトル画面のようにすると正しい実行結果が得られました。無事、解決できました。っくすさんみけCATさんありがとうございました。//リザルト画面を表示(タイムなど)}caseの後にbreak;がないので、意図しない流れになっている可能性があります。seansが10のとき、20、30、40も実行しちゃいますよ。5年前すいません、書き方が悪かったみたいです。switch文の中は今回の論点である部分だけを抜粋し、他は省略していました。仰る通り、各caseの末にはbreakが入っています。すいません、書き方が悪かったみたいです。switch文の中は今回の論点である部分だけを抜粋し、他は省略していました。仰る通り、各caseの末にはbreakが入っています。