ゲームのエラー処理

アバター
Ketty
記事: 103
登録日時: 11年前

ゲームのエラー処理

投稿記事 by Ketty » 10年前

エラー処理・・・
というかエラー時の身構えたるものについて。

例えば、
int GHandle = LoadGraph( "ほにゃらら.png" ) ;
とかするとして、

GHandleの値。
果たして、しかるべき値になってるのかどうかは、実行してみるまで分からないわけです。

何が起こるか分からないのがパソコン。

きっと、そのあと、DrawGraph( GHandle, ・・・・) ; とかいうことを、当然のごとくするわけですが・・・。

GHandleに-1が入ってたらどうすんの・・・。
GHandleが不正だったら困るんです、ボク。
という場合の話です。

ゲーム作るにあたって、分からないことだらけなので、
エラーを検知しまくるように実装してるんです。
ヘンなことなったらとりあえず、ログファイルに書き出します。
ヘンなオジサンがヘンなことしようとしたら、すぐに通報できるというわけです。

なんというクラスの、なんというメソッドで、何にしくじったのか・・・。
そのときのパラメーターはこれこれで(ファイル名とかフラグとか全部)・・・。
どのシーンで、どのマップで、どの座標で、進もうとした方角はどちらで・・・。
レベルとかステータスはどんな感じで・・・。
ゲームのビルドバージョンは何番で・・・。
ゲーム起動時の設定はこれこれで・・・。
実行環境の解像度はいくらで、DirectXのバージョンはこれこれで、使用メモリはいくらで、CPU使用率はいくらで・・・。

とりあえずDXライブラリに対しては、ええ感じにラッパーLibを作りました。
これを、ヘンなオジサン発見機能つきDXライブラリと呼んでいます。

ところで、
みんな、こんなことしてるんでしょうか・・・。こまかいログを仕込むためにアレコレと努力を・・・。
ものっそい手間なんですが・・・。
ゲームって、そういうもんなんでしょうか。
仕事でもここまでやらないです・・・(やる必要が無いような、のんびりまったりアプリ開発しかしたことないので。)

なんかええ感じの技法があるんではないかと、疑い始めましたよ。
おみゃーバカだなー、みんなこうやってるんだよ(笑)・・・みたいな、あるある。

謎は深まります。旅を続けます((( -_-)

アバター
せんちゃ
記事: 50
登録日時: 14年前

Re: ゲームのエラー処理

投稿記事 by せんちゃ » 10年前

ロード失敗時はログだけ残してゲームはそのまま進行、もしくは失敗の段階でassertで止めるかのどっちかの方法をいつもとっています。
DXライブラリの場合はLoadGraphに失敗してもハンドル番号が失敗値になるだけですし、不正なハンドル番号ならそもそも
描画関数も解放関数も呼んだところで何も行われない
という実装にライブラリ側がしてくれてないとそもそもハンドルの意味がないような気がするのです。

アバター
Ketty
記事: 103
登録日時: 11年前

Re: ゲームのエラー処理

投稿記事 by Ketty » 10年前

>せんちゃさん
どうも(^^)
そうですね。DXライブラリは不正ハンドルを描画関数に渡してもスルーしてくれますよね。便利。
ロード失敗時はログだけ残してゲームはそのまま進行、もしくは失敗の段階でassertで止めるかのどっちかの方法をいつもとっています。
いまのところ私もそのようにしておりますが、
そのまま進行させる or 止める、の判断にいつも悩みます。

ISLe
記事: 2650
登録日時: 14年前

Re: ゲームのエラー処理

投稿記事 by ISLe » 10年前

わたしは自ら止めるようなコードはいっさい書かないです。
プレイしてて気付かないようなバグは仕様になることも多々ありますし。

仕事だと、デバッグ部隊の皆さんは止まるプログラムではデバッグをしてくれません。
プログラムが想定外に停止するとデバッグ作業が打ち切りになるので、はげしくスケジュールに影響します。
なので何が何でも止まらないことがとても重要です。

個人的にはバグの状況報告だけで問題箇所をほとんど特定できるのでデバッグ用のコードを仕込むことはめったにありません。

アバター
lbfuvab
記事: 72
登録日時: 14年前

Re: ゲームのエラー処理

投稿記事 by lbfuvab » 10年前

公開するプログラムならエラー処理とか仕込みますが、自分用のならほとんどしませんね。
精々、fopenとかmallocの戻り値がNULLでないかくらいですね

アバター
Ketty
記事: 103
登録日時: 11年前

Re: ゲームのエラー処理

投稿記事 by Ketty » 10年前

>ISLeさん
お世話になっております(^^)
プレイしてて気付かないようなバグは仕様になることも多々ありますし。
なるほど。プレイ自体に影響しないものは仕様にしてしまえることがあるのですね。
その線引きは参考になりますね。さっそく真似させてもらいます。
仕事だと、デバッグ部隊の皆さんは止まるプログラムではデバッグをしてくれません。
プログラムが想定外に停止するとデバッグ作業が打ち切りになるので、はげしくスケジュールに影響します。
ということは、やっぱりプロの方はちゃんとデバッグシナリオを作って、試験されるわけですね。
ゲームって、想定されるケースがほぼ無制限にあると思うのですが、どうやってシナリオ作るんだろう・・・。

>lbfuvabさん
どうも(^^)
公開するプログラムならエラー処理とか仕込みますが、自分用のならほとんどしませんね。
そうですよねー。私も自分用のならしないっす。