適当にいじってたら出来た弾幕

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

適当にいじってたら出来た弾幕

#1

投稿記事 by でんすけ » 16年前

void shot_bullet_H005( int n )
{
	int t = shot[n].cnt;
	int k;

	// 角度計算
	double angle1 = 5.0 + PI / 90;
	double angle2 = 5.0 + PI / 180;
	
	// 720カウント中1カウントに1回
	if( t >= 0 && t < 720 && t%1 == 0 )
	{
		// 敵が倒されていなくて、探した登録可能な弾番号が有効なら
		if( shot[n].flag != 2 && ( k = shot_search( n ) ) != -1 )
		{
			shot[n].bullet[k].knd	= 2;							// 弾の種類
			shot[n].bullet[k].angle	= angle1 * t;					        // 角度
			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	= 5;							// 色
			shot[n].bullet[k].cnt	= 0;							// カウンタ
			shot[n].bullet[k].spd	= 2;							// スピード
		}

		if( shot[n].flag != 2 && ( k = shot_search( n ) ) != -1 )
		{
			shot[n].bullet[k].knd	= 2;							// 弾の種類
			shot[n].bullet[k].angle	= angle2 * t;					        // 角度
			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	= 6;							// 色
			shot[n].bullet[k].cnt	= 0;							// カウンタ
			shot[n].bullet[k].spd	= 2;							// スピード
		}
		se_flag[0]				= 1;						// 弾の発射音フラグを立てる
	}
}

Dixq (管理人)

Re:適当にいじってたら出来た弾幕

#2

投稿記事 by Dixq (管理人) » 16年前

キレイですね^^
弾幕って綿密に考えて実装するのもいいですけど、
案外適当にあれこれ値をいじってみて出来てしまう弾幕もあるんですよね。

私も龍神録を作っている時計算式を間違えてしまった事があって、実行してみたら予想していたものよりいいものが出来たってことがありました^^;
弾幕は作っていると楽しいですよね☆

でんすけ

Re:適当にいじってたら出来た弾幕

#3

投稿記事 by でんすけ » 16年前

いろいろイジって遊ばせてもらってます^^
やっぱり弾幕は楽しいですw

situmon

Re:適当にいじってたら出来た弾幕

#4

投稿記事 by situmon » 16年前

わからなくてあきらめていた東方の弾幕が、
ある日突然、ぱっとひらめいて、
やってみたらその弾幕に!!ってときがありそのときは楽しかったです。
製作(!?)がんばってください。

でんすけ

Re:適当にいじってたら出来た弾幕

#5

投稿記事 by でんすけ » 16年前

situmonさん。
「マウスを使ったショット 続き」ではお世話になりましたw

ひよこ

Re:適当にいじってたら出来た弾幕

#6

投稿記事 by ひよこ » 16年前

実行してみたら、とってもきれいでした。
偶然できた弾幕って自分の考えを超えてきれいです。

でんすけさん
>>この弾幕を改造?したいです。

でんすけ

Re:適当にいじってたら出来た弾幕

#7

投稿記事 by でんすけ » 16年前

どうぞどうぞw
いいの出来たら教えてくださいw

situmon

Re:適当にいじってたら出来た弾幕

#8

投稿記事 by situmon » 16年前

いえいえ、製作がんばってください。
あと今作っているゲームの難易度が以上に高くなりすぎて困ってるんですよね・・・笑
これでも通常弾幕です。

ひよこ

Re:適当にいじってたら出来た弾幕

#9

投稿記事 by ひよこ » 16年前

situmonさん
>>situmonさんのスナップショットの弾幕は
>>自分的にノーマルとしては難しそうに見えます。
>>自分ならスペルにします。

