忍者ブログ
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)
41  40  39  38  37  36  35  34  33  32  31 
×

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

author : gp-hss ×

RPG_Battle_test(.zip)

やぁ~どうもです。
けっこう今回はがんばりましたね。
まず、コメント枠内にコメントを表示するためにそれ専用の char * 型の配列を用意して、自作関数をもって表示などの作業をするということにしたのですが、大きな穴がありました。
それは printf のように "%d", get_exp みたいな感じで変数のもっている数値を表示できないということです。
用意している配列は文字列へのポインタでしかないので、中に変換指定を記入したところでそれ自体を文字と認識してしまいます。
そこでけっこうがんばったわけですが、例えば

printf("経験値%dを得ました。", get_exp);

とする場合、まず変数の持っている数値などを表示するところを空白にします。

"経験値 を得ました。"

そしてこの空白を目安にして、この文字列を二つの文字列に分割します。

"経験値"
"を得ました。"

次に変数のもっている数値を文字列に変換します。
アスキーコード表によれば、

0 = 48(10進数)
9 = 57

ですので、上の位の数から順に文字列配列に

str[0] = (char)(get_exp % 100 + 48)

のように代入していき、最後に終端文字を代入します。
あとは、 strcat() 関数を用いて文字列を連結していきます。
しかし、ここで注意しなければいけないのが、この文字列は不必要になるまで記憶域に存在している必要があります。
そこで空いている領域から文字列分の記憶域を確保します。
不必要になれば free でその記憶域を開放してやります。


この方法を思いつくのにけっこうがんばりました。
この関数はもちろんポインタ・配列・文字列のところをきちっと理解していないと作れません。
初めて勉強してたときもこの分野が一番きつかったもんなぁ~。
正直ポインタ単体の理解に苦しんでいたらわからなさすぎてストレスが半端ないと思う(笑)
言いすぎか・・・・・。
まぁー僕自身何回か読み返して理解できるまでいろいろと試験プログラムつくったりしてがんばったww
性格からして勉強に関してはちょっと完璧主義なところがあるので、本当に理解できるまで勉強した。
例えば、こうすればこうなるなんていう浅い理解じゃなくて、なんでそうなるのかというしくみをいつも理解しようとしてたな~そういえば。
数学の勉強もそうだけど、公式なんかはしくみを理解したほうが断然いい。
まる暗記なんか役にたちやしないからね。
それにしくみを知ってれば加法定理以外は自分で作れるようになる!!
まぁ経験が命だけど。数学もプログラミングも・・・。
まぁ雑談はこのぐらいにしておいて、他になにかあったかなぁー・・・・あっ、ソースファイルはちゃんと整えたら公開しますので少々お待ちを。
いますごく酷くて・・・とても見せられたもんじゃないww

えぇ~とっ、次はとりあえず防御の項目を完成させて、アイテムの項目もある程度は手をつけたいと思います。
ていうか一般的には小規模なんだろうけど、僕にとってはこんな大規模なプログラミングは初めて。
だってこのプログラムだけで 1600 ぐらいあるから、 RPG.h を加えると軽く 2000 は越す。
まぁもちろん最終的にはヘッダーはわかりやすく分けますけどね。
あとヘッダーの使い方は普通はプロトタイプ宣言とかだけだと思うので真似しないように。
どうもライブラリの作り方がわからないのでとりあえず関数本体もヘッダーにぶち込んでる。
分割コンパイルはめんどくさいので。
exturn とか・・・。
いまさら書き加えるのは無理ww

ということで次回には Battle プログラムは完了させたいと思いますので、ようやくマップ作りに取り掛かれるかと思います。
はたしてどんなダンジョンにしようかな。
ではまた今度。







ていうか、うわっ!
まてまておいおい・・・・・。
またかよ。なんでこんなに難しく作っちゃうんだよ~・・・。
あんな分割とか連結とかしなくていいじゃん。
それ専用の自作関数を用いて、

void OutObj(char *str, int obj)
{
        printf(str, obj);
}

これで文字列の中に変換指定があったとしても普通に問題なく表示されるじゃないか!!
またこのパターンかよ。
はぁ~あ。
しかも無駄に記憶域確保しなくてもいいし、簡潔じゃないか。
まぁーとりあえずこのゲームでは上記で紹介しためんどくさい実現方法でやっていきますが、みなさんは真似しないように。
あれはあれで使えるんだろうけどね・・・。

拍手[0回]

PR
author : gp-hss ×

COMMENT

ADD YOUR COMMENT

NAME
TITLE
MAIL
URL
COMMENT
PASS

TRACKBACK

TRACKBACK URL

iwakvkrv

URL  2010/02/25(Thu)20:31:16
iwakvkrv
忍者ブログ | [PR]
 | PAGE TOP
write | reply | admin