引数が多すぎますとでます。

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
isyy
記事: 19
登録日時: 10年前
住所: 北海道

引数が多すぎますとでます。

#1

投稿記事 by isyy » 10年前

シューティングゲームでbossを作りたいのですがgraphの部分で使ってる関数に引数が多すぎますというエラーが出てるのなぜでしょうか
以下ソースコード必要な一部のみ
boss.cpp

コード:

#include <math.h>
#include "DxLib.h"
#include "GV.h"
#include "function.h"
#include "struct.h"

#define V0 10.0
extern struct boss_t boss;//ボス情報
extern struct boss_shot_t boss_shot;//ボスショット情報

int serch_boss_shot(){//空き番号を返す
        for(int i=0;i<BOSS_BULLET_MAX;i++){
                if(boss_shot.bullet[i].flag==0)
                        return i;
        }
        return -1;
}
double bossatan2(){//自機と敵との成す角度
        return atan2(ch.y-boss.y,ch.x-boss.x);
}
//物理的計算をさせる登録をする(指定時間tで定位置に戻す)
void input_phy(int t){//t=
         //移動にかける時間
        double ymax_x,ymax_y;if(t==0)t=1;
        boss.phy.flag=1;//登録オン
        boss.phy.cnt=0;//カウンタ初期化
        boss.phy.set_t=t;//移動にかける時間をセット
        ymax_x=boss.x-BOSS_POS_X;//移動したい水平距離
        boss.phy.v0x=2*ymax_x/t;//水平成分の初速度
        boss.phy.ax =2*ymax_x/(t*t);//水平成分の加速度
        boss.phy.prex=boss.x;//初期x座標
        ymax_y=boss.y-BOSS_POS_Y;//移動したい鉛直距離
        boss.phy.v0y=2*ymax_y/t;//鉛直成分の初速度
        boss.phy.ay =2*ymax_y/(t*t);//鉛直成分の加速度
        boss.phy.prey=boss.y;//初期y座標
}
//物理的キャラクタ移動計算
void calc_phy(){
        double t=boss.phy.cnt;
        boss.x=boss.phy.prex-((boss.phy.v0x*t)-0.5*boss.phy.ax*t*t);//現在いるべきx座標計算
        boss.y=boss.phy.prey-((boss.phy.v0y*t)-0.5*boss.phy.ay*t*t);//現在いるべきy座標計算
        boss.phy.cnt++;
        if(boss.phy.cnt>=boss.phy.set_t)//移動にかける時間分になったら
                boss.phy.flag=0;//オフ
}
//ボスの弾幕を計算する
void boss_shot_calc(){
        int i;
        boss.endtime--;
        if(boss.endtime<0)
                boss.hp=0;
        for(i=0;i<BOSS_BULLET_MAX;i++){
                if(boss_shot.bullet[i].flag>0){
                        boss_shot.bullet[i].x+=cos(boss_shot.bullet[i].angle)*boss_shot.bullet[i].spd;
                        boss_shot.bullet[i].y+=sin(boss_shot.bullet[i].angle)*boss_shot.bullet[i].spd;
                        boss_shot.bullet[i].cnt++;
                        if(boss_shot.bullet[i].cnt>boss_shot.bullet[i].till){
                                if(boss_shot.bullet[i].x<-50 || boss_shot.bullet[i].x>FIELD_MAX_X+50 ||
                                        boss_shot.bullet[i].y<-50 || boss_shot.bullet[i].y>FIELD_MAX_Y+50)
                                        boss_shot.bullet[i].flag=0;
                        }
                }
        }
        boss_shot.cnt++;
}
//弾幕をセット
void enter_boss_shot(){
        memset(&boss_shot , 0, sizeof(boss_shot_t));//弾情報初期化
        boss_shot.flag=1;
        boss.wtime=0;//待機時間0
        boss.state=2;//弾幕中状態に
        boss.hp=boss.set_hp[boss.knd];//HP設定
        boss.hp_max=boss.hp;
}
//ボスをセット
void enter_boss(int num){
        if(num==0){//中ボス開始時の時は
                memset(enemey,0,sizeof(enemey_t)*ENEMY_MAX);//雑魚敵を消す
                memset(shot,0,sizeof(shot_t)*SHOT_MAX);//弾幕を消す
                boss.x=FIELD_MAX_X/2;//ボスの初期座標
                boss.y=-30;
                boss.knd=-1;//弾幕の種類
        }
        boss.flag=1;
        boss.hagoromo=0;//扇を広げるかどうかのフラグ
        boss.endtime=99*60;//残り時間
        boss.state=1;//待機中状態に
        boss.cnt=0;
        boss.graph_flag=0;//描画フラグを戻す
        boss.knd++;
        boss.wtime=0;//待機時間を初期化
        memset(&boss_shot,0,sizeof(boss_shot_t));//ボスの弾幕情報を初期化
        input_phy(60);//60カウントかけて物理的計算で定位置に戻す
}
//ボスの待機処理
void waitandenter(){
        int t=140;
        boss.wtime++;
        if(boss.wtime>t)//140カウント待機したら弾幕セット
                enter_boss_shot();
}

//ボスの弾幕メイン
void boss_shot_main(){
        if(stage_count==boss.appear_count[0] && boss.flag==0)//開始時間なら
                enter_boss(0);//開始
        if(boss.flag==0)//ボスが登録されて無ければ戻る
                return;
        if(boss.phy.flag==1)//物理演算移動オンなら
                calc_phy();//物理計算を
        if(boss.state==2 && (boss.hp<=0 || boss.endtime<=0)){//弾幕中で体力が無くなったら
                enter_boss(1);//次の弾幕を登録
        }
        if(boss.state==1){//弾幕間の待機時間
                waitandenter();
        }
        if(boss.state==2){//弾幕中なら
                boss_shot_bulletH000();//弾幕関数へ
                boss_shot_calc();//弾幕計算
        }
        boss.cnt++;
}
struct.h

コード:

#include "define.h"
//キャラクターに関する構造体
  struct ch_t{
        int flag;       //フラグ
        int cnt;        //カウンタ
        int power;      //パワー
        int point;      //ポイント
        int score;      //スコア
        int num;        //残機数
        int mutekicnt;  //無敵状態とカウント
        int shot_mode;  //ショットモード
        int money;      //お金
        int img;        //画像
        int slow;       //スローかどうか
        float x,y;     //座標
		int shot_cnt;  //ショットのカウンタ
} ;

//パッドに関する構造体
 struct pad_t{
        int key[PAD_MAX];
};

//コンフィグに関する構造体
 struct configpad_t{
        int left;
		int	up;
		int	right;
		int	down;
		int	shot;
		int	bom;
		int	slow;
		int	start;
		int	change;
 };
  struct enemey_t{
        //フラグ、カウンタ、移動パターン、向き、敵の種類、HP最大値、落とすアイテム、画像
        int flag;
		int	cnt;
		int	pattern;
		int	muki;
		int	knd;
		int	hp;
		int	hp_max;
		int	item_n[6];
		int	img;
		int back_col;
        //座標、速度x成分、速度y成分、スピード、角度
        double x;
		double	y;
		double	vx;
		double	vy;
		double	sp;
		double	ang;      
        int bltime;//弾幕開始時間、
		int	blknd;//弾の種類
		int	blknd2;//弾の種類
		int	col;//色
		int	state;//状態
		int	wtime;//待機時間
		int	wait;//停滞時間
};

  
 struct enemy_order_t{
        
        //カウンタ、移動パターン、敵の種類
        int cnt,pattern,knd;
        //初期座標と移動スピード
        double x,y,sp;
        //弾幕開始時間、弾幕の種類、色、体力、弾の種類、停滞時間、アイテム(6種類)
        int bltime,blknd,col,hp,blknd2,wait,item_n[6];
};
  struct bullet_t{
//フラグ、種類、カウンタ、色、状態、少なくとも消さない時間、エフェクトの種類
        int flag,knd,cnt,col,state,till,eff;
//座標、角度、速度、ベースの角度、一時記憶スピード
        double x,y,angle,spd,base_angle[1],rem_spd[1];
};
//ショットに関する構造体
 struct shot_t{
//フラグ、種類、カウンタ、どの敵から発射されたかの番号
        int flag,knd,cnt,num;
//ベース角度、ベーススピード
        double base_angle[1],base_spd[1];
        bullet_t bullet[SHOT_BULLET_MAX];
};
 
