『アクションゲーム アルゴリズム マニアックス』 Q&A

[an error occurred while processing this directive] 以下の回答で問題が解決しなかった場合には、 こちらから ご連絡ください。

プログラミングに関する質問

2009/12/01
Q.
本書の想定している使い方やお勧めの使い方は。
A.
 まず、本書のサンプルに触れてみるのはよい使い方の一つです。言語やライブラリについてあまり知らなくても、本書の解説をもとにパラメータを変更したり、動かして遊んだりしていくうちに、楽しみながらゲームの仕組みを学ぶことができるでしょう。

 そのほかにも以下のような使い方があります。

 なお、ゲームの枠組み作りに関しては、書籍『シューティングゲーム プログラミング』で詳しく解説しています。この枠組みはシューティングゲームに限らず、アクションゲームやパズルゲームにも流用できます。実際に以下の各書籍では、同じ枠組みを使用しています。  ご興味をお持ちの方は、ぜひご利用頂けましたら幸いです。

2009/12/01
Q.
キャラクターの速度を座標に反映するコードはどこか。
A.
 速度を座標に反映する方法は、サンプルによって異なります。

 例えばP.19のCLeverDashManクラスの場合には、キャラクターの速度(VX)を変更するだけで、キャラクターの座標(X)には反映しません。実は、このサンプルではキャラクターの座標は変更せずに、速度に応じてステージをスクロールさせています。詳細はCLeverDashStageクラスのMove関数をご覧ください。

 一方、例えばP.126のCRopeManクラスの場合には、同クラスのMove関数で速度(VX, VY)を座標(X, Y)に反映させています。

2009/12/01
Q.
キャラクターの座標は中心と左上端のどちらを表すのか。
A.
 本書の解説では、座標(X, Y)はキャラクターの中心を表すことにしています。座標を左上端で表す場合には、当たり判定などの式が少し変わりますが、考え方は同じです。

 キャラクターを描画する際には、座標(0, 0)のときにキャラクターが画面の左上隅に、座標(15, 12)のときに画面の右下隅に合うように、座標の変換を行います。これはMoverクラスのDraw関数で行います(Mover.cpp)。

2009/12/01
Q.
アルゴリズムに対するソースコードを思いつくためには、プログラミング言語の知識が必要か。
A.
 アルゴリズムに対するソースコードを記述するには、プログラミング言語の知識が必要です。ただ、本当に難しいのはアルゴリズムを作るところまでで、プログラミング言語の知識を使ってソースコードを書くところは、それほど難しくはありません。

2009/12/01
Q.
ソースコードを書く前にフローチャートを書いた方がよいか。
A.
 手順が複雑な処理では、フローチャートを書いた方がよいこともあります。しかし、必ずしもフローチャートを書かなければならないということはありません。

 アルゴリズムを考えたりソースコードを書いたりする際には、フローチャート以外にも助けとなる道具が色々とあります。処理の内容によっては、フローチャートを書くよりも数式を書いたり、メモを書いたり、イメージを書いたり、あるいは荒削りのソースコードを書いたりする方が有効かもしれません。

 例えば3Dグラフィックスの座標計算などは、フローチャートを書くよりも、物体や座標の関係をスケッチした方が役立ちそうです。また、詳細なフローチャートを書くよりも、直接ソースコードを書いてしまった方が効率的な場合もあります。状況によって、道具を使い分けることがお勧めです。

2009/12/01
Q.
アルゴリズムとは何か。
A.
 アルゴリズムとは「計算の過程を明確な手順にしたもの」です。最大公約数を求める手順や、数列をソートする手順などは、よく知られたアルゴリズムです。

 広い意味ではゲームにおけるキャラクターの動きなどを指して「アルゴリズム」という言葉を使うことがよくあります。本書でもこの意味でアルゴリズムという題名を付けています。

2009/12/01
Q.
プログラミングはどのような手順で行うとよいか。
A.
 色々な方法がありますが、例えば次のような手順で行います。

2009/12/01
Q.
floatが使えないライブラリに本書の内容を応用するには。
A.
 本書では座標や速度にfloat(浮動小数点数型)を使っています。これは画面の解像度に依存しない、論理的な座標です。このような座標を採用すると、画面の解像度が変更しやすいという利点があります。また、座標や速度が1や-0.5といった簡潔な値になることも利点です。

 ライブラリによっては、座標をfloatではなくintで指定することがあります。多くの場合、これは画面上のピクセル単位の座標を表しています。

 本書の内容をこのようなライブラリで活用するには、キャラクターなどを描画する際に、座標をfloatからintに変換すればよいでしょう。本書のサンプルでも、MoverクラスのDraw関数(Mover.cpp)において、floatからintへの変換を行っています。


最終更新 Thursday, 26-Mar-2015 00:00:00 JST [an error occurred while processing this directive]