では、
「指定した行から初めて、
一番上の行まで、
RewriteLineByOverLineを呼び出す」
手続きを作りましょう。
これは結局、
指定した行がなくなって、
その上が落ちてきたのと同じ事が起きます。
定義部です。
TMapBlocks = Class(TObject)
private
public
(略)
procedure DeleteLine(at:integer);
(略)
end;
実装部です。
procedure TMapBlocks.DeleteLine(at:integer);
var i:integer;
begin
For i:=at downto 0 do begin
RewriteLineByOverLine(i);
end;
end;
単純ですね。
よく見ると新しい処理が使われています。
for 初期化 downto 終了値 do;
と、 to ではなく、downto が使われています。
downtoの場合は、初期化した変数を、
毎ループにカウンタを1減らします。
これを使えば、
初期値iを指定した削除行にしたあと、
0まで一つ減らしながらループすることで、
RewriteLineByOverLineを、
指定した削除行から0行目(一番上)まで実行できるわけです。
これで固まりを落下させる処理ができました。
あとは、消せる段の発生を検知して、
削除処理を呼び出すだけです。
ここで重要なのは、
テトリスは一度に何段消えるかわからないので、
「消せる行がなくなるまで、
消える行の探知を無限ループ」
しなければならないことです。
(最大は4だけど
そこで、
「消える行があればその行番号を返し、
無ければ-1を返す関数」
を作ろうと思います。
次回で。
コンテンツ
最新の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: 908
- today: 1
- yesterday: 0
- online: 1