//キャラクターショットに関する構造体
 struct cshot_t{
        int flag,power,cnt,knd;//フラグ、パワー、カウンタ、種類
        double x,y,angle,spd;//座標、角度、スピード
};
 //エフェクト
 struct effect_t{
	int flag,cnt,col,knd,img,eff;
	double x,y,r,ang,spd,mvang,brt;
};

//消滅エフェクト
 struct del_effect_t{
        int flag,cnt,col;
        double x,y;
};
 //弾の情報
 struct bullet_info_t{
        int size_x,size_y,col_num;
        double range;
};
 //ボムの情報
 struct bom_t{
        int flag,cnt,knd;
        double x,y;
};
 //画面の明るさ情報
 struct bright_set_t{
        unsigned char brt;
};
 //ドン!と揺れる画面の情報
 struct dn_t{
        int flag,cnt,time,size;
        int x,y;
};
  struct boss_shot_t{
//フラグ、種類、カウンタ、どの敵から発射されたかの番号、色
        int flag,knd,cnt,num;
//ベース角度、ベーススピード
        double base_angle[1],base_spd[1];
        bullet_t bullet[BOSS_BULLET_MAX];
};

//物理的計算に使う構造体
 struct phy_t{
        int flag,cnt,set_t;
        double ax,v0x,ay,v0y,vx,vy,prex,prey;
};
 //ボスの情報
 struct boss_t{
        int flag,cnt,knd,wtime,state,endtime,hagoromo,graph_flag;
        int hp,hp_max;
        int appear_count[2],set_hp[DANMAKU_MAX];
        double x,y,ang,spd;
        phy_t phy;
};
SHOT.cpp

コード:

#include <math.h>
#include "DxLib.h"
#include "struct.h"
#include "GV.h"
extern struct enemey_t enemey[];
extern void shot_bullet_H000(int);
extern void shot_calc(int n);
extern void shot_bullet_H000(int);
extern void shot_bullet_H001(int);
extern void shot_bullet_H002(int);
extern void shot_bullet_H003(int);
extern void shot_bullet_H004(int);
extern void shot_bullet_H005(int);
extern void shot_bullet_H006(int);
extern void shot_bullet_H007(int);
extern void shot_bullet_H008(int);
extern void shot_bullet_H009(int);
extern void shot_bullet_H010(int);
extern void shot_bullet_H011(int);
extern void shot_bullet_H012(int);
extern void shot_bullet_H013(int);
extern void shot_bullet_H014(int);
extern void shot_bullet_H015(int);
extern void shot_bullet_H016(int);
extern void shot_bullet_H017(int);
void (*shot_bullet[SHOT_KND_MAX])(int) ={
        shot_bullet_H000,
        shot_bullet_H001,
        shot_bullet_H002,
        shot_bullet_H003,
        shot_bullet_H004,
        shot_bullet_H005,
        shot_bullet_H006,
		shot_bullet_H007,
		shot_bullet_H008,
		shot_bullet_H009,
		shot_bullet_H010,
		shot_bullet_H011,
		shot_bullet_H012,
		shot_bullet_H013,
		shot_bullet_H014,
        shot_bullet_H015,
		shot_bullet_H016,
		shot_bullet_H017,
};



//n番目のショットを登録した敵と自機との角度を返す
double shotatan2(int n){
        return atan2(ch.y-enemey[shot[n].num].y,ch.x-enemey[shot[n].num].x);
}

//空いている弾を探す
int shot_search(int n){
        int i;
        for(i=0;i<SHOT_BULLET_MAX;i++){
                if(shot[n].bullet[i].flag==0){
                        return i;
                }
        }
        return -1;
}

void shot_main(){
        int i;
        for(i=0;i<SHOT_MAX;i++){//弾幕データ計算
                //フラグが立っていて、設定した種類が間違っていなければ(オーバーフロー対策)
                if(shot[i].flag!=0 && 0<=shot[i].knd && shot[i].knd<SHOT_KND_MAX){
                        shot_bullet[shot[i].knd](i);//.kndの弾幕計算関数を呼ぶ関数ポインタ
                        shot_calc(i);//i番目の弾幕を計算
                        shot[i].cnt++;
                }
        }
}

