また皆様のお知恵をお借りに来ました。
今回は2つあるのですが、龍神録16章と17章で5日も詰まってしまいました。
まず16章なのですが16章はミシャクジさま弾幕を作ってみようというものでこういったものです。
http://www.nicovideo.jp/search/%E3%83%9 ... %BE?sort=v
作成しデバックを実行してみたところ次のようなエラーがでました。
1>------ ビルド開始: プロジェクト: RyuJin, 構成: Debug Win32 ------
1>コンパイルしています...
1>cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。
1>shot.cpp
1>リンクしています...
1>shotH.obj : error LNK2005: "void __cdecl shot_bullet_H008(int)" (?shot_bullet_H008@@YAXH@Z) は既に shot.obj で定義されています。
1>R:\project\16章\Debug\RyuJin.exe : fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。
1>ビルドログは "file://r:\project\16章\Debug\BuildLog.htm" に保存されました。
1>RyuJin - エラー 2、警告 1
========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ==========
1>shotH.obj : error LNK2005: "void __cdecl shot_bullet_H008(int)" (?shot_bullet_H008@@YAXH@Z) は既に shot.obj で定義されています。
の部分はミシャクジさま弾幕で一番最初に書く部分のエラーだと思います。
どうしてこんなエラーがでるのか見当がつかず、龍神録のサイトと見比べても文法ミスはなく(と思います。)、直し方がさっぱりわからないまま、とある理由で17章へ移行してしまったため実際は20日間悩み続けてました(笑)
コードはこんなかんじです。
//ミシャクジさま
void shot_bullet_H008(int n){
int t=shot[n].cnt;
int k;
if(t>=0 && t<1200 && t%90==0){
double angle=rang(PI);
for(int j=0;j<2;j++){//途中から2分裂する分
for(int i=0;i<60;i++){//一度に60個
if(shot[n].flag!=2 && (k=shot_search(n))!=-1){
shot[n].bullet[k].knd =8;//8番の弾
shot[n].bullet[k].angle =angle+PI2/60*i;//円形60個
shot[n].bullet[k].flag =1;
shot[n].bullet[k].x =enemy[shot[n].num].x;
shot[n].bullet[k].y =enemy[shot[n].num].y;
shot[n].bullet[k].col =4;//4番の色
shot[n].bullet[k].cnt =0;
shot[n].bullet[k].state =j;//ステータス。0か1かで回転がかわる
shot[n].bullet[k].spd =2;
}
}
}
se_flag[0]=1;//発射音鳴らす
}
for(int i=0;i<SHOT_BULLET_MAX;i++){//全弾分
if(shot[n].bullet[i].flag>0){//登録されている弾があれば
int state=shot[n].bullet[i].state;
int cnt=shot[n].bullet[i].cnt;
if(30<cnt && cnt<120){//30~120カウントなら
shot[n].bullet[i].spd-=1.2/90.0;//90カウントかけて1.2減らす
shot[n].bullet[i].angle+=(PI/2)/90.0*(state?-1:1);//90°傾ける
}
}
}
}
次に17章に関してですが17章はシューティングゲームの自機にショットを打たせるという内容でデバックを実行したところcshot_tが再定義されてるとエラーが出ました。
コードはこんな感じです。
//キャラクターショットに関する構造体
typedef struct{
int flag,power,cnt,knd;//フラグ、パワー、カウンタ、種類
double x,y,angle,spd;//座標、角度、スピード
}cshot_t;
//キャラクターに関する構造体
typedef struct{
int flag; //フラグ
int cnt; //カウンタ
int power; //パワー
int point; //ポイント
int score; //スコア
int num; //残機数
int mutekicnt; //無敵状態とカウント
int shot_mode; //ショットモード
int money; //お金
int img;
int slow; //スローかどうか
double x,y; //座標
int shot_cnt; //ショットのカウンタ
}ch_t;
//敵に関する構造体
typedef struct{
int flag,cnt,pattern,muki,knd,hp,hp_max,item_n[6],img;
//フラグ、カウンタ、移動パターン、向き、敵の種類、HP最大値、落とすアイテム
double x,y,vx,vy,sp,ang;
//座標、速度x成分、速度y成分、スピード、角度
int bltime,blknd,blknd2,col,state,wtime,wait;
//弾幕開始時間、弾幕の種類、弾の種類、色、状態、待機時間、停滞時間
}enemy_t;
typedef struct{
//カウンタ、移動パターン、敵の種類
int cnt,pattern,knd;
//初期座標と移動スピード
double x,y,sp;
//弾幕開始時間、弾幕の種類、色、体力、弾の種類、停滞時間、アイテム(6種類)
int bltime,blknd,col,hp,blknd2,wait,item_n[6];
}enemy_order_t;
//パッドに関する構造体
typedef struct{
int key[PAD_MAX];
}pad_t;
//コンフィグに関する構造体
typedef struct{
int left,up,right,down,shot,bom,slow,start,change;
}configpad_t;
//弾に関する構造体
typedef struct{
//フラグ、種類、カウンタ、色、状態、少なくとも消さない時間、エフェクトの種類
int flag,knd,cnt,col,state,till,eff;
//座標、角度、速度、ベースの角度、一時記憶スピード
double x,y,angle,spd,base_angle[1],rem_spd[1];
}bullet_t;
//ショットに関する構造体
typedef struct{
//フラグ、種類、カウンタ、どの敵から発射されたかの番号、色
int flag,knd,cnt,num;
//ベース角度、ベーススピード
double base_angle[1],base_spd[1];
bullet_t bullet[SHOT_BULLET_MAX];
}shot_t;
//キャラクターショットに関する構造体
typedef struct{
int flag,power,cnt,knd;
double x,y,angle,spd;
}cshot_t;
しかし、消すと別のエラーが発生します。
なぜエラーが発生するのかまったくわかりません。
皆様のお知恵をお貸しいただけたら幸いです。
ちなみに開発環境はVisual Studio 2008でC言語にかんしては初心者です。
あとですが、これは別々のトピックにしたほうがよいでしょうか?
もしそうならすぐに新たにトピックを立てます。