忍者ブログ
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 ×

map_test(.c)
map_test(.exe)
map_test(.txt)


何かそれなりのものができました。
空白以外の部分を読み取り、二次元配列が全体像の役割をしています。
ちなみに二次元配列には宣言時、自動的に 0 で初期化されます。
あとは取得した情報を元に描画していくだけです。
もっと描画スピードを上げたいのだがそれには if 処理を取り除く必要があります。
 if 処理を取り除くためには空白も取得して、空白も描画させるという手もありますが、空白以外の部分に比べあまりに空白部が多いのであまり効果的ではありません。
または二次元配列に空白以外のところを順繰りに格納させていく方法もありますが、これだとプログラムが厄介なものになってしまい、今後プログラムが作りにくくなってしまう恐れがあります。
あまりリスクは犯したくないので、とりあえず今回はこういった形で公開しました。
案外簡単にできてしまいました。

あとは部屋ごとにナンバリングして、部屋の区別とどことどこがつながっているのか明白にします。
あとはプレイヤーが部屋の出入り口の先に進もうとしたら、いったん描画されていたものを全て空白で埋め尽くし(または空白以外の部分だけを空白で上書きし)また新たに次の部屋を描画させます。


ようやくこのゲームも先が見えてきたような気がします。
ではまた今度。

拍手[0回]

PR
author : gp-hss ×

前回のそっけない記事申し訳ございません。
ものすごく眠かったものですから。
ファイルの解説は・・・・・まぁ大丈夫ですよね・・・。
ここはあえて解説しません。みなさんのために。
という口実のもとサボるわけですがだいたいどんなことをしているのかがわかればOKだと思います。

そして一番の難問になりそうなマップの描画についてはヒントになりそうなことを発見。
たとえばテキストファイルに長い文字列を書くと横にスクロールすることができますよね。
スクロールすると描画できる範囲外の文字は消え、また、範囲内に入ってきた文字は表示されます。
縦に長いウェブサイトも同じで、下にスクロールすれば上が消えて下に新たな情報が表示されていきます。
これを応用して、まず全体像を描画して表示する範囲を決めます。
そして、プレイヤーを中心にして自動的にスクロールがされるようにすればいけるのではないかと。
たとえば、プレイヤーが上に動けば下にある部分が表示されなくなり、上のほうに新たにマップの一部が表示されるようになるということです。
もしかしたらこういったスクロール機能はOSが提供しているのかもしれません。
まぁでも最後の手段としてはまず壁などの座標値を配列かなんかに保存しといて、プレイヤーのまわりの座標にある部分だけを表示していくということになってくるんでしょうけど。
ていうか待てよ。
確かDSとかのゼルダの伝説ってダンジョン内においては部屋を移動することでスクロールされてたはず。
これは使えるかもしれない。
出入り口や扉の座標値を保存しといてその先にいこうとするとスクロールされる、またはいったん全ての表示を消して、また新たに描画しなおすか。
描画にかんしてはその部屋の情報をどっかに保存していればできなくもないからこの方法でいけるかもしれない。
また新たに選択肢が増えたな。
けっこう道が見えてきた感がある。
うまくいけばいいが。

そういえばSDKではピクセル単位で描画が可能だけどコマンドプロンプトはやっぱりバイト単位が最小なのかな。
あぁ~早くSDKでプログラミングしてみたい。
絶対今までより充実して面白くなるはず!!
ただ今はまずこのゲームを仕上げないとな。
2月までには絶対終わらせないと。
ていうかC++の勉強が滞っているんだ・・・。
クラスの勉強にいくのにたぶんあと2週間はいると思う。
でもまぁ今勉強してるとこはCとさほど変わらないからずいずい進んでる。
3時間で1つの章終わらせたりとか。
基本読んでるだけだから。
Cのときもノートに何かを書いたことが無くてただ読んでるだけ。
でも結構読み返したりしたからなぁー、2,3回だけど。
たぶん忘れてるところけっこうありそう。
基礎が大事だからちゃんと復習しないとな。


ということでまた今度。

拍手[0回]

author : gp-hss ×

RPG(.h)


とりあえずいろんなものをまとめてやりました。
いろいろと修正したり追加したりしています。
まだまだやることが残っています。
今回は途中経過の報告ということで。

では。

拍手[0回]

author : gp-hss ×

RPGalg(.h)


どうもです。
今回は経験値やステータスの上昇率などゲーム内で使うアルゴリズムをヘッダーにまとめてやりました。
しかし、まだ途中のものです。
とりあえず解説していきましょう。


unsigned short GetDamage()
何かものすごく仮引数が多いですが我慢してください。
この関数は敵もしくは自分に与えられるダメージを計算する関数です。
計算式は、

攻撃力×技の威力)÷敵の防御力経験値の総和÷(敵の防御力敵の魔法防御力)+0 ~ level までのランダム値