void shot_calc(int n){
        int i,max=0;
        if(enemey[shot[n].num].flag!=1)//敵が倒されたら
                shot[n].flag=2;//それ以上ショットを登録しないフラグに変える
        for(i=0;i<SHOT_BULLET_MAX;i++){//n番目の弾幕データの弾を計算
                if(shot[n].bullet[i].flag>0){//その弾が登録されていたら
                        shot[n].bullet[i].x+=cos(shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
                        shot[n].bullet[i].y+=sin(shot[n].bullet[i].angle)*shot[n].bullet[i].spd;
                        shot[n].bullet[i].cnt++;
                        if(shot[n].bullet[i].x<-50 || shot[n].bullet[i].x>FIELD_MAX_X+50 ||
                                shot[n].bullet[i].y<-50 || shot[n].bullet[i].y>FIELD_MAX_Y+50){//画面から外れたら
                                if(shot[n].bullet[i].till<shot[n].bullet[i].cnt)//最低消えない時間より長ければ
                                        shot[n].bullet[i].flag=0;//消す
                        }
                }
        }
        //現在表示中の弾が一つでもあるかどうか調べる
        for(i=0;i<SHOT_BULLET_MAX;i++)
                if(shot[n].bullet[i].flag>0)
                        return;
        if(enemey[shot[n].num].flag!=1){
                shot[n].flag=0;//終了
                enemey[shot[n].num].flag=0;
        }
}
out.cpp

コード:


#include "DxLib.h"
#include "struct.h"
#include "GV.h"

extern void hit_enemy(int s,int power);
extern void enter_del_effect(int);
extern struct cshot_t cshot[];
extern struct enemey_t enemey[];
#define ENEMY_RANGE_MAX 4
#define CSHOT_RANGE_MAX 2
#define CRANGE 2.0


//敵の当たり判定範囲
int enemy_range[ENEMY_RANGE_MAX]={16,30,16,50};
//自機ショットの当たり判定範囲
int cshot_range[CSHOT_RANGE_MAX]={6,};

//敵と自機ショットが当たったかどうかを判定する
int out_judge_cshot(int i,int s){
    int j;
    if(cshot[i].cnt>0){//ショットの軌道が1度でも計算されていたら
        double x=cshot[i].x-enemey[s].x;//敵と自機ショットとの距離
        double y=cshot[i].y-enemey[s].y;
        //オーバーフロー対策
        if(cshot[i].knd>=CSHOT_RANGE_MAX || enemey[s].knd>=ENEMY_RANGE_MAX)
            printfDx("out_judge_cshot内オーバーフロー");
        //敵の当たり判定と自機ショットの当たり判定の合計範囲
        double r=cshot_range[cshot[i].knd]+enemy_range[enemey[s].knd];
        //中間を計算する必要があれば
        if(cshot[i].spd>r){
            //1フレーム前にいた位置を格納する
            double pre_x=cshot[i].x+cos(cshot[i].angle+PI)*cshot[i].spd;
            double pre_y=cshot[i].y+sin(cshot[i].angle+PI)*cshot[i].spd;
            double px,py;
            for(j=0;j<cshot[i].spd/r;j++){//進んだ分÷当たり判定分ループ
                px=pre_x-enemey[s].x;
                py=pre_y-enemey[s].y;
                if(px*px+py*py<r*r)
                    return 1;
                pre_x+=cos(cshot[i].angle)*r;
                pre_y+=sin(cshot[i].angle)*r;
            }
        }
        if(x*x+y*y<r*r)//当たり判定内なら
            return 1;//当たり
    }
    return 0;
}

//自機と敵ショットが当たったかどうかを判定する
int out_judge_enemyshot(int s,int n){
    int j;
    if(shot[s].bullet[n].cnt>0){//ショットの軌道が1度でも計算されていたら
        double x=shot[s].bullet[n].x-ch.x;//敵と自機ショットとの距離
        double y=shot[s].bullet[n].y-ch.y;
        //オーバーフロー対策
        if(shot[s].bullet[n].knd>=10)
            printfDx("out_judge_enemyshot内オーバーフロー\n");
        //敵ショットと自機の当たり判定の合計範囲
        double r=bullet_info[shot[s].bullet[n].knd].range+CRANGE;
        //中間を計算する必要があれば
        if(shot[s].bullet[n].spd>r){
            //1フレーム前にいた位置を格納する
            double pre_x=shot[s].bullet[n].x+cos(shot[s].bullet[n].angle+PI)*shot[s].bullet[n].spd;
            double pre_y=shot[s].bullet[n].y+sin(shot[s].bullet[n].angle+PI)*shot[s].bullet[n].spd;
            double px,py;
            for(j=0;j<shot[s].bullet[n].spd/r;j++){//進んだ分÷当たり判定分ループ
                px=pre_x-ch.x;
                py=pre_y-ch.y;
                if(px*px+py*py<r*r)
                    return 1;
                pre_x+=cos(shot[s].bullet[n].angle)*r;
                pre_y+=sin(shot[s].bullet[n].angle)*r;
            }
        }
        if(x*x+y*y<r*r)//当たり判定内なら
            return 1;//当たり
    }
    return 0;
}

extern void enter_del_effect(int);

//敵が死ぬかどうかの決定
void enemy_death_judge(int s){
    int i;
    se_flag[8]=1;//敵に当たった音
    if(enemey[s].hp<0){//敵のHPが0未満になったら
        enemey[s].flag=0;//敵を消滅させる
        se_flag[1]=1;//敵のピチュり音
        enter_del_effect(s);
        for(i=0;i<SHOT_MAX;i++){//敵総数分
            if(shot[i].flag!=0){//登録されている弾幕データがあれば
                if(s==shot[i].num){//その敵が登録した弾幕があれば
                    shot[i].flag=2;//それ以上弾幕を続けないフラグを立てる
                    break;
                }
            }
        }
    }
}


//自機ショットと敵との処理
void cshot_and_enemy(){
    int i,s;
    for(i=0;i<CSHOT_MAX;i++){//自機ショット総数
        if(cshot[i].flag>0){
            for(s=0;s<ENEMY_MAX;s++){//敵総数
                if(enemey[s].flag>0){
                    if(out_judge_cshot(i,s)){//自機ショットと敵が当たっていれば
                        cshot[i].flag=0;//その自機ショットを消す
                        hit_enemy(s,cshot[i].power);//sの敵に.powerだけ喰らわす
                    }
                }
            }
        }
    }
}


//敵ショットと自機との処理
void enemyshot_and_ch(){
    int s,n;
    for(s=0;s<SHOT_MAX;s++){//敵ショット総数
        if(shot[s].flag>0){//そのショットが登録されていたら
            for(n=0;n<SHOT_BULLET_MAX;n++){//弾総数
                if(shot[s].bullet[n].flag==1){//弾が登録されていたら
                    if(out_judge_enemyshot(s,n)){//自機にその弾が接触していたら
                        shot[s].bullet[n].flag=0;//弾をオフ

                        /*喰らいボム処理をここに追加*/

                        if(ch.flag==0 && ch.mutekicnt==0){//ステータスが通常で、無敵じゃなかったら
                            ch.flag    =2;    //1:喰らいボム受付中 2:死んで浮き上がり中
                            ch.cnt    =0;
                            se_flag[3]=1;//ピチュり音
                            return;
                        }
                    }
                }
            }
        }
    }
}
void hit_enemy(int s,int power){
    enemey[s].hp-=power;//弾の持つパワー分HPを減らす
    enemy_death_judge(s);//敵が死ぬかどうかを決める
}
//ボムと敵の処理
void cbom_and_enemy(){
    int s;
    if(bom.flag!=1)return;
    for(s=0;s<ENEMY_MAX;s++){//敵総数
        if(enemey[s].flag>0)
            hit_enemy(s,ch.power/20);//sの敵にch.power/20ほど喰らわす
    }
}




//当たり判定メイン
void out_main(){
	cbom_and_enemy();
    cshot_and_enemy();
    enemyshot_and_ch();
}
main.cpp

コード:

#define GLOBAL_INSTANCE 
#include "DxLib.h"
#include "struct.h"
#include "GV.h"

//ループで必ず行う3大処理
//ループで必ず行う3大処理
int ProcessLoop(){
    if(ProcessMessage()!=0)return -1;//プロセス処理がエラーなら-1を返す
    if(ClearDrawScreen()!=0)return -1;//画面クリア処理がエラーなら-1を返す
    GetHitKeyStateAll_2();//現在のキー入力処理を行う
    GetHitPadStateAll();  //現在のパッド入力処理を行う
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow){
    ChangeWindowMode(TRUE);//ウィンドウモード
    if(DxLib_Init() == -1 || SetDrawScreen( DX_SCREEN_BACK )!=0) return -1;//初期化と裏画面化

    while(ProcessLoop()==0){//メインループ		
        music_ini();
        switch(func_state){
            case 0:
                load();        //データロード
                first_ini();//初回の初期化
				func_state=99;
                break;
            case 99://STGを始める前に行う初期化
                ini();
				load_story();
                func_state=100;
                break;

                func_state=100;
                break;
        
            case 100://通常処理
                calc_ch();   //キャラクタ計算
                ch_move();   //キャラクタの移動制御
                cshot_main();//自機ショットメイン
                enemy_main();//敵処理メイン
                shot_main(); //ショットメイン
                boss_shot_main();
                out_main();  //当たり計算
                effect_main();//エフェクトメイン
                graph_main();//描画メイン
                if(boss.flag==0)
                        stage_count++;

                break;
            default:
                printfDx("不明なfunc_state\n");
                break;
        }
		music_play();
        if(CheckStateKey(KEY_INPUT_ESCAPE)==1)break;//エスケープが入力されたらブレイク
        ScreenFlip();//裏画面反映
		count++;
    }

    DxLib_End();//DXライブラリ終了処理
    return 0;
}
bosssh.cpp

コード:


#include "DxLib.h"
#include "GV.h"
#include "struct.h"
extern int serch_boss_shot();
extern double bossatan2();
extern struct boss_shot_t boss_shot;//ボスショット情報
extern struct boss_t boss;          //ボス情報

void boss_shot_bulletH000(){
#define TM000 120
        int i,k,t=boss_shot.cnt%TM000;
        double angle;
        if(t<60 && t%10==0){
                angle=bossatan2();
                for(i=
                        0;i<30;i++){if((k=serch_boss_shot())!=-1){
                                boss_shot.bullet[k].col   = 0;
                                boss_shot.bullet[k].x     = boss.x;
                                boss_shot.bullet[k].y     = boss.y;
                                boss_shot.bullet[k].knd   = 8;
                                boss_shot.bullet[k].angle = angle+PI2/30*i;
                                boss_shot.bullet[k].flag  = 1;
                                boss_shot.bullet[k].cnt   = 0;
                                boss_shot.bullet[k].spd   = 3;
                                se_flag[0]=1;
                        }
                }
        }
        for(i=0;i<BOSS_BULLET_MAX;i++){
                if(boss_shot.bullet[i].flag>0){

                }
        }
}
bakuha.cpp

コード:

#include "DxLib.h"
#include "struct.h"
#include "GV.h"

extern struct effect_t effect[];
extern struct del_effect_t del_effect[];
//エフェクトの登録空き番号を探す
int search_effect(){
        for(int i=0;i<EFFECT_MAX;i++){
                if(effect[i].flag==0)
                        return i;
        }
        return -1;
}

//エフェクトを計算する
void calc_effect(){
        for(int i=0;i<EFFECT_MAX;i++){
                if(effect[i].flag>0){//エフェクトが登録されていたら
                        switch(effect[i].knd){//エフェクトの種類によって分岐
                                case 0://0番の処理
                                        effect[i].cnt++;
                                        effect[i].r+=0.08;//エフェクトの大きさを段々大きくする
                                        if(effect[i].cnt>10)//10カウント以上になったら
                                                effect[i].brt-=25;//明るさを少なくする
                                        if(effect[i].cnt>20)//20カウント以上になったら
                                                effect[i].flag=0;//消す
                                        break;
                                default:
                                        printfDx("effect設定エラー\n");
                                        break;
                        }
                }
        }
}

//消滅エフェクトの登録空き番号を探す
int search_del_effect(){
        for(int i=0;i<DEL_EFFECT_MAX;i++){
                if(del_effect[i].flag==0)
                        return i;
        }
        return -1;
}

//消滅エフェクトを登録する
void enter_del_effect(int s){
        int k=search_del_effect();
        if(k!=-1){
                del_effect[k].flag=1;//フラグを立てる
                del_effect[k].cnt=0;
                del_effect[k].col=enemey[s].back_col;//敵の背景色を消滅色に設定する
                del_effect[k].x=enemey[s].x;//敵の座標を消滅位置にセット
                del_effect[k].y=enemey[s].y;
        }
}

//消滅エフェクトを計算・エフェクトを登録する
void calc_del_effect(){
        int k;
        for(int i=0;i<DEL_EFFECT_MAX;i++){
                if(del_effect[i].flag>0){
                        if(del_effect[i].cnt%2==0){// 1/30秒ずつセット
                                if((k=search_effect())!=-1){//空き番号検索
                                        memset(&effect[k],0,sizeof(effect_t));//初期化
                                        effect[k].flag=1;//フラグを立てる
                                        effect[k].brt=255;//輝度を最大値に
                                        effect[k].ang=rang(PI);//角度をランダムに
                                        effect[k].col=del_effect[i].col;//色をセット
                                        effect[k].eff=1;//1は光エフェクト。光エフェクトにセットする
                                        effect[k].img=img_del_effect[effect[k].col];//消滅する画像をセット
                                        effect[k].knd=0;//エフェクトの種類は0番(消滅エフェクトは0とする)
                                        effect[k].x=del_effect[i].x;//座標をセット
                                        effect[k].y=del_effect[i].y;
                                }
                        }
                        if(del_effect[i].cnt>8){//カウンタが8より大きくなったら終了
                                del_effect[i].flag=0;
                        }
                        del_effect[i].cnt++;
                }
        }
}

void effect_main(){
        calc_del_effect();//消滅エフェクトの計算
        calc_effect();//エフェクトの計算
}
graph.cpp

コード:

#include "DxLib.h"
#include "GV.h"
#include "struct.h"
extern struct ch_t ch;
extern int img_ch[2][12];
extern struct enemey_t enemey[];
extern void graph_back_main();

 void graph_main();
 void   graph_back_main();
 void   graph_ch();
 void	graph_board();
 void   graph_enemy();
 void	graph_bullet();
 void	graph_cshot();
 void	graph_effect();

void graph_enemy(){
        int i;
        for(i=0;i<ENEMY_MAX;i++){
                if(enemey[i].flag==1){
                        DrawRotaGraphF(enemey[i].x+FIELD_X,enemey[i].y+FIELD_Y,1.0f,0.0f,img_enemy[0][enemey[i].img],TRUE);
                }
        }
}


//void graph_ch(){
//        DrawRotaGraphF(ch.x,ch.y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
//}
void graph_board(){
        DrawGraph(  0,  0,img_board[10],FALSE);
        DrawGraph(  0, 16,img_board[11],FALSE);
        DrawGraph(  0,464,img_board[12],FALSE);
        DrawGraph(416,  0,img_board[20],FALSE);
}

//弾丸の描画
void graph_bullet(){
        int i,j;
        SetDrawMode( DX_DRAWMODE_BILINEAR ) ;//線形補完描画
        for(i=0;i<SHOT_MAX;i++){//敵の弾幕数分ループ
                if(shot[i].flag>0){//弾幕データがオンなら
                        for(j=0;j<SHOT_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
                                if(shot[i].bullet[j].flag!=0){//弾データがオンなら
                                        if(shot[i].bullet[j].eff==1)
                                                SetDrawBlendMode( DX_BLENDMODE_ADD, 255) ;

                                        DrawRotaGraphF(
                                                shot[i].bullet[j].x+FIELD_X+dn.x, shot[i].bullet[j].y+FIELD_Y+dn.y,
                                                1.0, shot[i].bullet[j].angle+PI/2,
                                                img_bullet[shot[i].bullet[j].knd][shot[i].bullet[j].col],TRUE);

                                        if(shot[i].bullet[j].eff==1)
                                                SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
                                }
                        }
                }
        }
        //ボス
        if(boss_shot.flag>0){//弾幕データがオンなら
                for(j=0;j<BOSS_BULLET_MAX;j++){//その弾幕が持つ弾の最大数分ループ
                        if(boss_shot.bullet[j].flag!=0){//弾データがオンなら
                                if(boss_shot.bullet[j].eff==1)
                                        SetDrawBlendMode( DX_BLENDMODE_ADD, 255) ;

                                DrawRotaGraphF(
                                        boss_shot.bullet[j].x+FIELD_X+dn.x, boss_shot.bullet[j].y+FIELD_Y+dn.y,
                                        1.0, boss_shot.bullet[j].angle+PI/2,
                                        img_bullet[boss_shot.bullet[j].knd][boss_shot.bullet[j].col],TRUE);

                                if(boss_shot.bullet[j].eff==1)
                                        SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
                        }
                }
        }
        SetDrawMode(DX_DRAWMODE_NEAREST);//描画形式を戻す
}

void graph_cshot(){
        for(int i=0;i<CSHOT_MAX;i++){
                if(cshot[i].flag>0){
                        DrawRotaGraphF(cshot[i].x+FIELD_X,cshot[i].y+FIELD_Y,1,0,
                                       img_cshot[cshot[i].knd],TRUE);
                }
        }
}
void graph_effect(){
    for(int i=0;i<EFFECT_MAX;i++){
        if(effect[i].flag>0){
            if(effect[i].eff==1)//エフェクトが光エフェクトなら
                SetDrawBlendMode( DX_BLENDMODE_ADD, effect[i].brt) ;

            DrawRotaGraphF(effect[i].x+FIELD_X,effect[i].y+FIELD_Y,effect[i].r,effect[i].ang,effect[i].img,TRUE);

            if(effect[i].eff==1)
                SetDrawBlendMode( DX_BLENDMODE_NOBLEND, 0) ;
        }
    }
}

//自機描画
void graph_ch(){
        if(ch.mutekicnt%2==0)
                DrawRotaGraphF(ch.x+FIELD_X,ch.y+FIELD_Y,1.0f,0.0f,img_ch[0][ch.img],TRUE);
}

void graph_boss(){
        if(boss.flag==0)return;
        DrawRotaGraphF(boss.x+FIELD_X+dn.x,boss.y+FIELD_Y+dn.y,1.0f,0.0f,img_dot_riria[0],TRUE);
}

void graph_develop(){
        DrawFormatString(0,0,GetColor(255,255,255),"%d",stage_count);
}
void graph_main(){
        if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
        graph_back_main();//背景描画メイン
        graph_effect(0);//敵が死ぬエフェクト
        if(bright_set.brt!=255)SetDrawBright(255,255,255);
        graph_effect(4);//喰らいボムのエフェクト
        if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
        graph_boss();
        graph_enemy();//敵の描画
        graph_cshot();//自機ショットの描画
        if(bright_set.brt!=255)SetDrawBright(255,255,255);
        graph_ch();//自機の描画
        if(bright_set.brt!=255)SetDrawBright(bright_set.brt,bright_set.brt,bright_set.brt);
        graph_bullet();//弾の描画
        if(bright_set.brt!=255)SetDrawBright(255,255,255);
        graph_effect(1);//ボムのエフェクト
        graph_effect(2);//ボム線のエフェクト
        graph_effect(3);//ボムキャラのエフェクト
        graph_board();//ボードの描画
        graph_develop();
}
fanc.cpp

コード:

#include "DxLib.h"
#include "GV.h"
extern void boss_shot_bulletH000();

void (*boss_shot_bullet[DANMAKU_MAX])() =
{
        boss_shot_bulletH000,
};
char.cpp

コード:

# include "DxLib.h"
#include "GV.h"
#include "struct.h"

extern struct ch_t ch;
extern struct configpad_t configpad;

void calc_ch(){
        if(ch.cnt==0 && ch.flag==2){//今の瞬間死んだら
                ch.x=FIELD_MAX_X/2;//座標セット
                ch.y=FIELD_MAX_Y+30;
                ch.mutekicnt++;//無敵状態へ
        }
        if(ch.flag==2){//死んで浮上中なら
                unsigned int push=CheckStatePad(configpad.left)+CheckStatePad(configpad.right)
                        +CheckStatePad(configpad.up)+CheckStatePad(configpad.down);
                ch.y-=1.5;//キャラを上に上げる
                //1秒以上か、キャラがある程度上にいて、何かおされたら
                if(ch.cnt>60 || (ch.y<FIELD_MAX_Y-20 && push)){
                        ch.cnt=0;
                        ch.flag=0;//キャラステータスを元に戻す
                }
        }
        if(ch.mutekicnt>0){//無敵カウントが0じゃなければ
                ch.mutekicnt++;
                if(ch.mutekicnt>120)//2秒以上たったら
                        ch.mutekicnt=0;//戻す
        }

        ch.cnt++;//キャラクタカウントアップ
        ch.img=(ch.cnt%24)/6;//現在の画像決定
}

void ch_move(){//キャラクタの移動制御
        int i,sayu_flag=0,joge_flag=0;
        double x,y,mx,my,naname=1;
        double move_x[4]={-4.0,4.0,0,0},move_y[4]={0,0,4.0,-4.0};//{左,右,下,上}のスピード
        int inputpad[4];
        inputpad[0]=CheckStatePad(configpad.left); inputpad[1]=CheckStatePad(configpad.right);
        inputpad[2]=CheckStatePad(configpad.down); inputpad[3]=CheckStatePad(configpad.up);

        if(CheckStatePad(configpad.left)>0)//左キーが押されていたら
                ch.img+=4*2;//画像を左向きに
        else if(CheckStatePad(configpad.right)>0)//右キーが押されていたら
                ch.img+=4*1;//画像を右向きに

        for(i=0;i<2;i++)//左右分
                if(inputpad[i]>0)//左右どちらかの入力があれば
                        sayu_flag=1;//左右入力フラグを立てる
        for(i=2;i<4;i++)//上下分
                if(inputpad[i]>0)//上下どちらかの入力があれば
                        joge_flag=1;//上下入力フラグを立てる
        if(sayu_flag==1 && joge_flag==1)//左右、上下両方の入力があれば斜めだと言う事
                naname=sqrt(2.0);//移動スピードを1/ルート2に

        for(int i=0;i<4;i++){//4方向分ループ
                if(inputpad[i]>0){//i方向のキーボード、パッドどちらかの入力があれば
                        x=ch.x , y=ch.y;//今の座標をとりあえずx,yに格納
                        mx=move_x[i];   my=move_y[i];//移動分をmx,myに代入
                        if(CheckStatePad(configpad.slow)>0){//低速移動なら
                                mx=move_x[i]/3; my=move_y[i]/3;//移動スピードを1/3に
                        }
                        x+=mx/naname , y+=my/naname;//今の座標と移動分を足す
                        if(!(x<10 || x>FIELD_MAX_X-10 || y<5 || y>FIELD_MAX_Y-5)){//計算結果移動可能範囲内なら
                                ch.x=x , ch.y=y;//実際に移動させる
                        }
                }
        }
}
cshot.cpp

コード:

#include <math.h>
#include "DxLib.h"
#include "struct.h"
#include "GV.h"

extern struct ch_t ch;
extern struct configpad_t configpad;
extern struct cshot_t cshot[];
int cshot0num[2]  ={2,4};
int cshot0pos_x[4]={-10, 10,-30, 30};
int cshot0pos_y[4]={-30,-30,-10,-10};

//自機ショットの登録可能番号を返す
int search_cshot(){
        for(int i=0;i<CSHOT_MAX;i++){
                if(cshot[i].flag==0)
                        return i;
        }
        return -1;
}

//通常ショット登録
void ch0_shot_pattern(){
        int k;
        for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
                if((k=search_cshot())!=-1){
                        cshot[k].flag=1;
                        cshot[k].cnt=0;
                        cshot[k].angle=-PI/2;
                        cshot[k].spd=20;
                        cshot[k].x=ch.x+cshot0pos_x[i];
                        cshot[k].y=ch.y+cshot0pos_y[i];
                        cshot[k].power=23;
                        cshot[k].knd=0;
                }
        }
        se_flag[2]=1;//発射音オン
}

