「削除可能な行がなくなるまで無限ループし、
削除可能な行があれば、削除処理を呼び出す。」
を作ります。
定義部
TMapBlocks = Class(TObject)
private
public
(略)
procedure DeleteBlocks;
procedure Draw;
end;
命名のネタが尽きてきました
実装部
procedure TMapBlocks.DeleteBlocks;
var i:integer;
f:boolean;
begin
f:=true;
while f do begin
f:=False;
For i:=0 to 19 do begin
if isFull(i) then begin
DeleteLine(i);
f:=True;
break;
end;
end;
end;
end;
iはforのカウンタです。
fはフラグを略してf。
行の削除があったら立てます。
全体としては、
フラグが立っていたらループに入り、
forで全部の行のループをします。
isFullで、ブロックが全部並んでいる行があったら、
DeleteLineで削除し、
フラグを立ててBreak;します
Break;は、現在のループを一つ抜けますから、
この場合は、全行のforループを抜けます。
Break;で抜けてきた場合は、
直前にフラグを立てているので、
Whileのループを再び行います。
ForループをしてもisFullにひっかからなかった場合は、
フラグが立っていないので、
Whileが終了して、
DeleteBlocksを終了します。
あとはこれを、ブロックを置いたタイミングで呼び出せば、
消える処理ができるはず・・・?
コンテンツ
最新の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: 890
- today: 1
- yesterday: 0
- online: 1