事前計画では、
残りは、
端で回転するときに内側に寄せる処理と、
後は消える処理です。
投票所には消える処理の無いテトリス
と書いてありましたが、
ここまできて消えないのもムラムラするので実装します。
しかし、
せっかく消えるようになっても、
のろのろ積んでいたんじゃつまりません。
やはり、消えるようになる前に、
自分でさっさと落とす処理を作りましょう。
これは案外簡単です。
今、落下処理は、落下カウンタが満タンになったら一段落ちる
というようになっています。
ですから、落下ボタンを押している間、
カウンタの上昇を早めてやればよいのです。
まずは下キーのセットを作ります。
TPiece = Class(TObject)
private
public
(略)
k_left,k_right:integer;
k_z,k_x:integer;
k_down:integer;
(略)
end;
procedure TPiece.Main;
begin
if GetKeyState(VK_LEFT)<0 then k_left:=k_left+1 else k_left:=0;
if GetKeyState(VK_RIGHT)<0 then k_right:=k_right+1 else k_right:=0;
if GetKeyState(Ord('Z'))<0 then k_z:=k_z+1 else k_z:=0;
if GetKeyState(Ord('X'))<0 then k_x:=k_x+1 else k_x:=0;
if GetKeyState(VK_DOWN)<0 then k_down:=k_down+1 else k_down:=0;
(略)
end;
この一連の処理は、
なんども作ったのでわかるでしょう。
カーソルキー下のコードはVK_DOWNです。
さて、落下速度を速める前に、
一箇所だけ訂正します。
d_counter:=d_counter+1; //1増える
if d_counter=d_max then begin
d_counter:=0; //maxになったら即リセット
end;
この、満タンになったら、という部分を
d_counter:=d_counter+1; //1増える
if d_counter>=d_max then begin
d_counter:=0; //max以上になったら即リセット
end;
というように、
リセットの条件を、満タンぴったりから、満タン以上、に変えます。
落下カウンタの回す速度を増やす、ということは、
一度に1以上増えるということなので、
タイミングによってはd_maxぴったりにならないことがあるからです。
さて、
キー入力の条件ですが、
「キーを押し続けている」
というのはどういう状態でしょうか。
カウンタは押され始めてから0,1,2...
と増えていくので、
「0より大きいときは押されている」
ということなのです。
では、それを踏まえて、
d_counter:=d_counter+1; //1増える
if d_counter>=d_max then begin
d_counter:=0; //max以上になったら即リセット
end;
↓
d_counter:=d_counter+1; //1増える
if k_down>0 then begin
d_counter:=d_counter+4; //下を押してたらさらに4増える
end;
if d_counter>=d_max then begin
d_counter:=0; //max以上になったら即リセット
end;
と編集しましょう。
これで、下を押してれば5倍速になります。(1+4で5
次回はいよいよラインを消します
コンテンツ
最新の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: 938
- today: 1
- yesterday: 0
- online: 1