コラム / テトリスぽいもの / 37



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
を実装します。