//低速通常ショット登録
void ch1_shot_pattern(){
        int k;
        for(int i=0;i<cshot0num[ch.power<200?0:1];i++){
                if((k=search_cshot())!=-1){
                        cshot[k].flag=1;
                        cshot[k].cnt=0;
                        cshot[k].angle=-PI/2;
                        cshot[k].spd=20;
                        cshot[k].x=ch.x+cshot0pos_x[i]/3;//低速中なら位置を中心側へ
                        cshot[k].y=ch.y+cshot0pos_y[i]/2;
                        cshot[k].power=23;
                        cshot[k].knd=0;
                }
        }
        se_flag[2]=1;
}

//ショット登録部
void enter_shot(){
        //ショットボタンが押されていたら
        if(CheckStatePad(configpad.shot)>0){
                ch.shot_cnt++;
                if(ch.shot_cnt%3==0){//3カウントに1回
                        if(CheckStatePad(configpad.slow)>0)//低速移動中なら
                                ch1_shot_pattern();
                        else
                                ch0_shot_pattern();
                }
        }
        else
                ch.shot_cnt=0;
}

//ショットの移動計算
void calc_cshot(){
        for(int i=0;i<CSHOT_MAX;i++){
                if(cshot[i].flag==1){
                        int dranx=cshot[i].spd+11/2,drany=cshot[i].spd+55/2;
                        cshot[i].x+=cos(cshot[i].angle)*cshot[i].spd;
                        cshot[i].y+=sin(cshot[i].angle)*cshot[i].spd;
                        cshot[i].cnt++;
                        if(cshot[i].x<-dranx || cshot[i].x>FIELD_MAX_X+dranx ||
                                cshot[i].y<-drany || cshot[i].y>FIELD_MAX_Y+drany)//画面から外れたら
                                cshot[i].flag=0;
                }
        }
}

