Profile
HN:gp-hss
職業:高校生
趣味:3DCG
言語:C全般
環境:VC++ 2008 EE
3DCG:Softimage Mod Tool
自己紹介:
ゲームプログラマー目指して勉強している者です。
現在 C++ 修得にむけて頑張っています。
Began study since 2009/8/21
ゲームプログラマー目指して勉強している者です。
現在 C++ 修得にむけて頑張っています。
Began study since 2009/8/21
Entry
(07/31)
(06/13)
(02/22)
(02/21)
(02/20)
Latest TB
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
battle_seam_test(.cpp)
battle_seam_test(.exe)
ポケモンとかでもありますが、戦闘直前の継ぎ目の部分をプログラミングして再現してみました。
現在、RPG(ダンジョンゲームみたいな)のようなゲームを作ろうかなぁ~と考えており、そこでテストプログラムとして戦闘に行く前の継ぎ目の部分を作ってみました。
最初のアニメーション部分の描画方法は、まず真ん中に ■ を出力したあと、 ↓ ← ↑ → の順に ■ を出力させています。
どの方向に ■ を出力させるかの判定方法として switch 文を利用しています。
ちなみに、整数を 4 で割った余りは 0 , 1 , 2 , 3 のうちのどれかですよね。
ちょうど方向の数(下、左、上、右、計 4 つ)と同じ数の値が生成できます。
ここでは順番に 0 = ↓ , 1 = ← , 2 = ↑ , 3 = → というふうにしています。
列挙体を使って数値に名前をつければよりわかりやすくなります。
次に考えなければいけないのが、その方向にいくつの ■ を出力させるかということです。
この問題は頭だけで考えると解決するのに時間がかかってしまいそうです。
ですので、いらない紙と何か書くものを用意して情報を書き留めることで問題の解決を迅速にします。
□ □ □ □ □
□ □ □ □ □
□ □ ■ □ □
□ □ □ □ □
□ □ □ □ □
まず上記のような図を描きます。
では情報を書き留めていきましょう。
1 回目は下に ■ を 1 つ出力させます。
2 回目は左に 1 つ
3 回目は上に 2 つ
4 回目は・・・・・・・・・
といった情報を簡単に下記のように書きましょう。
1 : ↓ = 1
2 : ← = 1
3 : ↑ = 2
4 : → = 2
5 : ↓ = 3
6 : ← = 3
何か気づきませんか?
というよりもはや自明ですよね。
そうです、 n 回目にある方向に出力した後、 n が偶数なら次から出力する ■ の個数が一つ増えるのです。
もしくは、 n 回目にある方向に出力する前、 n が奇数なら前回出力した ■ の個数 +1 の数の ■ を今回から出力する。
ということになります。
この法則を利用してある方向に出力する ■ の数を求めています。
今回のプログラムでは前者の性質を利用していますので、 偶数 回目に ■ を出力したあと次回から出力する ■ の数を 1 つ増やしています。
ちなみに、 偶数 回目のときは ← もしくは → です。
これもプログラムをつくる上では無駄な処理をさせないためにも重要なことです。
アニメーション描画を終えたらまず画面のすべての ■ を消します。
そしてまた描画します。そしてまた消します。
これを繰り返すことで点滅させています。
ここで重要なのが、点滅描画に移ると ■ の描画方法が変わっているということです。
アニメーション描画の方法だと無駄に処理が多く、点滅描画がうまくいきません(変な点滅になる)。
そこでシンプルな描画方法に変えて全く同じように ■ を描画しています。
((SIZE_VAL - 1) / 2) + 1 の意味は自分で考えてみてください。
描画プログラム中、よく Sleep() という関数がでてきますが、これは第一引数にミリ秒単位の整数値を与えることでその時間文処理をストップさせることができます。
描画処理をこのようにちまちまストップさせないと、あまりに描画が早すぎてアニメーションにはとても見えないのです。
点滅描画においても同様です。
そういえば今回は C++ を使っているので多少 C 言語とは違いますが、ほとんど同じですね。
C++ では、 for 文などの条件部ところで変数を宣言することができます。
今回はそれだけしか C との違いはありません。
ちなみに条件部で宣言された変数はその条件部を持った文の処理が終わったときに一緒に削除されます。
これから勉強のためちまちま C++ も入れていきますので、 C との相違点などは各自ご自分で調べてください。
ではまた今度。
PR