!!!現在状況 現在、弾がちゃんと消える動作と、ショットガンでの複数弾を考え中 !!!bullet.h 8< #include "player_chara.h" #include "enemy.h" #include #pragma once #define BULLET_MAX 100 //弾の最大数(仮) //弾 typedef struct { //弾が発射されたかどうかのフラグ0ならオフ、1ならオン int flag; //x座標 double x; //y座標 double y; //発射された弾が自機のものか敵のものか判別するためのフラグ自機:1 敵:0 int player_or_enemy; //x方向ベクトル 0,1,-1 int dx; //y方向ベクトル 0,1,-1 int dy; //消滅制限時間(保留中) // clock_t extinct_time; //弾が進む回数 int reach; double r; int len; } bullet; //主人公の弾の生成 メイン関数で宣言される弾配列を操作 void bullet_new_player(void); //敵の弾の生成 メイン関数で宣言される弾配列を操作,敵番号と弾の方向を受け取る void bullet_new_enemy(int num, double dx, double dy); //弾の消滅 消す弾の配列番号 void bullet_extinct(int num); //弾の移動 void bullet_move(void); >8 !!!bullet.c 8< #include "progress.h" #include #include //bullet shift value const static double BSV = 10; //max bullt time //const static double MBT = 5; /* 自機の弾を生成する関数 */ void bullet_new_player(void) { if(Player.weapon != 3)//ショットガンでない { int i; for(i=0; 1 ; i++) { if(Bullet[i].flag == 1) continue; else if(Bullet[i].flag == 0) { Bullet[i].flag = 1; Bullet[i].x = Player.x; Bullet[i].y = Player.y; switch (Player.vector) { //自機のvectorについて左が1、下が2、右が3、上が4 case 1 : //左 Bullet[i].dx = -BSV; Bullet[i].dy = 0; break; case 2: //下 Bullet[i].dx = 0; Bullet[i].dy = BSV; break; case 3: //右 Bullet[i].dx = BSV; Bullet[i].dy = 0; break; case 4: //上 Bullet[i].dx = 0; Bullet[i].dy = -BSV; break; default: break; } Bullet[i].player_or_enemy = 1; //Bullet[i].extinct_time = clock(); switch (Player.weapon) { case 1 : //ハンドガン Bullet[i].reach = 100; Bullet[i].r = 10; break; case 2 : //マシンガン Bullet[i].reach = 70; Bullet[i].r = 10; break; } if(Bullet[0].len == i) Bullet[0].len = i+1; break; } } } } /* 敵の弾を生成する関数 */ void bullet_new_enemy(int num, double dx, double dy) { int i; double length;//斜辺の長さ for(i=0; 1 ; i++){ if(Bullet[i].flag == 1) continue; else if(Bullet[i].flag == 0){ Bullet[i].flag = 1; Bullet[i].x = Enemy[EreaNum][num].x; Bullet[i].y = Enemy[EreaNum][num].y; } length = sqrt( (dx * dx + dy * dy) ); //弾の方向を計算 Bullet[i].dx = BSV * dx / length; Bullet[i].dy = BSV * dy / length; Bullet[i].player_or_enemy = 0; //Bullet[i].extinct_time = clock(); Bullet[i].reach = 100; Bullet[i].r = 10; if(Bullet[0].len == i) Bullet[0].len = i+1; break; } } /* 弾を消す操作をする関数 */ void bullet_extinct(int num) { Bullet[num].flag = 0; if(Bullet[0].len == num){ //弾配列の長さの再設定 int i; for(i=num; Bullet[i].flag==0 && i>=0; i--); Bullet[0].len = i+1; } } /* 弾の移動の操作をする関数 予定:メインで作られる予定の配列を受け取り、flagがオンのものに関して移動の操作をする */ void bullet_move(void) { int i; for(i=0; i < Bullet[0].len; i++) { if(Bullet[i].flag == 1) { Bullet[i].x += Bullet[i].dx; Bullet[i].y += Bullet[i].dy; Bullet[i].reach -= 1; } } } >8