//キャラクタショットに関する関数
void cshot_main(){
        calc_cshot();//ショットの軌道計算
        enter_shot();//ショット登録
}
define.h

コード:

#define FIELD_MAX_X 384
#define FIELD_MAX_Y 448

#define FIELD_X 32
#define FIELD_Y 16

#define PAD_MAX 16
#define ENEMY_MAX 30
#define ENEMY_ORDER_MAX 500
//円周率
#define PI 3.1415926535898
#define PI2 (PI*2)
#define SHOT_BULLET_MAX 1000

//一度に画面に表示できる敵の弾幕の最大数
#define SHOT_MAX 30

//ショットの種類の最大数
#define SHOT_KND_MAX 18

//効果音の種類の最大数
#define SE_MAX 100

//敵の行動パターンの最大数
#define ENEMY_PATTERN_MAX 11
//自機ショットの登録最大数
#define CSHOT_MAX 200

//エフェクト登録最大数
#define EFFECT_MAX 100
//消滅エフェクト登録最大数
#define DEL_EFFECT_MAX 30

//ボスの定位置
#define BOSS_POS_X (FIELD_MAX_X/2)
#define BOSS_POS_Y 100.0
//ボスが持つ弾の最大数
#define BOSS_BULLET_MAX 3000
//弾幕最大数
#define DANMAKU_MAX 50
enemy.cpp

