忍者ブログ
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
1  2  3  4  5  6  7 
×

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

author : gp-hss ×

RPG(.zip)

今回は敵の配置と戦闘プログラムとの連結を実現しました。
現在のところは2つのブロックにしか敵は配置していませんが、完成版ではバランスをみながらじゃんじゃん配置していきたいと思っています。

あとはミニマップを追加し、オープニング画面をつくったりその他諸々だけです。
これらはそこまで時間をくわずにつくれると思いますので、あとはマップをどんどんつくっていくだけです。
なんとかで 21 日までには完成できるかな。

ちなみになんで 21 日までなのかといいますと、じつは C を勉強し始めてちょうど半年目なのです。
半年目までにはなにかしら作ってみたいなと思っていたので、間に合いそうでホッとしてます。
(過去の記事では 15 日などといってしまってますが、実際には 21 日までだったんでたぶん間に合いますよね。まぁ 15 日まででもギリで間に合いそうだけど・・・。)

敵の配置などの情報については、専用の配列を使ってブロック毎にデータを読み込み、指定された座標へ配置します。
そして、予め作っておいた MoveEnemy() 関数をつかって敵を動かしています。
ちなみに過去に公開したものとは若干引数だとか関数本体だとかを修正しています。
あと敵が若干障害物を消したりしてますが、どうにも気が荒く猪突猛進的な敵なんで壊してしまうんですよね~。
なんていう環境破壊効果という口実のもとそのままにしてますが、完成版ではちゃんとしますよ。
(たぶん、敵の動きをコントロールしてるあの関数が・・・)

そして敵と主人公が衝突したならば戦闘に入ります。
BattleMain() 関数には、敵の種類と敵の数を渡しています。
勝ったら敵をマップから消します。
その敵に関する情報も削除するのでその情報を詰めてあった部分が空いてしまいますので、情報を格納している配列を消した情報があったところから前方へ詰めます。

今のところは負けても勝っても主人公は死にませんし、逆に敵が消えてなくなります。
逃げても同様の結果となるでしょう。
しかもブロックを移動してまた戻ったら即復活しています。
もちろん完成版ではちゃんとしますので悪しからず。
(こういうのがその他諸々のひとつの要素なわけですね。)

まぁ今回は単純に敵の配置とかしただけなのでたいしたことはありませんでしたが、プログラムが大きくなってくるとひとつ修正するのも大変ですね。
それを修正したことによって連鎖的にたくさんのものを修正しないといけなくなってしまうんです。
まぁそんなことに陥りやすいコーディングをする僕がいけないのですが。
とほほ・・・。

ということでまた今度です。


あっ、ちなみに記事の本文は一応誤字・脱字がないよう気をつけてはいますが、もしそういうのがありましたらあなたの推理力でどうにかしてください。
無責任極まりないですがご勘弁を。

拍手[0回]

PR
author : gp-hss ×

今回は結構このブログのデザイン(ほんの一部だけだけど)を変更しました。
まず一つに、上の「FGP」と書かれている変な隆起しているやつです。

ちょっと意図したとおりの仕上がりにはできなかったのですが(もっとシャープにしたかった・・・)、そのためちょっと邪魔くさく感じるかもしれません。
でも主であるゲーム作りをほっといて作ったくせにこの程度で終われるわけがないのです。

では、ちょっと右にある四角いスイッチをポチッと押してみてください。
どうです。ちょっと驚きましたか?
形式は gif なんで透明か不透明かの画像しか使えないのでちょっと工夫してます。
あとブラウザに Firefox を使っていないと結構始めの画像だとかがちらつくかもしれません。
対応しているブラウザなどについてはページの最下部に記載しておりますのでご確認ください。
背景の画像は今後いくつかつくってランダムに表示させたいと思っています。

しくみとしては、
クリックされたらまずスイッチの画像を切り替えます(へこんでいるやつにね)
その次に、ゲートの画像をゲートが開く gif に切り替えます。
結果、その後ろ(というか奥?)に配置してある背景(ではないけど)画像が見えるわけです。
もう一度スイッチがクリックされたら同様にして画像の切り替えを行っています。
まぁ実際には画像がちらつかないようにいろいろしてるわけですが(効果があるかどうかは知りません)

これらは javascript を使って書いているわけですが、 C から派生した言語である java をベースにして作られたスクリプト言語でしかないので、そこまで困ることはありません。
まぁ実際にはいろいろ調べたわけですが・・・。
ちなみに背景の空も CG ですよ。
昔、結構2DCGにはまってたんですよ。
もちろん Photoshop なんつー効果なソフトなんざ持っていませんが、僕みたいな素人には GIMP で十分すぎるぐらいなのです。
javascript のソースがみたい方はこのページのソースを表示させれば見れると思いますので興味のある方は見てみてください。

二つ目の変更点はいわゆる favicon というものです。
このブログでサイト作りは 5 回目ぐらいなのでこいつの存在は耳に入っていたのですが、初めて作ってみました。
んで、具体的になんなのかといいますと、タブやアドレスバーに表示される画像のことです。
あの小さいやつね。
ギリギリ「FGP」って書いてあるのがわかるかなと思います。
デザイン的にはページ上のゲートのやつとほぼ同じです。
ちなみに「FGP」ってどういう意味ッスか?といわれると、
「Future's Game Programmer (未来のゲームプログラマー)」の略です。
('s をこんな使い方したら違うニュアンスになりそうですが無視する方向で。)
本当に将来は自称ではなくなっているといいですね。

ではまた今度。

拍手[0回]

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回]

