忍者ブログ
Profile
HN:gp-hss

職業:高校生

趣味:3DCG

言語:C全般

環境:VC++ 2008 EE

3DCG:Softimage Mod Tool

自己紹介:
ゲームプログラマー目指して勉強している者です。
現在 C++ 修得にむけて頑張っています。

Began study since 2009/8/21

Latest CM
[06/28 soulmorning]
Latest TB
(02/25)
44  43  42  41  40  39  38  37  36  35  34 
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

author : gp-hss ×

RPG_MAP(.zip)

とりあえず大元のマッププログラムは完成しました。
あとはこれに敵を配置していったり、新たな階を増やしていったり、ミニマップを作ったりするだけですね。
ちなみにキングの部屋への扉は閉ざされているのですが、クイーンのいる部屋にいくことで開かれます。
あと障害物がやけにないですが、これはまだマップの外形だけしかつくっていませんのでご勘弁。

クイーンの部屋はパッと見シンメトリーなんですが、どうしてもキングの部屋はシンメトリーにできませんでした。
ちょっとキングを表す文字が 2 バイト文字なんでバランスがどうしてもね・・・。
あと、キングの部屋はものすごくハデにしてあります。
完成版ではクイーンを倒すことでキングの部屋にいけるようになり、キングを倒すことで新たな階にいけるようにしたいと思っています。
ちなみに階段の現れる場所はランダムに変化させようと目論んでいます。
キングを倒しても次は階段を探さなければいけないちょっとめんどくさいゲームとなっております。
まぁでも 3 × 3 のブロックしかない、ものすごくダンジョンゲーとしてはマップの小さいものとなっておりますのですぐ見つかるはずです。
( 3 × 3 のブロックとは図にするとこんな感じ ↓
 □ □ □
 □ □ □
 □ □ □
このブロック内に表示されるマップを書いていくわけですね。
あくまでイメージではですけど。)

最近なかなか更新が遅れがちですね~。困ったもんだ。
簡単に何かわかりにくい関数だとかの説明でもしておきますかな。

ちなみに関数形式マクロはしっていますよね。
あれは一見関数そのものなんで値渡ししてるように見えますがそうではないですよ。
あれは渡されたものをそのまんま指定されたとおり置き換えるだけです。
詳しくはお手持ちの参考書かご自分でお調べしてください。

特に MoveMap は関数で実現すべきかなと思ったんですが、マクロの方が本当にちょっとだけですけど楽だったんでそのままマクロで実現しました。
もし関数で実現するのなら引数として関数へのポインタを渡さなければいけないことはわかりますよね。
( void (*p_func)()    これで何も返さない関数へのポインタ p_func を宣言したことになります。
ちなみに変数の宣言の仕方・解読に関して詳しくは「C言語 ポインタ完全制覇」をオススメします。
また、普通にインターネットでも調べることができますが、「こう宣言すれば~を宣言したことになる」なんていう浅い理解ではなく、「なぜそれを宣言したことになるのか」までちゃんと理解することをオススメします。
この点において上記の書籍は最良だと思います。)
ちなみにプログラム中 fanc などとなっていますがもちろん func です。
間違っていました。すいません。


マップを描画するところでは行単位で文字列に変換してから文字列として出力しています。
このほうが描画速度は1文字ずつ表示するよりも圧倒的に早くなります。
マップのブロック単位での移動のところについても同様の処理させています。

マップの取得では文字として1文字ずつ取り込んでいますが、改行文字と EOF に関しては空白に変換してます。
でないと 1 バイト分塗りつぶされた感じのが表示されてしまいます。
また、マップの取得に関してはマップの形しか取得していません。
つまり敵の配置などは後から別に行う必要があるため、敵の座標位置に関する情報などはまた別のファイル( map_info\map?.txt )に保存しておく必要があります。
ちなみに、マップの取得はブロック単位で取り込んでいますが、最終てきには1つにまとめています。
これがこの階の全体マップとなるわけです。

プレイヤーの移動制御では四方に障害物がある場合(四方が空白で無い場合)は動けないことを表す 0 を返し、1 バイト分動けるのであれば 2 を返し、マップの端にいるのであれば 3 を返し、何も引っかからなければ 1 を返します。

プレイヤーの移動処理では、まず始めに動けるかどうか判断する関数を呼び出し、結果を変数に記憶させておきます。
ここを通過すれば少なくともプレイヤーが動くことになるので、まずプレイヤーの表示を視覚的に消します。
ここで動く方向に応じた処理があるのですが、ここで使われているのが先ほどちらっとでてきた MoveMap マクロです。
こいつは、(引数といっていいかどうかわからないけど)第1引数と第2引数が等しければ第3引数で指定された関数を実行し、そのまま return します。
まさにこの関数用につくられたマクロです。
例えば、マップの上端にいてさらに上へいこうとしたらマップを上に移動させる関数を呼び出します。
プレイヤーの表示はそれらの関数が受け持っているのでそのまま return します。
敵の動きに関しては過去の記事を参照してください。

ちなみに、今回のプログラムでは継ぎ目アニメーションは行われることはありませんが、新規作成したものなので過去に紹介したものとはかなり異なります。
まぁ気になる方はご自分で実行させてみてください。

なにか関数の解説ではなく単なる説明になってしまいましたが、たぶん解読できるのではないかと思いますので頑張ってください。
ではまた今度。

拍手[0回]

PR
author : gp-hss ×

COMMENT

ADD YOUR COMMENT

NAME
TITLE
MAIL
URL
COMMENT
PASS

TRACKBACK

TRACKBACK URL
忍者ブログ | [PR]
 | PAGE TOP
write | reply | admin