コード:

#include "DxLib.h"
#include "struct.h"
#include "GV.h"
extern struct enemey_t enemey[];
extern struct enemy_order_t enemy_order[];

#define ENEMY_PATTERN_MAX 11

extern void enemy_pattern0(int);extern void enemy_pattern1(int);extern void enemy_pattern2(int);
extern void enemy_pattern3(int);extern void enemy_pattern4(int);extern void enemy_pattern5(int);
extern void enemy_pattern6(int);extern void enemy_pattern7(int);extern void enemy_pattern8(int);
extern void enemy_pattern9(int);extern void enemy_pattern10(int);

void (*enemy_pattern[ENEMY_PATTERN_MAX])(int) = {
    enemy_pattern0,    enemy_pattern1,    enemy_pattern2,    enemy_pattern3,    enemy_pattern4,
    enemy_pattern5,    enemy_pattern6,    enemy_pattern7,    enemy_pattern8,    enemy_pattern9,
    enemy_pattern10,
};

//空いている敵番号を検索
int enemy_num_search(){
    for(int i=0;i<ENEMY_MAX;i++){//フラグのたって無いenemyを探す
        if(enemey[i].flag==0){
            return i;//使用可能番号を返す
        }
    }
    return -1;//全部埋まっていたらエラーを返す
}

//敵情報を登録
void enemy_enter(){//敵の行動を登録・制御する関数
    int i,j,t;
	if(boss.flag!=0)return;
    for(t=0;t<ENEMY_ORDER_MAX;t++){
        if(enemy_order[t].cnt==stage_count){//現在の瞬間がオーダーの瞬間なら
            if((i=enemy_num_search())!=-1){
                enemey[i].flag   =1;//フラグ
                enemey[i].cnt    =0;//カウンタ
                enemey[i].pattern=enemy_order[t].pattern;//移動パターン
                enemey[i].muki   =1;//向き
                enemey[i].knd    =enemy_order[t].knd;//敵の種類
                enemey[i].x      =enemy_order[t].x;//座標
                enemey[i].y      =enemy_order[t].y;
                enemey[i].sp     =enemy_order[t].sp;//スピード
                enemey[i].bltime =enemy_order[t].bltime;//弾の発射時間
                enemey[i].blknd  =enemy_order[t].blknd;//弾幕の種類
                enemey[i].blknd2 =enemy_order[t].blknd2;//弾の種類
                enemey[i].col    =enemy_order[t].col;//色
                enemey[i].wait   =enemy_order[t].wait;//停滞時間
                enemey[i].hp     =enemy_order[t].hp;//体力
                enemey[i].hp_max =enemey[i].hp;//体力最大値
                enemey[i].vx     =0;//水平成分の速度
                enemey[i].vy     =0;//鉛直成分の速度
                enemey[i].ang    =0;//角度
				enemey[i].back_col=GetRand(4);
                for(j=0;j<6;j++)
                    enemey[i].item_n[j]=enemy_order[t].item_n[j];//落とすアイテム
            }
        }
    }
}
void enter_shot(int i){
        int j;
        for(j=0;j<SHOT_MAX;j++){//フラグのたって無いenemyを探す
                if(shot[j].flag==0){//未使用の弾幕データがあれば
                        memset(&shot[j],0,sizeof(shot_t));//初期化して登録
                        shot[j].flag=1;//フラグをたてる
                        shot[j].knd=enemey[i].blknd;//弾の種類
                        shot[j].num=i;//num=どの敵から発射されたものか。
                        shot[j].cnt=0;
                        return ;
                }
        }
}


//敵の行動制御
void enemy_act(){
    int i;
    for(i=0;i<ENEMY_MAX;i++){
        if(enemey[i].flag==1){//その敵のフラグがオンになってたら
            if(0<=enemey[i].pattern && enemey[i].pattern<ENEMY_PATTERN_MAX){
                enemy_pattern[enemey[i].pattern](i);
                enemey[i].x+=cos(enemey[i].ang)*enemey[i].sp;
                enemey[i].y+=sin(enemey[i].ang)*enemey[i].sp;
                enemey[i].x+=enemey[i].vx;
                enemey[i].y+=enemey[i].vy;
                enemey[i].cnt++;
                enemey[i].img=enemey[i].muki*3+(enemey[i].cnt%18)/6;
                //敵が画面から外れたら消す
                if(enemey[i].x<-20 || FIELD_MAX_X+20<enemey[i].x || enemey[i].y<-20 || FIELD_MAX_Y+20<enemey[i].y)
                    enemey[i].flag=0;
				  if(enemey[i].bltime==enemey[i].cnt)
                    enter_shot(i);

            }
            else
                printfDx("enemy[i].patternの%d値が不正です。",enemey[i].pattern);
        }
    }
}

//敵処理メイン
void enemy_main(){
    enemy_enter();
    enemy_act();
}
enemy_act_pattern.cpp

コード:

#include <math.h>
#include "DxLib.h"
#include "struct.h"
extern struct enemey_t enemey[];
//渡された-ang~angまでのランダムな角度を返す
double rang(double ang){
    return ( -ang + ang*2 * GetRand(10000)/10000.0 );
}

//移動パターン0
//下がってきて停滞して上がっていく
void enemy_pattern0(int i){
    int t=enemey[i].cnt;
    if(t==0)
        enemey[i].vy=3;//下がってくる
    if(t==40)
        enemey[i].vy=0;//止まる
    if(t==40+enemey[i].wait)//登録された時間だけ停滞して
        enemey[i].vy=-3;//上がっていく
}

