(* 自機の情報を定義 *)
xp=1.5+Random[Real,{-3,3}];
yp=-18+Random[Real,{-3,3}];
axp=0;
ayp=0.2;

(* 敵情報を定義 *)
xe=0;
ye=0;

(* 魔法陣グルグル回転速度 *)
a=15.5Cos[t/6];

(* 魔法陣グルグル *)
x0=0;
y0=0;
x1=3Cos[a]+x0;
y1=3Sin[a]+y0;
x2=3Cos[a+(2/3*Pi)]+x0;
y2=3Sin[a+(2/3*Pi)]+y0;
x3=3Cos[a+(4/3*Pi)]+x0;
y3=3Sin[a+(4/3*Pi)]+y0;
x11=3Cos[a+(1/3*Pi)]+x0;
y11=3Sin[a+(1/3*Pi)]+y0;
x12=3Cos[a+Pi]+x0;
y12=3Sin[a+Pi]+y0;
x13=3Cos[a+(5/3*Pi)]+x0;
y13=3Sin[a+(5/3*Pi)]+y0;
waku1=Circle[{x0,y0},3];
waku3=Circle[{x0,y0},3.5];
lin1=Line[{{x1,y1},{x2,y2},{x3,y3},{x1,y1}}];
lin3=Line[{{x11,y11},{x12,y12},{x13,y13},{x11,y11}}];

(* 弾リスト*)
xx={};ax={};yy={};ay={};
n=0;

(* 弾速度決定変数 *)
pow=4.0;
gifs={};

(* 敵弾発射関数fire *)
fire[x_,y_]:={
AppendTo[xx,x];
AppendTo[ax,(x-x0)/pow];
AppendTo[yy,y];
AppendTo[ay,(y-y0)/pow];
n++;
};

(* メインル-プ *)
Do[
m=3;
If[xp≥xe,axp=-0.5,axp=0.5];
If[yp≥ye,ayp=-0.4,ayp=0.4];

(* 各弾の位置座標を修正 *)
For[i=1,i≤n,i++,
Part[xx,i] += Part[ax,i];
Part[yy,i] += Part[ay,i];

(* 敵弾が画面外に出たら消す *)
If[(Part[xx,i]<-25)||(Part[xx,i]>25)||(Part[yy,i]<-33)||(Part[yy,i]>33),{
xx=Delete[xx,i];
ax=Delete[ax,i];
yy=Delete[yy,i];
ay=Delete[ay,i];
n--;
i--;
}
]
(* 自機と一番近い敵弾を探して自機移動量を決定 *)
If[m>Sqrt[(xp-Part[xx,i])^2+(yp-Part[yy,i])^2],{
m=Sqrt[(xp-Part[xx,i])^2+(yp-Part[yy,i])^2];
axp=(xp-Part[xx,i])/m;
ayp=(yp-Part[yy,i])/m;
}
]
]


(* 新たに発射される弾をリストに追加 *)
fire[x1,y1];
fire[x2,y2];
fire[x3,y3];
fire[x11,y11];
fire[x12,y12];
fire[x13,y13];

(* 弾のグラフィックリストを再構築 *)
dots={PointSize[0.025]};
For[i=1,i≤n,i++,AppendTo[dots,Point[{Part[xx,i],Part[yy,i]}]];
]

(* 自機移動 *)
xp += axp;
yp+= ayp;
If[xp>22.5,xp=22.5];
If[xp<-22.5,xp=-22.5];
If[yp>30.5,yp=30.5];
If[yp<-30.5,yp=-30.5];
player=Polygon[Table[N[{Sin[2n Pi/3]+xp,Cos[2n Pi/3]+yp}],{n,0,2}]];

(* 敵ボス描画 *)
enemy=Polygon[Table[N[{2Cos[4n Pi/5+(t+Pi/2)]+xe,2Sin[4n Pi/5+(t+Pi/2)]+ye}],{n,0,5}]];

(* 画面描画 *)

gifele=Graphics[{
{RGBColor[0.25,0.85,0.25],player},
{RGBColor[Abs[Cos[t]],Abs[Sin[t]],Abs[Cos[t+Pi/2]]],enemy},
{RGBColor[0.2,0.45,0.95],waku1},
{RGBColor[0.2,0.45,0.95],waku3},{RGBColor[0.3,0.55,0.95],lin1},
{RGBColor[0.3,0.55,0.95],lin3},
{RGBColor[0.3,0.55,0.95],dots}
(*,
Text[StyleForm["偽・波と粒の境界 in Mathematica",FontSize->10],{0,30}]*)(* 東方風に見えないスペカ表示 *)
},
{PlotRange->{{-24,24},{-32,32}},AspectRatio-> Automatic,
Background->RGBColor[0,0,0]
}
];

AppendTo[gifs,gifele];,
{t,0,24Pi,Pi/20}
];
(*Export["haryu615.gif",gifs];*)

Needs["Graphics`Animation`"];
ShowAnimation[gifs]