でんすけさん
>>いい弾幕になったのでスナップショット、置いておきます。(そんな変えてませんけど

Tatu

Re:適当にいじってたら出来た弾幕

#10

投稿記事 by Tatu » 16年前

弾幕を作ってみました。
最初の3つは魔法陣の動きに合わせて(count依存)弾をうちます。
難易度は普通・やさしい・難しいの順になっています。
4つめはボスの左右からレーザー型の弾をうちます。

//弾発射関数
void boss_bullet_on(int way,int knd,int col,double x,double y,double b_angle,double d_angle,double spd,int state,int till,int eff=0,int sflag=1){
	int i=0,k;
	for(i=0;i<way;i++){
		if((k=search_boss_shot())!=-1){
			boss_shot.bullet[k].knd   = knd;//弾の種類
			if(knd==7) boss_shot.bullet[k].kaiten=1;
			else boss_shot.bullet[k].kaiten=0;
			boss_shot.bullet[k].col   = col;//弾の色
			boss_shot.bullet[k].flag  = 1;
			boss_shot.bullet[k].cnt   = 0;
			boss_shot.bullet[k].x     = x;//座標
			boss_shot.bullet[k].y     = y;
			boss_shot.bullet[k].angle = b_angle+d_angle*(i - way/2);//角度:bが基準、dが間隔
			boss_shot.bullet[k].spd   = spd;//スピード
			boss_shot.bullet[k].state = state;//弾の状態
			boss_shot.bullet[k].till  = till;//弾が画面外に出ても消えない時間
			boss_shot.bullet[k].eff	  = eff;
			if(sflag==1)se_flag[0]=1;
	        }
	}
}

void boss_shot_bulletT073(){
	int cnt=count;
	int t1=boss_shot.cnt,t2=boss_shot.cnt%150;
	int i;
	int col1[5]={0,4,3,1,5};
	int col2[5]={1,2,3,0,6};
	double ang1,ang2,ang3;
	double length=70*((0.4+0.05*sin(PI2/360*(cnt%360)))*3);

	if(t1==0) boss.hp_max=30000,boss.hp=boss.hp_max;

	i=t2/30;
	ang1=t1*PI2/1200-PI/2;
	ang2=-PI/10+PI2/5*i+PI2*(cnt%580)/580;
	ang3=atan2(ch.y-(boss.y+length*sin(ang2)),ch.x-(boss.x+length*cos(ang2)))+PI+t2*PI2/30;

	boss.x=FMX/2+120*cos(ang1);
	boss.y=FMY/2+120*sin(ang1);
	boss_bullet_on(1,1,col1,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3,0,2,0,0,0,0);
	if(t1%60==0){
		for(i=0;i<5;i++){
			ang2=-PI/10+PI2/5*i+PI2*(cnt%580)/580;
			ang3=atan2(ch.y-(boss.y+length*sin(ang2)),ch.x-(boss.x+length*cos(ang2)));
			boss_bullet_on(1,7,col2,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3,0,3,0,0);
		}
	}
}

void boss_shot_bulletT074(){
	int cnt=count;
	int t1=boss_shot.cnt,t2=boss_shot.cnt%150;
	int i;
	int col1[5]={0,4,3,1,5};
	int col2[5]={1,2,3,0,6};
	double ang1,ang2,ang3;
	double length=70*((0.4+0.05*sin(PI2/360*(cnt%360)))*3);

	if(t1==0) boss.hp_max=25000,boss.hp=boss.hp_max;

	i=t2/30;
	ang1=t1*PI2/1200-PI/2;
	ang2=-PI/10+PI2/5*i+PI2*(cnt%580)/580;
	ang3=atan2(ch.y-(boss.y+length*sin(ang2)),ch.x-(boss.x+length*cos(ang2)))+PI+t2*PI2/30;

	boss.x=FMX/2+120*cos(ang1);
	boss.y=FMY/2+120*sin(ang1);
	if(t2%3==0) boss_bullet_on(1,1,col1,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3,0,2,0,0,0,0);
}

void boss_shot_bulletT075(){
	int cnt=count;
	int t1=boss_shot.cnt,t2=boss_shot.cnt%150;
	int i,j;
	int col1[5]={0,4,3,1,5};
	int col2[5]={1,2,3,0,6};
	double ang1,ang2,ang3;
	double length=70*((0.4+0.05*sin(PI2/360*(cnt%360)))*3);

	if(t1==0) boss.hp_max=30000,boss.hp=boss.hp_max;

	i=t2/30;
	ang1=t1*PI2/900-PI/2;
	ang2=-PI/10+PI2/5*i+PI2*(cnt%580)/580;
	ang3=atan2(ch.y-(boss.y+length*sin(ang2)),ch.x-(boss.x+length*cos(ang2)))+PI+t2*PI2/30;

	boss.x=FMX/2+120*cos(ang1);
	boss.y=FMY/2+120*sin(ang1);
	if(t1%2==1){
		boss_bullet_on(1,1,col1,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3,0,2,0,0,0,0);
		boss_bullet_on(1,1,col1,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3,0,2.5,0,0,0,0);
		boss_bullet_on(1,1,col1,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3,0,3,0,0,0,0);
	}
	if(t1%30==0){
		for(j=0;j<9;j++){
			boss_bullet_on(1,7,col2,boss.x+length*cos(ang2),boss.y+length*sin(ang2),ang3+PI*(7.0+rang(1.0))/6,0,2.5+rang(1),0,0);
		}
	}
}

void boss_shot_bulletT076(){
	int t=boss_shot.cnt;
	if(t%6==0){
		boss_bullet_on(5,2,6,boss.x-150,boss.y,t,PI2/5,5,0,0,1);
		boss_bullet_on(5,2,0,boss.x+150,boss.y,PI-t,PI2/5,5,0,0,1);
	}
}

situmon

Re:適当にいじってたら出来た弾幕

#11

投稿記事 by situmon » 16年前

4番目がきれいですね。
やってはいないのですが、
見ててそう思いました。
レーザー形は当たり判定をなくせば(長方形だから)きれいですよね!!

閉鎖

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