author : gp-hss ×

RPG_BATTLE(.zip)

とりあえずバトルプログラムは完成しました。
ということなので今回はソースファイルも公開していますが、ぼくが思いついたら作って、思いついたら作っての繰り返しでコーディングしていったものなので、読み手にはやさしくないし実現方法もバカだしグローバル変数は乱用してるし簡潔でないしもう何がなんだかわからないしで最悪なのは保障します。
また改めて注釈もきちっとつけて無駄をなくしよりわかりやすくしたものを公開したいと思いますので、いまのところはこれでお願いします。
本当は後から手直しするんじゃなくて常に良質なプログラミングができるのが理想なんだけどね。
あぁ、あと不具合などがあるかもしれませんが後で直すつもりなのでがまんしてください。
例えば、確か防御力強化アイテムを何個か使って、さらに「ぼうぎょ」を選択するとダメージが文字化けして「/」や「・/」とかになってしまいますが、だいたい察しはついていますので大丈夫です。

えぇ~では気を取り直して、今回はアイテムの項目を仕上げました。
いろいろと凝ってます。
獲得できる経験値やダメージなどのゲームバランスは最後に調整したいと思いますので悪しからず。
ちなみに経験値は、まず純粋な経験値があってそこからいろいろと引かれていくようになっています。
例えばどれだけのターンが経過したかや、使用したアイテム数などなど。
今回は敵が3体いるのですが、ふつうに戦ったら必ず負けます。
ちゃんとアイテムなどを考えて使えば楽勝です。がんばってください。
ちなみに相手はポーン(このゲーム上最弱の敵)なので、自分の仲間が倒されるとひるんでこちらは連続で攻撃できますのでそのへんもよく考えてください。

あと、このプログラムを実行するときはできるだけ他のアプリケーションなどは終了してから実行してください。
動作に大変影響を受けますので。
特にこの僕のパソコン(昔のビジネスモデルのPC)はシングルコアのCPUにメモリが1GBもなく、かつ古いので他のプログラムを終了してないと重くてカクカクの動画を見ているような感じになってしまいます。

ようやくこれからはマップ作りに専念できますね。
どうにか2月までには完成させたかったのですがちょっと難しそうですね~。
まぁ2月15日までに完成できれば一応ノルマは達成なのでなんとか頑張りたいです。
ではまた今度。

拍手[0回]

author : gp-hss ×
RPG_BATTLE_TEST(.zip)

どうもです。
今回は前回の予告どうり「ぼうぎょ」「アイテム」の項目を完成の一歩手前までつくりました。
案外楽にできたのは、ほとんど既につくってある関数を流用しているからなのです。
しかし、プログラム自体はけっこう複雑になってきて不具合などがあるかもしれませんのでご了承ください。

そういえば前回の記事では言いそびれていましたけど、HPステータスの表示と明示的なグラフみたいなのも作っています。
HPの変動に連動して変化します。
あとコメントの表示はENTERなどを押すことである程度スキップできます。
また、最終コメント表示後はENTERもしくは → , ↓ を押さないと先に進めません。
どれが最終コメントなのかは完成版では判断がすぐにつくようにしたいと思っています。
(例えば、点滅カーソルの表示の切り替えなどで)

あと今回ではレベルアップしたときにどのステータスがどうくらい伸びたか表示します。
ちなみにアイテムは現在ポーションしか正常に作動せず、ほかのアイテムを使うと強制的に相手のターンになってしまいます。

そういえば一番大事なことを忘れていたのですが、実行ファイルがVCランタイムか実行環境がないと起動できないということです。
ゲームなんていう配布目的なものをつくっているのでなんとかしたいのですが、まだVC++2008EEでビルドだとかしたことがほとんど無い状態なのでどうしていいか分からず彷徨っています。
たしかリンカオプションの全般で「ランタイムライブラリに依存」のところを「いいえ」にすればファイルが大きくなるかわりにランタイムなしで起動できるときいたので、ソースを新たに作ったプロジェクトのファイルにコピペしてビルドしようとしたが警告だとかエラーがわんさかでてお手上げ状態です。

1つの要因としてはファイルのオープンなのですが、ファイル名ではなく、直接パスとファイル名を書いているにもかかわらず警告でて、ちゃんとできたのかどうかわからない状態。
("c:\\xxx\\xxx.txt" みたいな感じにしてやっているんですがね~・・・。)
あとはそれによって連鎖的にでてきたエラーなど。
一回簡単なプログラムでいろいろ試してやってみようと思うので、とりあえず起動したいかたは実行環境をインストールしてください。
申し訳ないです。
でも確かWin32コンソールアプリケーションならランタイムなしで起動できたような気がするだけどなぁ~。

そういうことなのでそろそろこの Battle プログラムも終わらせつつちゃんとファイルを起動できるようにしたいと思います。
ではまた今度。

拍手[0回]

author : gp-hss ×
忍者ブログ | [PR]
 | PAGE TOP
write | reply | admin