値の受け渡し

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ととろ

値の受け渡し

#1

投稿記事 by ととろ » 16年前

少しながいですが
load.cpp-----

#include "dxlibp.h"
#include "GV.h"
#include <stdlib.h>

void load_story(){
        int n,num,i,fp;
		char fname[32]={"dat/storyH0.csv"};
		int input[64];
        char inputc[64];

        fp = FileRead_open(fname);//ファイル読み込み
		if(fp == 0){
                printfDx("read error\n");
				return;}
		else {printfDx("OK\n");}
		

		 for(i=0;i<2;i++)
       //最初の2行読み飛ばす
                while(FileRead_getc(fp)!='\n');

        n=0 , num=0;
        while(1){               
			int fz =FileRead_open(fname);
			for(i=0;i<64;i++){
                        inputc=input=FileRead_getc(fp);//1文字取得する
                        if(inputc=='/'){//スラッシュがあれば
                                while(FileRead_getc(fp)!='\n');//改行までループ
                                i=-1;//カウンタを最初に戻して
                                continue;
                        }
                        if(input==',' || input=='\n'){//カンマか改行なら
                                inputc='\0';//そこまでを文字列とし
                                break;
                        }
                        if(fz!=0){//ファイルの終わりなら
                            printfDx("end\n");    
							goto EXFILE;//終了
                        }
			}
                switch(num){
                        
                        case 0: enemy_order[n].cnt      =atoi(inputc);break;
                        case 1: enemy_order[n].pattern  =atoi(inputc);break;
                        case 2: enemy_order[n].knd      =atoi(inputc);break;
                        case 3: enemy_order[n].x        =atof(inputc);break;
                        case 4: enemy_order[n].y        =atof(inputc);break;
                        case 5: enemy_order[n].sp       =atof(inputc);break;
                        case 6: enemy_order[n].bltime   =atoi(inputc);break;
                        case 7: enemy_order[n].blknd    =atoi(inputc);break;
                        case 8: enemy_order[n].col      =atoi(inputc);break;
                        case 9: enemy_order[n].hp       =atoi(inputc);break;
                        case 10:enemy_order[n].blknd2   =atoi(inputc);break;
                        case 11:enemy_order[n].wait     =atoi(inputc);break;
                        case 12:enemy_order[n].item_n[0]=atoi(inputc);break;
                        case 13:enemy_order[n].item_n[1]=atoi(inputc);break;
                        case 14:enemy_order[n].item_n[2]=atoi(inputc);break;
                        case 15:enemy_order[n].item_n[3]=atoi(inputc);break;
                        case 16:enemy_order[n].item_n[4]=atoi(inputc);break;
                        case 17:enemy_order[n].item_n[5]=atoi(inputc);break;
                }
                num++;
                if(num==18){
                        num=0;
                        n++;
						
				}
		}
EXFILE:
		
        FileRead_close(fp);

}
enemy.cpp----
void enemy_enter(){//敵の行動を登録・制御する関数
	int i,j,n;
	for(n=0;n<ENEMY_ORDER_MAX;n++){
		if(enemy_order[t].cnt==stage_count){//現在の瞬間がオーダーの瞬間なら
			if((i=enemy_num_search())!=-1){
				enemy.flag	=1;//フラグ
				enemy.cnt	=0;//カウンタ
				enemy.pattern=enemy_order[n].pattern;//移動パターン
				enemy.muki	=1;//向き
				enemy[i].knd	=enemy_order[n].knd;//敵の種類
				enemy[i].x		=enemy_order[n].x;//座標
				enemy[i].y		=enemy_order[n].y;
				enemy[i].sp		=enemy_order[n].sp;//スピード
				enemy[i].bltime	=enemy_order[n].bltime;//弾の発射時間
				enemy[i].blknd	=enemy_order[n].blknd;//弾幕の種類
				enemy[i].blknd2	=enemy_order[n].blknd2;//弾の種類
				enemy[i].col	=enemy_order[n].col;//色
				enemy[i].wait	=enemy_order[n].wait;//色
				enemy[i].hp		=enemy_order[n].hp;//体力
				enemy[i].hp_max =enemy[i].hp;//体力最大値
				enemy[i].vx     =0;//水平成分の速度
				enemy[i].vy     =0;//鉛直成分の速度
				enemy[i].ang    =0;//角度
				for(j=0;j<6;j++)
					enemy[i].item_n[j]=enemy_order[n].item_n[j];//落とすアイテム
			}
		}
	}
}


load.cppで得られたenemy_order[n]の値をenemy.cppのenemy_order[n]に渡しているですが、
自分はnが別々に宣言されて別々の値が返っているようにしか見えません。
nのあけ渡しえお行っている部分はどの部分でしょうか?。
それともenemy_order[~~]とさえなっていれば勝手に同じ値が入るのでしょうか?

kazuoni

Re:値の受け渡し

#2

投稿記事 by kazuoni » 16年前

今一度、質問内容を見直したほうがよいかもしれないです。

