えー、実は、新しいピースを出す処理は、
かな〜り簡単です。
ピースの、生成と解放部分をもう一度見て見ましょう。
Form.onCreate で
Piece:=TPiece.Create;
Piece.Init(5,-3,5,MapBlocks);
SetRandomShapeToPiece(Piece);
と、生成、初期化、形状決定
とします。
メインルーチンで
if Assigned(Piece) then begin
Piece.Main;
if Piece.death then begin
FreeAndNil(Piece);
end;
end;
死亡フラグがあればFreeAndNil。
いやぁ、実は、
ここのFreeAndNilの後に、
生成、初期化、形状決定
の処理をつけるだけですwwwww
でも、実はそれだとちょっと心配なことがあります。
ゲームオーバーの状態では、
満タンまで積もってるわけですから、
生成してしまうと、次のフレームで即死します。
別に問題は無いんですが、
ゲームが終わった状態で、
内部的に、
「死亡→生成、死亡→生成、死亡→生成・・・」
って毎フレームせかせかしてるのは、
やっぱキモチワルイですよね。
いえ、でもさらに大丈夫なんです。
死んだフレームでは、ゲームオーバー処理のあと
アプリを落としてしまうので、
「ゲームオーバー後のフレーム」
なんてものは存在しません。
でも、やっぱ、なんとなく、平気だけど、ああん
俺の性格だ プログラミングの。うん。
以下のようにしておきましょう。
if Assigned(Piece) then begin
Piece.Main;
if Piece.death then begin
FreeAndNil(Piece);
if not MapBlocks.GameOver then begin//ゲームオーバーじゃないなら次を産む
Piece:=TPiece.Create;
Piece.Init(5,-3,30,MapBlocks);
SetRandomShapeToPiece(Piece);
end;
end;
end;
えー、実行してみたら、
showmessageが高速ででまくってひどいことになりました・・・・
if MapBlocks.GameOver then begin
showmessage('m@(^Д^)プギャー 死んでやがるwwwアヒャヒャヒャヒャ');
Close;
Exit;
end;
のところを修正します。
if MapBlocks.GameOver then begin
Timer1.Enabled:=False;
showmessage('m@(^Д^)プギャー 死んでやがるwwwアヒャヒャヒャヒャ');
Close;
Exit;
end;
showmessageの前にタイマーをオフにしちゃいます。
Enabledは、コンポーネントの、
「使用する」フラグでしたね。偽、にすれば、止まります。
さぁ、実行してみましょう。
鑑賞専門ですが・・・w
コンテンツ
最新の12件
2023-06-12
2021-02-15
2013-06-19
2012-07-14
2012-02-04
2012-01-06
2011-03-31
2010-08-26
2010-03-15
2009-10-21
2009-02-12
2008-11-18
メニュー編集
- counter: 924
- today: 1
- yesterday: 0
- online: 1