C2_Mathematica計算処理

8.3アニメーション

アニメーション（ゲーム）

DynamicModule[{
save,(*とめた玉の数*)
stFlag,(*玉が画面内に存在しているかどうか*)
endFlag,(*ゲームオーバーしたかどうか*)
appTime,(*玉が出現した時間*)
itFlag=0,
rightFlag,
leftFlag,
straightFlag,
rightFlag2,
leftFlag2,
straightFlag2,
straightFlag3
},
{
Button[left,leftFlag=1],
Button[strai,straightFlag=1],
Button[right,rightFlag=1],
Button[Reset,itFlag=0],
Animate[ 
(*アニメーションの初期化*)
If[itFlag ==0,
stFlag =0;
save=0;
endFlag =0;
appTime=0;
itFlag=1;
rightFlag=0;
leftFlag=0;
straightFlag=1;
rightFlag2=0;
leftFlag2=0;
straightFlag2=0;
straightFlag3=0;
];

(*玉の出現位置の設定*)
If[stFlag==0&&endFlag==0,
appTime=t;
bR=0.4;
bX=RandomReal[{1,9}];
bY=10;
ball = Circle[{bX,bY},bR];
stFlag=1;
 ];

(*玉の出現後の位置*)
If[stFlag==1&&endFlag==0,
bY=10-(t-appTime)+bR;
ball = Circle[{bX,bY},bR];
];

(*ボールの止める判定*)
If[leftFlag2==1&&bY-0.4<1.5&&1.5<=bX<=4&&endFlag==0,
stFlag=0;
save++;
ball=Null;
leftFlag2=0;
];

If[rightFlag2==1&&bY-0.4<1.5&&6<=bX<=8.5&&endFlag==0,
stFlag=0;
save++;
ball=Null;
rightFlag2=0;
];

If[straightFlag2==1&&bY-0.4<3.5&&3.7<bX<6.3&&endFlag==0,
stFlag=0;
save++;
ball=Null;
straightFlag2=0;
];
(*ボールを止めたあと*)
If[ball==Null&&endFlag==0,
rightFlag=0;
leftFlag=0;
straightFlag3=1;
];

(*玉が画面外に出た時*)
If[(bY)<-bR&&endFlag==0,
stFlag=0;
endFlag=1;

];

(*人間の体*)

If[stFlag==1&&endFlag==0&&straightFlag==1,
head = Circle[{5,3.6},0.4];
body = Line[{{5,2.2},{5,3.2}}];
leg1= Line[{{5,2.2},{5-0.6,1.5}}];
leg2= Line[{{5,2.2},{5+0.6,1.5}}];
arm1=Line[{{5,2.8},{6,3.7}}];
arm2=Line[{{5,2.8},{4,3.7}}];
straightFlag=0;
straightFlag2=1;
];

If[stFlag==1&&endFlag==0&&rightFlag==1,
head = Circle[{5+3.05,1},0.4];
body = Line[{{5+1.65,1},{5+2.65,1}}];
leg1= Line[{{5.4,2},{5+1.65,1}}];
leg2= Line[{{5,0.9},{5+1.65,1}}];
arm1=Line[{{5+2.3,1},{5+3.5,1.5}}];
arm2=Line[{{5+2.3,1},{5+3.5,0.5}}];
rightFlag=0;
rightFlag2=1;

];

If[stFlag==1&&endFlag==0&&leftFlag==1,
head = Circle[{5-3.05,1},0.4];
body = Line[{{5-1.65,1},{5-2.65,1}}];
leg1= Line[{{4.6,2},{5-1.65,1}}];
leg2= Line[{{5,0.9},{5-1.65,1}}];
arm1=Line[{{5-2.3,1},{5-3.5,1.5}}];
arm2=Line[{{5-2.3,1},{5-3.5,0.5}}];
leftFlag=0;
leftFlag2=1;
];

If[stFlag==1&&endFlag==0&&straightFlag3==1,
head = Circle[{5,3.1},0.4];
body = Line[{{5,1.7},{5,2.7}}];
leg1= Line[{{5,1.7},{5-0.6,1}}];
leg2= Line[{{5,1.7},{5+0.6,1}}];
arm1=Line[{{5,2.3},{6,2}}];
arm2=Line[{{5,2.3},{4,2}}];
straightFlag3=0;

];

If[endFlag==1,
(*ゲームオーバー後の処理*)

(*玉の削除*)
ball=Null;

(*ゲームオーバーメッセージ*)
gameover=Text[Style[GOOL,Large],{4.5,4.5}];
,
(*ユーザーへのメッセージ*)
gameover=Text[Style[GK,Large],{2,8.5}];
];

(*ゴールの描画*)
ground =Line[{{0.5,0.5},{9.5,0.5}}];
post1 =Line[{{0.5,0.5},{0.5,1.5}}];
post2=Line[{{9.5,0.5},{9.5,1.5}}];
post3=Line[{{0,0},{0,1.5}}];
post4=Line[{{0,1.5},{0.5,1.5}}];
post5=Line[{{10,0},{10,1.5}}];
post6=Line[{{9.5,1.5},{10,1.5}}];
post7=Line[{{0,0},{10,0}}];
(*ポイントの表示*)
point=Text[Style[save,25],{8,8}];

(*画面設定*)
options=
{AspectRatio->Automatic,PlotRange->
{{0,10},{0,10}}};

(*グラフィック描画処理*)
Graphics[{head,body,leg1,leg2,arm1,arm2,ball,ground,post1,post2,post3,post4,post5,post6,post7,point,gameover},options],
{t,0,Infinity},
AnimationRate->3,
AnimationRepetitions->10
]}]