- ベストアンサー
ゲームプログラミングC/C++、SRPG移動可能範囲。
現在自作でゲームプログラミングをしています。 ジャンルはシュミレーションRPGです。(ディスガイアとかファイファンタクティクスみたいな) 戦闘での移動可能範囲の出し方が分かりません。。。言語はC/C++です。 移動可能範囲を出すために必要な情報(マップの大きさとか) やじっさいに移動可能範囲を導き出す処理を教えて頂けたら幸いです 。 変数名や関数名は仮で書いて頂いてかまいませんがそれぞれに説明を 入れてもらえるとありがたいです。 こんな初心者ですがよろしくお願いします。
- みんなの回答 (9)
- 専門家の回答
質問者が選んだベストアンサー
>これからユニット毎の移動処理を書いていく予定でしたが ここが既に間違っています。移動処理はスーパー(基底)クラスで書きましょう。各ユニットのクラスは移動条件のパラメータを持つだけで良いです。と言うよりレベルアップや装備などで変化するのでは? それじゃ、(1)~(3)は理解しているって事でよろしいですか? 移動範囲の処理は、自分を中心に仮想的に移動処理を行うことで移動範囲を決めることが出来ます。再帰呼び出しを使うと効率的にプログラムする事が可能ですね。 えーと、そもそも移動処理のプログラムは作れますか? 障害物とかの判定も含めて処理する必要がありますが。 再帰呼び出しも理解している必要があります。 http://www.geocities.jp/ky_webid/c/056.html
その他の回答 (8)
- zwi
- ベストアンサー率56% (730/1282)
>止めれたらどれだけ楽になれるか・・・ >とにかくやらないと始まらないので頑張って勉強します。 そうお考えなら仕方ないでしょう。 こんな本もありますので、購入してみて下さい。中古しかアマゾンには無いようです。 http://www.amazon.co.jp/dp/4797316802/ 「ロールプレイングゲームプログラミング」と書かれていますが、中身はシミュレーションRPGの入門です。 少なくとも作業工数ぐらいは見積もるべきだと思いますがね。
お礼
なにからなにまでありがとうございます。 参考にさせて頂きます!!
- zwi
- ベストアンサー率56% (730/1282)
>僕は理解してるつもりですが上が理解してないです。 >でもやるしかないので、 もしかして仕事なんですか? 「現在自作で」と言っていたので、趣味かと思ったんですが。 ともかく、無理です。 あなたの今の技術レベルでは、二年から三年かかっても完成しません。 敵の思考ルーチンなんて、手を付けることさえ不可能なはずです。 勉強しながら進めれば、少しづつ進むと思っているでしょうが、まず基本に返って勉強しない限り行き詰まるだけです。 「でもやるしかないので、」なんて思考停止状態で作れるはずが無いじゃないですか。 ゲーム業界いたので、そんな開発で中止になる開発を幾つも見てきましたが、今の内に止めるのが最良の選択肢です。
補足
>今の内に止めるのが最良の選択肢です。 止めれたらどれだけ楽になれるか・・・ とにかくやらないと始まらないので頑張って勉強します。
- zwi
- ベストアンサー率56% (730/1282)
>ほんとはそうゆうとこから始めたいのですが様々な事情がありすっとばさないといけないのですorz 時間がまったくなくて・・・ じゃあ、企画的に無理だと思います。 プログラムの最後まで手取り足取り教えて貰うことなど不可能です。 企画を変えるか、諦めるか二択です。 これ以上規模の大きなコードなんて誰も読んでくれないし、誰もサンプルなんて書いてくれませんよ。 そもそも、遊べるレベルの「シミュレーションRPG」を作るのに半年以上かかるのを理解していますか?
補足
>そもそも、遊べるレベルの「シミュレーションRPG」を作るのに半年以上かかるのを理解していますか? 僕は理解してるつもりですが上が理解してないです。 でもやるしかないので、 もしよかったら http://ayusya.hp.infoseek.co.jp/AlgorithmMoveArea.html について説明して頂きたいのですがお時間があれば宜しくお願い致します。簡単で結構です。
- zwi
- ベストアンサー率56% (730/1282)
>やはり勉強不足ですね。 本来、もっと単純な物から始めてどんどん難しくしていく作り方をしないと一足飛びにシミュレーションRPGは難度が高いです。 例えば、オセロとか連珠、はさみ将棋などマス目が合って思考ルーチンが必要なプログラムが平気で作れる技量を培ってから挑むべきジャンルだと私は思いますが。作る自信はありますか? ※ ちなみに簡単に人間に勝てるレベルとなるとすごく難しいので、そこまではやらなくて良いです。少なくとも2から3手先は読んで欲しいですけどね。 もし難しそうなら、これより単純な三目並べ辺りから始めた方が良いでしょうね。 http://ja.wikipedia.org/wiki/%E4%B8%89%E7%9B%AE%E4%B8%A6%E3%81%B9
補足
ほんとはそうゆうとこから始めたいのですが様々な事情がありすっとばさないといけないのですorz 時間がまったくなくて・・・ その事情を説明することはできませんが・・・ 「デスマーチ」 これがキーワード・・・とゆうか答えですね。 とりあえず頑張ります。
- zwi
- ベストアンサー率56% (730/1282)
そのコードは単純すぎますね。障害物があった場合に対処出来ません。移動力が余分に必要な地形があった時にも無理ですね。 もう少しちゃんとC/C++のアルゴリズムの勉強をしないと行き詰まることは間違いありません。 1.人の意見やサンプルを見ながら作る。 2.だんだんコードが大きくなる。 3.ここの掲示板で聞ける規模ではなくなる。 4.作る方法が聞けなくなり挫折。 って事になると思います。 >参考サイトだけでも宜しくお願い致します。 戦略系シミュレーションですが、参考になるでしょう。 http://www.jyouhoukaiseki.com/ 移動範囲のアルゴリズム。 http://ayusya.hp.infoseek.co.jp/AlgorithmMoveArea.html このぐらい自力でアルゴリズム作れないとダメですよ。シミュレーションで作るアルゴリズムなんて、これなんか簡単な方ですから。 基本アルゴリズムなどの情報も紹介して置きます。 http://www2.starcat.ne.jp/~fussy/algo/index.htm http://www.ic-net.or.jp/home/takaken/pz/index.html http://itpro.nikkeibp.co.jp/article/COLUMN/20070109/258278/?ST=develop
お礼
やはり勉強不足ですね。 教えて頂いたサイトなども参考にしながら勉強します。 ありがとうございました。
- zwi
- ベストアンサー率56% (730/1282)
まず、どのぐらいの事が出来る or どこまで出来ているか教えてください。 (0)まだ何も出来ていない。 (1)マップの画面表示が出来る。 (2)マップの作り方さえ分からない。 (3)画面表示の方法も分からない。 (4)C/C++も十分に分かっていない。
補足
(4)ですかね。 初心者です。 現在はユニット毎にクラスを作成している段階です。 ベースはできて これからユニット毎の移動処理を書いていく予定でしたがいきなり移動可能範囲の割り出しで詰まってしまいました。
- SnowShower
- ベストアンサー率40% (140/348)
- Tacosan
- ベストアンサー率23% (3656/15482)
「シュミレーションRPG」ってなんだろう... という突っ込みは措いて, と. 最近は「シミュレーション」といってもいろんなマップ構造が使われてるんだよね. 例えば伝統的なヘックスで書いてみたりスクエアにしてみたり, あるいはスクエアを半分ずつずらしながら描いてみたり (これは実質的にヘックスと同じ), はたまた「理屈の上ではどこにでもいける」というものすらある. 「はたまた」より前と後ろとでは処理が違うんだけど, どうしたい?
補足
シミレーションですね(^―^) 説明が足りなくて申し訳ないです。 マップ構造はスクエアで考えています。 なので「はたまた」より前でお願いします。 他に必要な情報などあれば聞いてください。 宜しくお願いします。
補足
スーパークラスに書かないといけなかったんですね。 装備品などによって変化することを考えたらそうですね。 移動処理に関してはいろいろ調べて再帰呼び出しを使ったほうがいいとゆうとこまでは分かったのですが自分のコードに落とし込むのがなかなか上手くできません(技術力不足です) 他の方にアドバイスを参考にして書いてみたのですが コンパイルは通っているのですがこれでいいのでしょうか? 再帰呼び出しは使ってないみたいなので今後の事を考えて使えるようになりたいです。 参考サイトなどでもかまいませんのでアドバイス宜しくお願いします。 下記がコードです。 //--------------------------- //戦士クラス //--------------------------- class Soldier : public Unit { protected: void move(int x, int y){ int map[5][5] = { { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 }, { 0, 0, 0, 0, 0 } }; int charX = 0; int charY = 0; int move =2; int cmov; for( x = 0; x < 5; x++ ) { for( y = 0; y < 5; y++ ) { cmov = abs( x - charX ) + abs( y - charY );// 移動可能範囲 if( (cmov <= move) && (cmov != 0) ) {// 移動可能量以下で0(現在地)でない場合 map[y][x] = 1;// 移動可能 } } } } これじゃ分からないですよね・・ 参考サイトだけでも宜しくお願い致します。