素人プログラマーの日常

効率の良いコード、美しいコードなんて書けません。

早速バグ修正

はい・・・。
昨日「変更しません」なんて書いておきながら、exit()の部分を削除しました。何気にプレイしていて、バグを発見したので修正がてらですが。

バグはプレイ上問題があるだけで、致命的なものではありません。

・最高レベルを更新しても反映されない

これだけのことです。とはいえ、きちんとセーブされないとプレイする気もなくなります。

【修正箇所】

if( ( score > 0)||( level > highscore[5] ) )Save();
if( level > highscore[5] ) highscore[5] = level;

この2行を入れ替えました。

う~ん、初歩的なミスですね。セーブした後に代入しています。連続して次のプレイが終了すれば、また同じ処理をするのでセーブされますが、その前にゲームを中断してしまうと、記録が残りません。なんてこったい。



ついでに exit()がらみの追加部分を削除・修正しました。昨日の記事で、

if( GetWindowUserCloseFlag( TRUE ) ) exit( 0 );

↑この行を↓こうすればいいだけwww

if( GetWindowUserCloseFlag( TRUE ) ) DxLib_End();

と書きましたが、これだとウインドウが消えても処理が残ってしまいます。ちなみに exit()のほうでも同様でした。つまり exit()を使っても問題は解決していなかったんです。それで何が原因だろう?と考えたのですが、WinMain()を正しく終了させることで解決しました。そのためにフラグを立てて、自然に終了するように修正しました。

if( GetWindowUserCloseFlag( TRUE ) ){
    gameF = 1;        //フラグを1にすることでメインループから抜ける
    break;
}

この問題はみなさんどうやって解決しているのでしょうか?気になります。プログラムが膨大になるほど、その処理ごとにフラグを立てる判定をするのは非効率な気がします。WinMain()を終了させずに正常に処理が終了出来る方法があるのでしょうか?画像やサウンドのメモリを全部初期化すれば良いのかな?なんて考えますがどうでしょう?



ま、これでひとまず、問題は全部片付きました。もうこれ以上の変更はしません。と言いつつ、明日には変更してたりして…。もし「ここ変じゃない?」とか気付いた点があれば、コメントいただけると嬉しいです。高度に技術的なことは理解出来ないかもしれませんが、参考にさせていただきます。



修正版をアップロードしました。
http://tenkomorituuhan2.com/products/shootdown/top.html