//移動パターン1
//下がってきて停滞して左下に行く
void enemy_pattern1(int i){
    int t=enemey[i].cnt;
    if(t==0)
        enemey[i].vy=3;//下がってくる
    if(t==40)
        enemey[i].vy=0;//止まる
    if(t==40+enemey[i].wait){//登録された時間だけ停滞して
        enemey[i].vx=-1;//左へ
        enemey[i].vy=2;//下がっていく
        enemey[i].muki=0;//左向きセット
    }
}

//移動パターン2
//下がってきて停滞して右下に行く
void enemy_pattern2(int i){
    int t=enemey[i].cnt;
    if(t==0)
        enemey[i].vy=3;//下がってくる
    if(t==40)
        enemey[i].vy=0;//止まる
    if(t==40+enemey[i].wait){//登録された時間だけ停滞して
        enemey[i].vx=1;//右へ
        enemey[i].vy=2;//下がっていく
        enemey[i].muki=2;//右向きセット
    }
}

//行動パターン3
//すばやく降りてきて左へ
void enemy_pattern3(int i){
    int t=enemey[i].cnt;
    if(t==0)
        enemey[i].vy=5;//下がってくる
    if(t==30){//途中で左向きに
        enemey[i].muki=0;
    }
    if(t<100){
        enemey[i].vx-=5/100.0;//左向き加速
        enemey[i].vy-=5/100.0;//減速
    }
}

//行動パターン4
//すばやく降りてきて右へ
void enemy_pattern4(int i){
    int t=enemey[i].cnt;
    if(t==0)
        enemey[i].vy=5;//下がってくる
    if(t==30){//途中で右向きに
        enemey[i].muki=2;
    }
    if(t<100){
        enemey[i].vx+=5/100.0;//右向き加速
        enemey[i].vy-=5/100.0;//減速
    }
}

//行動パターン5
//斜め左下へ
void enemy_pattern5(int i){
    int t=enemey[i].cnt;
    if(t==0){
        enemey[i].vx-=1;
        enemey[i].vy=2;
        enemey[i].muki=0;
    }
}