>load.cppで得られたenemy_order[n]の値をenemy.cppのenemy_order[n]に渡しているですが、
誤解があるかと思います。
恐らく、enemy_orderはグローバル変数であるので、
enemy_orderはどこからでも書き換え可能っということであって、
値を渡すとは違うかと思います。

>自分はnが別々に宣言されて別々の値が返っているようにしか見えません。
enemy.cppの関数enemy_enterではnは宣言されていないと思いますが・・・?

>nのあけ渡し


#追記
一度投稿をしてしまう前に、毎回プレビューにチェックを入れて、
投稿内容を確認するとよいと思います。
また、間違えて投稿してしまっていても、編集キーを入れておけば、
投稿後も編集できます。

ととろ

Re:値の受け渡し

#3

投稿記事 by ととろ » 16年前

返答ありがとうございます。
>load.cppで得られたenemy_order[n]の値をenemy.cppのenemy_order[n]に渡しているですが、
誤解があるかと思います。
恐らく、enemy_orderはグローバル変数であるので、
enemy_orderはどこからでも書き換え可能っということであって、
値を渡すとは違うかと思います。
すみません。考えてたら混乱してしまいましたが、
enemy_order[n]のnに入る値を気にしてもしょうがないですね。
分かりづらいかも知れませんが自分は↓の敵に関する値をenemy.~に持たせるには?というのを言いたかったのです。もし同じコトを聞いていたらすみません。
/カウンタ	移動パターン	敵の種類	x座標	y座標	スピード	発射時間	弾幕種類	弾の色	体力	弾種類	待機時間	アイテム1	2	3	4	5	6
/cnt	pattern	knd	x座標	y座標	sp	bltime	blknd	col	hp	blknd2	wait	item_n[0]					
100	0	0	50	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
110	0	0	80	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
120	0	0	110	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
130	0	0	140	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
140	0	0	170	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
150	0	0	200	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
160	0	0	230	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
170	0	0	260	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
180	0	0	290	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1
190	0	0	320	-20	0	150	0	0	100	0	120	0	-1	-1	-1	-1	-1

kazuoni

Re:値の受け渡し

#4

投稿記事 by kazuoni » 16年前

前の発言で「enemy.cppの関数enemy_enterではnは宣言されていないと思いますが・・・? 」
って言ってますが、普通にn宣言してありましたねorz
大変申し訳ありませんでした。
ただ、関数enemy_enterでは、nの初期化を行っておらず、
このままこの関数を動かすと、まずいです。


>自分は↓の敵に関する値をenemy.~に持たせるには?というのを言いたかったのです。

nを関数enemy_enterの
for(t=0;t<ENEMY_ORDER_MAX;t++)

で最後でインクリメントすればよいのではないでしょうか?

ととろ

Re:値の受け渡し

#5

投稿記事 by ととろ » 16年前

すみません。
void ini(){
stage_count=1;
memset(&ch,0,sizeof(ch_t));
ch.x=FIELD_MAX_X/2;
ch.y=FIELD_MAX_Y*3/4;
memset(enemy,0,sizeof(enemy_t)*ENEMY_MAX);
memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
}
初期化の部分を忘れていました。

さらに
for(t=0;t<ENEMY_ORDER_MAX;t++)


for(n=0;n<ENEMY_ORDER_MAX;n++)
の間違いです。なんども編集ミスをすみません。
それとインクリメントってなんですか?

kazuoni

Re:値の受け渡し

#6

投稿記事 by kazuoni » 16年前

質問内容を今一度確認したいんですが・・・
「load.cppとenemy.cppで変数enemy_orderを使っているけど、両者は同じものなの?」
ってことでしょうか?
それとも
「自分は↓の敵に関する値をenemy.~に持たせるには?」
でしょうか?

前者ならば、一番最初に自分が書きましたが、
enemy_orderはグローバル変数なので、どこからでも使えます。
(記述してあるヘッダーをインクルードすれば)

後者ならば、http://dixq.net/rp/11.html
を読んでくださいっと言うしかないと思うのですが・・・。

自分は、読解力にかけるので、質問内容が、いまいち分かりません。
この二つのどれでもなければ、他の方からの回答をお待ちください・・・。

#余談1
もしかして、一番上で提示したコード編集してます?
自分で編集できますと書いておきながら言うのもなんですが、
なるべくならコードは編集せずに、新たに現在のコードをレスに張るなり、
テキストファイルをupするなりしないと、このスレを見る人が
混乱してしまうかと思います。

#余談2
インクリメントは
i++;
++i;
のことです。用語はググればすぐ出てきます。

ととろ

Re:値の受け渡し

#7

投稿記事 by ととろ » 16年前

何度も回答ありがとうございます。
やはり質問の仕方が悪かったですよね。
大変失礼にはなりますが違う形でもう一回質問してみます。

ととろ

Re:値の受け渡し

#8

投稿記事 by ととろ » 16年前

解決

閉鎖

“C言語何でも質問掲示板” へ戻る