スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

不具合は100%出る

現在、 必死に自作ゲームを制作しているわけですが、
どうあがいても不具合は出ます。 100%出ます。

画面に"Hello World"と表示してみよう!
みたいな、余程簡単なものじゃない限りノーミスで完成は有り得ないです。

【失敗例】
敵を動かす処理でのこと。
自分は敵を、左端から右端まで移動、次は右端から左端まで移動させようと思いました。
【壁】 ----------→ 【壁】
【壁】 ←---------- 【壁】
 ※これを繰り返す

----<プログラム>-------------------------
if(右に障害物が無ければ)
  右へ移動
else if(左に障害物が無ければ)
  左へ移動

-----------------------------------------
初めはこんな感じにしてました。
すると 初めは、右側へちゃんと動いてくれる のですが、
右端に着き、左へ折り返そうとしたときに 敵がブルブル震え始めます。
まる
何故こうなったかというと、
壁に当たり、左へ1歩移動した場合、右への移動が可能になるので
また右へ移動してしまった のです。

他にも、 x < FIELD_WIDTH - 1 という条件文を忘れて、
敵が二次元配列の範囲外へ消えて行くという様な事が起こったりしました。
(マップは16×16の二次元配列で実装)



で、自分のバグとり方法。
世の中にはデバッグ支援ツールなどもあるようですが、
なんだか良く分からないので、個人的な方法を取ってます。

まずコンソールアプリケーションで用いるprintf文などは使えません。
(表示されない)
windowsAPIにはDrawText関数のように文字列を表示させる関数がありますが、
個人的に、コレは面倒くさいです。

最終的に行き着いたのが、 全てのflagなどを書いた画像を用意する事。
文字列を表示するのではなく、文字列を書いた画像を表示させるのです。
フラグ一式
あとは、下記のような関数を作れば完了です。
画像の表示はBitBlt関数を使います。
void PaintFlag(void)

 switch(chara.flag){
   case MOVE_RIGHT:BitBlt(//省略);break;
   case MOVE_LEFT:BitBlt(//省略);break;
   case MOVE_UP:BitBlt(//省略);break;
   case MOVE_DOWN:BitBlt(//省略);break;
   default:BitBlt(//省略);break;
 }


そして、この関数をゲームループに入れてやれば
リアルタイムでフラグの変化が分かります。
これ最高です。

完成がいつになるかは分かりませんが、4月中に終わらせたいです。
というより、 作品提出必須の選考会が5月にあります。
(なんとしても完成させなければならない・・・!(`・ω・´;))
スポンサーサイト

テーマ : ゲーム製作 関連 - ジャンル : ゲーム

コメント
コメントの投稿
管理者にだけ表示を許可する



上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。