エラー処理・・・
というかエラー時の身構えたるものについて。
例えば、
int GHandle = LoadGraph( "ほにゃらら.png" ) ;
とかするとして、
GHandleの値。
果たして、しかるべき値になってるのかどうかは、実行してみるまで分からないわけです。
何が起こるか分からないのがパソコン。
きっと、そのあと、DrawGraph( GHandle, ・・・・) ; とかいうことを、当然のごとくするわけですが・・・。
GHandleに-1が入ってたらどうすんの・・・。
GHandleが不正だったら困るんです、ボク。
という場合の話です。
ゲーム作るにあたって、分からないことだらけなので、
エラーを検知しまくるように実装してるんです。
ヘンなことなったらとりあえず、ログファイルに書き出します。
ヘンなオジサンがヘンなことしようとしたら、すぐに通報できるというわけです。
なんというクラスの、なんというメソッドで、何にしくじったのか・・・。
そのときのパラメーターはこれこれで(ファイル名とかフラグとか全部)・・・。
どのシーンで、どのマップで、どの座標で、進もうとした方角はどちらで・・・。
レベルとかステータスはどんな感じで・・・。
ゲームのビルドバージョンは何番で・・・。
ゲーム起動時の設定はこれこれで・・・。
実行環境の解像度はいくらで、DirectXのバージョンはこれこれで、使用メモリはいくらで、CPU使用率はいくらで・・・。
とりあえずDXライブラリに対しては、ええ感じにラッパーLibを作りました。
これを、ヘンなオジサン発見機能つきDXライブラリと呼んでいます。
ところで、
みんな、こんなことしてるんでしょうか・・・。こまかいログを仕込むためにアレコレと努力を・・・。
ものっそい手間なんですが・・・。
ゲームって、そういうもんなんでしょうか。
仕事でもここまでやらないです・・・(やる必要が無いような、のんびりまったりアプリ開発しかしたことないので。)
なんかええ感じの技法があるんではないかと、疑い始めましたよ。
おみゃーバカだなー、みんなこうやってるんだよ(笑)・・・みたいな、あるある。
謎は深まります。旅を続けます((( -_-)
ゲームのエラー処理
Re: ゲームのエラー処理
ロード失敗時はログだけ残してゲームはそのまま進行、もしくは失敗の段階でassertで止めるかのどっちかの方法をいつもとっています。
DXライブラリの場合はLoadGraphに失敗してもハンドル番号が失敗値になるだけですし、不正なハンドル番号ならそもそも
描画関数も解放関数も呼んだところで何も行われない
という実装にライブラリ側がしてくれてないとそもそもハンドルの意味がないような気がするのです。
DXライブラリの場合はLoadGraphに失敗してもハンドル番号が失敗値になるだけですし、不正なハンドル番号ならそもそも
描画関数も解放関数も呼んだところで何も行われない
という実装にライブラリ側がしてくれてないとそもそもハンドルの意味がないような気がするのです。
Re: ゲームのエラー処理
>せんちゃさん
どうも(^^)
そうですね。DXライブラリは不正ハンドルを描画関数に渡してもスルーしてくれますよね。便利。
そのまま進行させる or 止める、の判断にいつも悩みます。
どうも(^^)
そうですね。DXライブラリは不正ハンドルを描画関数に渡してもスルーしてくれますよね。便利。
いまのところ私もそのようにしておりますが、ロード失敗時はログだけ残してゲームはそのまま進行、もしくは失敗の段階でassertで止めるかのどっちかの方法をいつもとっています。
そのまま進行させる or 止める、の判断にいつも悩みます。
Re: ゲームのエラー処理
わたしは自ら止めるようなコードはいっさい書かないです。
プレイしてて気付かないようなバグは仕様になることも多々ありますし。
仕事だと、デバッグ部隊の皆さんは止まるプログラムではデバッグをしてくれません。
プログラムが想定外に停止するとデバッグ作業が打ち切りになるので、はげしくスケジュールに影響します。
なので何が何でも止まらないことがとても重要です。
個人的にはバグの状況報告だけで問題箇所をほとんど特定できるのでデバッグ用のコードを仕込むことはめったにありません。
プレイしてて気付かないようなバグは仕様になることも多々ありますし。
仕事だと、デバッグ部隊の皆さんは止まるプログラムではデバッグをしてくれません。
プログラムが想定外に停止するとデバッグ作業が打ち切りになるので、はげしくスケジュールに影響します。
なので何が何でも止まらないことがとても重要です。
個人的にはバグの状況報告だけで問題箇所をほとんど特定できるのでデバッグ用のコードを仕込むことはめったにありません。
Re: ゲームのエラー処理
公開するプログラムならエラー処理とか仕込みますが、自分用のならほとんどしませんね。
精々、fopenとかmallocの戻り値がNULLでないかくらいですね
精々、fopenとかmallocの戻り値がNULLでないかくらいですね
Re: ゲームのエラー処理
>ISLeさん
お世話になっております(^^)
その線引きは参考になりますね。さっそく真似させてもらいます。
ゲームって、想定されるケースがほぼ無制限にあると思うのですが、どうやってシナリオ作るんだろう・・・。
>lbfuvabさん
どうも(^^)
お世話になっております(^^)
なるほど。プレイ自体に影響しないものは仕様にしてしまえることがあるのですね。プレイしてて気付かないようなバグは仕様になることも多々ありますし。
その線引きは参考になりますね。さっそく真似させてもらいます。
ということは、やっぱりプロの方はちゃんとデバッグシナリオを作って、試験されるわけですね。仕事だと、デバッグ部隊の皆さんは止まるプログラムではデバッグをしてくれません。
プログラムが想定外に停止するとデバッグ作業が打ち切りになるので、はげしくスケジュールに影響します。
ゲームって、想定されるケースがほぼ無制限にあると思うのですが、どうやってシナリオ作るんだろう・・・。
>lbfuvabさん
どうも(^^)
そうですよねー。私も自分用のならしないっす。公開するプログラムならエラー処理とか仕込みますが、自分用のならほとんどしませんね。