ページ 11

敵キャラの増やし方

Posted: 2009年2月25日(水) 15:48
by ユカイ
度々すみません。敵キャラの増やし方を教えていただけませんか?とりあえず、スタート時に6匹(人?)ほどいえて、捕まえるとフワっと消える感じで^^;

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:01
by SCI
ざっとしか見ていませんが、以下の点を考えてみるといいかも知れません。

・複数の「敵データ(ch_t構造体)」は、配列で管理できそうです。
・配列にしたら、敵の移動処理や衝突判定はその数分、繰り返す必要があります。

それから、構造体を値渡ししている箇所がありますが、読み取り専用の場面においてもポインタ渡しで平気ですよ。
むしろ、値渡しより処理が高速になります(差はごく僅かですが)。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:30
by ユカイ
ん~~ わかりませんね~
単純にenemy2と増やしただけなんですが、エラーになります。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:41
by SCI
エラーって、どんなエラーが出るのですか?

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:46
by ユカイ
z:\c言語\cpp_game\ch5\main.cpp(171): error C2065: 'enemy' : 定義されていない識別子です。
z:\c言語\cpp_game\ch5\main.cpp(171): error C2227: '->walking_flag' : 左側がクラス、構造体、共用体へのポインタではありません。型は ''unknown-type'' です。
z:\c言語\cpp_game\ch5\main.cpp(215): error C2065: 'enemy2_exist' : 定義されていない識別子です。
z:\c言語\cpp_game\ch5\main.cpp(220): error C2065: 'enemy2_image' : 定義されていない識別子です。

といった感じです。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:49
by ユカイ
それでもって、ランダムに6匹の敵をマップに配置できればいいんですが・・・・

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:56
by SCI
ランダム配置は「乱数生成」の方法でできますよ。座標情報に乱数を使えばいいです。

ちょっとソースのコンパイルとか確認してみますねv

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 16:58
by kazuoni
作っておいた本人がいうのもなんですが・・・
このままだとこれから実装したいものすべてここで解決してもらう
ってなりそうです。
構造体、ポインタあたりの勉強は済まされました?
少なくとも変数宣言のところでは躓かないと思いますので。。
一度入門のページで
構造体
ポインタ(文字列操作)
あたりを勉強して、それからもう一度取り組んではどうですか?

>SCIさん
>構造体を値渡ししている箇所がありますが、読み取り専用の場面においてもポインタ渡しで平気ですよ。
高速化の面は知りませんでした^^;
ただ、「この引数は値変更はしないよ!」
っというのを明示したかっただけなんです。
っといいながらも、外部変数でキー監査してしまっているという矛盾・・・。w
やはりキー監査はクラス化したほうが無難な気がします。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 17:03
by SCI
コンパイルしてみました。エラーの原因は全部「入力ミス」のようです(笑)
「ドット」が「アンダースコア」になってたり、「enemy2」と書くべきところを「enemy」と書いていたり、です。


kazuoniさん
私はまだ勉強中なので、あまり大げさに断言できませんが・・・
構造体や配列は、基本的に値渡しはしないと思います。
「値渡し」は、すなわち仮引数(関数定義のカッコの中の変数)に値をコピーすることなので、
サイズの大きい構造体や配列を渡すより、一定サイズのポインタ変数にするほうがいいみたいですよ。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 17:11
by kazuoni
あ、理解しました^^;
確かにその通りです。
ただ、書き換え可能っというデメリットがどうも自分は避ける方向にあるんで、
構造体の時はお構いなく使っていたのですが・・・。
んん~悩みどころですね。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 17:16
by SCI
そしたら、constを使ってみたらどうでしょう?
ポインタ変数のコンストって混乱しがちですが、
  const 型 *p;
は、実体が定数、
  型 * const p;
とすると、アドレスが定数、という感じです。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 17:34
by kazuoni
万事解決いたしました^^;
恥ずかしい限りです。。
const型じゃなくても関数の引数でconstにできたんですねw
今まで型の不一致と勝手に認識していました。。
これで自分の場合のメリットは0ですね^^;
関数中でconst_castしない限りは安全ですね。

#こんな自分が熟練のプログラマとは・・・w

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 18:57
by ユカイ
私はドがつく素人なので何が何だか・・・

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 19:12
by kazuoni
一応参考までにサンプルは作りました。
今回はコメントは入れてないので、自分で解析してください。
この演算子なに?等はネット等で調べてください。
これで、基礎の勉強がはかどってもらえると何よりです。
っというのも、自分もゲームプログラミングの館から
C言語の基礎の勉強をし始めました。
こんな風にしたいんだけど、どうしたら?っと思うと
ポインタが絡んでいたり、ファイル出力が絡んでいたり、文字列だったり、配列だったり・・・
分からなくなったら基礎を勉強しなおして、再度挑戦っとしてました。
今現在でも自分は↑のレスのようにまだまだ初心者です。
やはり基礎が大事だと思います。

(っていいながらまだまだ自分も怪しいですが・・。)

がんばってください。

Re:敵キャラの増やし方

Posted: 2009年2月25日(水) 19:17
by ユカイ
本当に申し訳ないです。ありがとうございます。
教科書とか見ると、何をやっているのかはだいたいわかるんですが、いざ自分で作るとなるとできないんですよね・・・