まず絶対自分の攻撃力とその技の威力はダメージに関係しますよね。
関係性を × にするか+にするか迷いましたが × にしました。
ということで、敵の防御力との関係性ももちろん-ではなく ÷ になりますね。
あとは個人的に経験値もダメージに影響するかなということで経験値に関することも加えています。
だって経験のある人と素人じゃぜんぜん違いますよね。
そしてその今までの経験値を敵の総合的な防御力で割っています。
このままだとダメージがほぼ一定になってしまいますので最後にランダム値を加えています。


unsigned short GetExp()
この関数では敵を倒すことによって得られる経験値を取得できます。
計算式は、

(敵の全てのステータス情報の) (総和相加平均0 ~ level までのランダム値)×2
なんとこのゲームでは敵のステータスをそのまんま自分の経験値にすることができるのです。
しかもそれをさらに倍にします。
ていうかこのぐらいがちょうどよくなる。と思う。


unsigned short GetLvUpExp()
この関数では1つレベルアップするのに必要な経験値を取得できます。
計算式は、

(自分の全てのステータス情報の) 総和 × level

あとはこの計算によって得られた数値を十の位または百の位まで四捨五入しています。
このアルゴリズムでは決まって一定の間隔の値が返されます。


unsigned short GetHpStatusUpValue()
この関数ではレベルアップすることによってHPステータスの上昇値が取得できます。
計算式は、

((1つレベルアップするのに必要な経験値用の経験値 ÷ level) × 5 ) ÷ 100 + -2  ~ +2

1つレベルアップするのに必要な経験値用の経験値とは、レベルアップするごとに 0 になる経験値を指します。
今までの全ての経験値ではありません。
たいていの場合は 3 ~ 7 におさまります。
努力値なんてもんはなく運で大小がきまります。
非常に理不尽なアルゴリズムです。サボってすいません。


unsigned short GetBasicStatusUpValue()
この関数ではHP以外のステータスの上昇値を取得できます。
上の関数との違いは × 5 の部分が × 2 なだけです。
たいていの場合は 0 ~ 4 におさまります。



今回紹介したのはあくまで作りかけの途中の部分だけです。
こういったアルゴリズムってどうやってつくるのかわからないから勘だけでつくったのですがどうでしょうか。
まだまだ作っていきますのでお楽しみに。

ではまた今度。

拍手[0回]

author : gp-hss ×

characters(.h)
ability(.h)
Hero_Status_Info(.txt)
Enemy_Status_Info(.txt)
Ability_Status_Info(.txt)


とりあえず、新年明けましておめでとう。
今年のガキ使はまぁまぁおもしろかったな。
でも新たな仕掛けが出てきて良かったと思う。
拳銃なんかはそうなるんだろうなとわかっていたけど笑ってしまった。
僕はけっこうメンバー同士で笑いを仕掛けているところが好きなんだ。
あとは笑いを我慢しまいと硬直している姿なんかが。
それにしても何なんだろうあの田中の引き出しを開けるときの顔は。
おかしくてたまらない。
ダービーのときの浜田を選んだときの理由が「気持ち悪いから」には思わず吹いたなぁ。
今年も笑いをくれてありがとう。


そんなわけで本題ですが、前回の記事にもこんなものを作ろうとしていると書いたのですが、ちょっと本格的に始動しました。
まずは、主人公や敵などのキャラクターの情報をどのようにまとめて、どのように取得しようかと考え、結局構造体を使うことにしました。
構造体はヘッダーに書いて、ソースファイルからインクルードすることで引き出せるようにしています。
そしてまた別のファイルにメンバの値などの情報を書いて、 fscanf などを利用しそれを取得しようと考えております。
値などは簡単に読み取れますが、名前は他にも文字があるので読み取りづらいです。
ですのでランダムアクセスを可能にする fseek などを利用して名前などの文字を取得します。
そしてこのように別のファイルに値などの情報を記憶させておくことでデータのセーブ・ロードを可能にしたいなと考えています。
ちなみに今回は記憶ファイルにテキストファイルを利用しているのだが普通市販されているようなゲームではどんな風にしているのでしょうね。

結構本格的ですが、所詮コマンドプロンプト上で実行していくのでグラフィックなどには期待しないでください。
あくまでもプログラムの質が重要だと思っているので。
ちなみに今一番どうしようかなぁと考えているのはマップやダンジョンの壁の表示をどのようにしようかなということ。
描画できる範囲は決まっているし、その範囲内の小さいダンジョンマップなんて作る気はないのでけっこう悩んでいるのだ。
イメージ的にはマップの全体像なんかがあって、範囲内に入っている部分のみ描画させるという風にしたいなと考えているのだが、大丈夫だろうか。
まぁやってみるより他ないですよね(笑)

ちなみに戦闘へは敵と接触することで移行するようにしたいと思っています。
接触したら例の継ぎ目アニメーションを流してやりたいな。
あと、主人公が敵の目視できるようなエリア(半径 3 ぐらい?)に入ったら、敵は主人公を追いかけるようにします。
エリアを抜ければ追いかけてきません。
エリアは形てきにはがくがくの円になるか、もしめんどくさいようならば正方形にでもしようと考えています。
初めての本格的ダンジョンゲームですので十分です。


自分の記事を自分で読んで思うのだが本当に僕って文章作成能力が欠けているよなぁ・・・。

拍手[0回]

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