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



さて、キーが押されていたら移動するので、
キーカウンタ1で移動するのは間違いないのですが、
それ以降、押しっぱなし移動したばあい、
カウンタ5ずつで移動するようにしてみます。
この場合、
移動が発生するカウンタ値は、
1,6,11,16,21・・・
となりますね。(1で一回、その後は5ずつ
この数列、簡単に判定する方法があります。
5で割って余りが1
です。
割り算の余りを求める演算子は、 「mod」です。
(a mod b)は、aをbで割った余りを返します。
では、実装を見て見ましょう。
TPiece.mainです。
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 (k_left mod 5)=1 then begin
       if not isHit(-1,0) then x:=x-1;
   end;
   if (k_right mod 5)=1 then begin
       if not isHit(1,0) then x:=x+1;
   end;
   (略)
end;
もし、5で割って余りが1なら、
それぞれ、「not isHit」で、当たらないならば、
という条件のifのあと、移動しています。
xは負の数は左ですから、
k_leftは -1 、 k_rightは 1 です。
今までの処理と比べたら、
だいぶ簡単だと思うので、
わからなかったらちょっと考えてみてください。
んじゃ実行〜〜

img3.png

積みあげ積み上げ・・・
初期状態の回転がキツイからこりゃ綺麗にできねえな