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;
↓
procedure TMapBlocks.DeleteBlocks;
var i:integer;
f:boolean;
lc:integer; //★
begin
lc:=0; //★
f:=true;
while f do begin
f:=False;
For i:=0 to 19 do begin
if isFull(i) then begin
DeleteLine(i);
f:=True;
lc:=lc+1; //★
Break;
end;
end;
end;
//★★★★★
if lc>0 then begin
Form1.level.Caption:=IntToStr(StrToInt(Form1.level.Caption)+1);
if Form1.level.Caption='100' then Form1.level.Caption:='99';
end;
//★★★★★
end;
追加されているのは、★の部分です。
まず、何行消されたか、というカウンタを定義しています。
LineCounterを略してlcです。
始めにリセットしておきます。
DeleteLineが発生したところで一行消されるので、
そこでカウントを1増やします。
whileを抜けた後、
カウントが0より大きいなら、つまり、
1行以上消したなら、
Form1.level.Caption:=IntToStr(StrToInt(Form1.level.Caption)+1);
if Form1.level.Caption='100' then Form1.level.Caption:='99';
を実行します。
Form1.level.Caption:=IntToStr(StrToInt(Form1.level.Caption)+1);
は、levelのCaptionを、
文字列から数値に直す→1足す→数値から文字列に直す→Captionに入れる
ということをやってます。
右辺の括弧の内側から、一回りずつ見ればわかると思います。
if Form1.level.Caption='100' then Form1.level.Caption:='99';
は、その後キャプションが100になったら、99に直す処理です。
文字列で判定して、文字列を入れるという、
レベル調整にしてはなんか強引な処理ですが
ふと思いついたのでやってみました。
ちなみに、100レベルになったら99レベルにする処理なので、
99レベルが最大にできます。
次回では、
スコア=レベル×同時消しの二乗×10
を実装します。
コンテンツ
最新の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: 921
- today: 1
- yesterday: 0
- online: 2