//行動パターン6
//斜め右下へ
void enemy_pattern6(int i){
    int t=enemey[i].cnt;
    if(t==0){
        enemey[i].vx+=1;
        enemey[i].vy=2;
        enemey[i].muki=2;
    }
fanction.h

コード:

#include "DxLib.h"
//graph.cpp
        //描画メイン
        GLOBAL void graph_main();

//key.cpp
        //現在のキー入力処理を行う
        GLOBAL int GetHitKeyStateAll_2();
        //受け取ったキー番号の現在の入力状態を返す
        GLOBAL int CheckStateKey(unsigned char Handle);

//laod.cpp
        //データのロード
        GLOBAL void load();
		GLOBAL void first_ini();
		GLOBAL void calc_ch();
		GLOBAL void GetHitPadStateAll();
		GLOBAL void ch_move();
        GLOBAL int CheckStatePad(unsigned int Handle);
		GLOBAL void enemy_main();
        GLOBAL void ini();
		GLOBAL void load_story();
//shot.cpp
        GLOBAL double shotatan2(int n);
        GLOBAL int shot_search(int n);
        GLOBAL void shot_main();
		GLOBAL double rang(double);

//music.cpp
        GLOBAL void music_ini();
        GLOBAL void music_play();
        GLOBAL void cshot_main();

//out.cpp
        GLOBAL void out_main();
//effect.cpp
        GLOBAL void effect_main();
//boss_shot.cpp
        GLOBAL void boss_shot_main();
GV.h

コード:

#include "DxLib.h"
#include "define.h"
#ifdef GLOBAL_INSTANCE
#define GLOBAL
#else
#define GLOBAL extern 
#endif
#include "function.h"           //関数宣言
#include "math.h"

//画像用変数宣言部
GLOBAL int img_ch[2][12];       //キャラクタ画像9枚分 X2(変身用)
GLOBAL int img_bullet[10][10]; //弾の画像
GLOBAL int img_cshot[2];        //自機ショット用画像
GLOBAL int img_del_effect[5];
GLOBAL int img_back[10];//背景用画像
GLOBAL int func_state,stage_count,count;
GLOBAL int img_eff_bom[5];      //ボムのエフェクト画像
GLOBAL int img_dot_riria[8];//リリアのドット絵画像
//構造体変数宣言部
extern struct  ch_t ch;                 //キャラクタデータ宣言
extern struct configpad_t configpad;
extern struct cshot_t cshot[CSHOT_MAX];//自機ショット登録用変数
GLOBAL int img_board[40];
GLOBAL void calc_ch();
GLOBAL void boss_shot_bulletH000();
GLOBAL int img_enemy[3][9];//敵画像9枚分 X3体分
extern struct effect_t effect[EFFECT_MAX];//エフェクト
extern struct enemey_t enemey[ENEMY_MAX];
extern struct enemy_order_t enemy_order[ENEMY_ORDER_MAX];//敵の出現情報
extern struct del_effect_t del_effect[DEL_EFFECT_MAX];//消滅エフェクト
extern struct bullet_info_t bullet_info[10];//弾情報
extern struct bom_t bom;               //ボム
extern struct bright_set_t bright_set; //描画の輝度
extern struct dn_t dn;                 //ドンと揺れる
extern struct boss_shot_t boss_shot;//ボスショット情報
extern struct boss_t boss;          //ボス情報
extern struct shot_t shot[SHOT_MAX];//ショット情報
//音楽ファイル用変数部
GLOBAL int sound_se[SE_MAX];
GLOBAL int se_flag[SE_MAX];    //サウンドフラグ
haikei.cpp

コード:

#include "DxLib.h"
#include "GV.h"

void graph_back00(){
        SetDrawArea( 32 , 16 , 416 , 464 ) ;//描画可能エリアを設定
        DrawGraph(FIELD_X,count%700+FIELD_Y-700,img_back[0],FALSE);
        DrawGraph(FIELD_X,count%700+FIELD_Y    ,img_back[0],FALSE);
        SetDrawArea( 0, 0, 640, 480);//エリアを戻す
}

void graph_back_main(){
        graph_back00();
}
ini.cpp

コード:

#include "DxLib.h"
#include "define.h"
#include "struct.h"
#include "GV.h"

 struct ch_t ch;
 struct pad_t pad;
 struct configpad_t configpad;
 struct enemey_t enemey[];
 struct enemy_order_t enemy_order[];
 struct shot_t shot[];
 struct cshot_t cshot[];
 struct effect_t effect[];
 struct del_effect_t del_effect[];
 struct bullet_info_t bullet_info[];
 struct boss_shot_t boss_shot;//ボスショット情報
 struct boss_t boss;          //ボス情報
 void input_bullet_info(bullet_info_t *binfo,int size_x,int size_y,int col_num,double range);
void first_ini(){
	//一番最初の初期化
        ch.x=FIELD_MAX_X/2;
        ch.y=FIELD_MAX_Y*3/4;
		configpad.down=0;
        configpad.left=1;
        configpad.right=2;
        configpad.up=3;
        configpad.bom=4;
        configpad.shot=5;
        configpad.slow=11;
        configpad.start=13;
        configpad.change=6;
	    //例:弾0は76x76ピクセルで、5色あり、当たり範囲17ピクセル
        input_bullet_info(&bullet_info[0],76, 76, 5,17.0);
        input_bullet_info(&bullet_info[1],22, 22, 6, 4.0);
        input_bullet_info(&bullet_info[2], 5,120,10, 2.5);
        input_bullet_info(&bullet_info[3],19, 34, 5, 2.0);
        input_bullet_info(&bullet_info[4],38, 38,10, 2.0);
        input_bullet_info(&bullet_info[5],14, 16, 3, 3.5);
        input_bullet_info(&bullet_info[6],14, 18, 3, 2.0);
        input_bullet_info(&bullet_info[7],16, 16, 9, 2.5);
        input_bullet_info(&bullet_info[8],12, 18,10, 1.5);
        input_bullet_info(&bullet_info[9],13, 19, 3, 2.0);

}
void ini(){
        stage_count=1;
        memset(&ch,0,sizeof(ch_t));
        memset(enemey,0,sizeof(enemey_t)*ENEMY_MAX);
        memset(enemy_order,0,sizeof(enemy_order_t)*ENEMY_ORDER_MAX);
        memset(shot,0,sizeof(shot_t)*SHOT_MAX);
        memset(cshot,0,sizeof(cshot_t)*CSHOT_MAX);
        memset(effect,0,sizeof(effect_t)*EFFECT_MAX);
        memset(del_effect,0,sizeof(del_effect_t)*DEL_EFFECT_MAX);
        memset(&bom,0,sizeof(bom_t));
        memset(&bright_set,0,sizeof(bright_set_t));
        memset(&dn,0,sizeof(dn_t));
        memset(&boss,0,sizeof(boss_t));

        ch.x=FIELD_MAX_X/2;
        ch.y=FIELD_MAX_Y*3/4;
        ch.power=500;
        boss.appear_count[0]=100;
        for(int i=0;i<DANMAKU_MAX;i++)
                boss.set_hp[i]=5000;
        bright_set.brt=255;
}
//渡された情報を構造体に入れる関数
void input_bullet_info(bullet_info_t *binfo,int size_x,int size_y,int col_num,double range){
        binfo->size_x =size_x;  binfo->size_y =size_y;
        binfo->col_num=col_num; binfo->range  =range;
}
load.cpp

コード:

#include "DxLib.h"
#include "struct.h"
#include "GV.h"
extern int img_ch[2][12];
extern struct enemy_order_t enemy_order[];
void load(){
        img_board[10] = LoadGraph("img/board/10.png");
        img_board[11] = LoadGraph("img/board/11.png");
        img_board[12] = LoadGraph("img/board/12.png");
        img_board[20] = LoadGraph("img/board/20.png");
		img_back[0] = LoadGraph("img/back/0/back0.png");
		img_eff_bom[0] = LoadGraph( "img/effect/bom0.png" );
        img_eff_bom[1] = LoadGraph( "img/effect/bom1.png" );
        img_eff_bom[2] = LoadGraph( "img/char/body.png" );
        img_eff_bom[3] = LoadGraph( "img/bullet/bom_title0.png" );
        LoadDivGraph( "img/char/0.png" , 12 , 4 , 3 , 73 , 73 , img_ch[0] ) ;
		LoadDivGraph( "img/enemy/0.png" , 9 , 3 , 3 , 32 , 32 , img_enemy[0] ) ;
     //弾画像のファイルを読み込む
        LoadDivGraph( "img/bullet/b0.png" , 5 , 5 , 1 , 76 , 76 , img_bullet[0] ) ;
        LoadDivGraph( "img/bullet/b1.png" , 6 , 6 , 1 , 22 , 22 , img_bullet[1] ) ;
        LoadDivGraph( "img/bullet/b2.png" , 10 , 10 , 1 , 5 , 120 , img_bullet[2] ) ;
        LoadDivGraph( "img/bullet/b3.png" , 5 , 5 , 1 , 19 , 34 , img_bullet[3] ) ;
        LoadDivGraph( "img/bullet/b4.png" , 10 , 10 , 1 , 38 , 38 , img_bullet[4]  ) ;
        LoadDivGraph( "img/bullet/b5.png" , 3 , 3 , 1 , 14 , 16 , img_bullet[5] ) ;
        LoadDivGraph( "img/bullet/b6.png" , 3 , 3 , 1 , 14 , 18 , img_bullet[6] ) ;
        LoadDivGraph( "img/bullet/b7.png" , 9 , 9 , 1 , 16 , 16 , img_bullet[7] ) ;
        LoadDivGraph( "img/bullet/b8.png" , 10 , 10 , 1 , 12 , 18 ,img_bullet[8] ) ;
        LoadDivGraph( "img/bullet/b9.png" , 3 , 3 , 1 , 13 , 19 , img_bullet[9] ) ;
		LoadDivGraph( "img/enemy/hit_effect.png" , 5 , 5 , 1 , 140 , 140 , img_del_effect ) ;
		LoadDivGraph( "img/char/riria.png" , 8 , 8 , 1 , 100 , 100 , img_dot_riria ) ;
		img_cshot[0]=LoadGraph("img/char/bl_00.png");
        img_cshot[1]=LoadGraph("img/char/bl_01.png");
        //敵のショット音を読み込む
        sound_se[0]=LoadSoundMem("se/enemy_shot.wav");
		sound_se[2]=LoadSoundMem("se/cshot.wav");
		sound_se[1]=LoadSoundMem("se/enemy_death.wav");
        sound_se[2]=LoadSoundMem("se/cshot.wav");
        sound_se[8]=LoadSoundMem("se/hit.wav");
		sound_se[3]=LoadSoundMem("se/char_death.wav");//自機死に音
		sound_se[14]=LoadSoundMem("se/bom0.wav");
        sound_se[15]=LoadSoundMem("se/bom1.wav");
        ChangeVolumeSoundMem( 80, sound_se[3] ) ;
        ChangeVolumeSoundMem( 50, sound_se[0] ) ;//各素材の再生ボリュームを設定
        ChangeVolumeSoundMem(128, sound_se[1] ) ;
        ChangeVolumeSoundMem(128, sound_se[2] ) ;
        ChangeVolumeSoundMem( 80, sound_se[8] ) ;



}

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

        fp = FileRead_open(fname);//ファイル読み込み
        if(fp == NULL){
                printfDx("read error\n");
                return;
        }
        for(i=0;i<2;i++)//最初の2行読み飛ばす
                while(FileRead_getc(fp)!='\n');

        n=0 , num=0;
        while(1){
                for(i=0;i<64;i++){
                        inputc[i]=input[i]=FileRead_getc(fp);//1文字取得する
                        if(inputc[i]=='/'){//スラッシュがあれば
                                while(FileRead_getc(fp)!='\n');//改行までループ
                                i=-1;//カウンタを最初に戻して
                                continue;
                        }
                        if(input[i]==',' || input[i]=='\n'){//カンマか改行なら
                                inputc[i]='\0';//そこまでを文字列とし
                                break;
                        }
                        if(input[i]==EOF){//ファイルの終わりなら
                                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);
}
graph.cppの119,121,131,132,133の(0),(1),(2),(3),(4)のところで赤線で引数が多すぎますとでます。
これは何が原因なのでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 引数が多すぎますとでます。

#2

投稿記事 by softya(ソフト屋) » 10年前

void graph_effect();と定義しているに引数が有る呼び出しをしているからエラーに成っていますね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

isyy
記事: 19
登録日時: 10年前
住所: 北海道

Re: 引数が多すぎますとでます。

#3

投稿記事 by isyy » 10年前

すいません、引数がある呼び出しとはどの辺の部分のことですか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 引数が多すぎますとでます。

#4

投稿記事 by softya(ソフト屋) » 10年前

isyy さんが書きました:すいません、引数がある呼び出しとはどの辺の部分のことですか?
エラーの出ているgraph.cppの119,121,131,132,133ですね。
void graph_effect()が関数の定義です。引数なし戻り値なしです。
例えば119行の呼び出しは
graph_effect(0);//敵が死ぬエフェクト
で引数0が書いてあります。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

isyy
記事: 19
登録日時: 10年前
住所: 北海道

Re: 引数が多すぎますとでます。

#5

投稿記事 by isyy » 10年前

ありがとうございました。おかげで、エラーが取れました

閉鎖

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