ブロックの落下・着地・キー入力

投稿者: | 2012年5月22日

1.はじめに

今回は落ちゲー作成の補足として、

  • ブロックの落下処理
  • ブロックの着地判定
  • キー入力

について解説します。

落下処理は必須ですから問題ないと思いますが、着地判定やキー入力で手を抜いてしまうと、操作性がひどく悪いゲームになってしまいます。

なお、操作性は「テトリス」や「ぷよぷよ」と同レベルのものを再現することを目標としました。

2.ブロックの落下処理

落ちゲーは名前の通り、何かが落ちてくるわけですから、落下する処理が必要となります。基本的に落ちゲーは、一定のサイズのマス目で区切られています。そのため、一定の時間が経過するごとにマス目を落下する、といった処理が必要となります。

具体的には、落下のカウント用の変数を用意して、一定の落下カウントが溜まった時点で落下処理を行います。例えば、カウント100で落下する場合には、以下のようなフローとなります。

3.ブロックの着地判定

次はブロックの着地判定です。これは何かというと、下にブロックがあった場合にすぐには着地(くっつく)をしないで、着地までに一定時間の猶予を与える判定です。

例えば、ブロックの落下スピードが超高速になった場合には、あっという間にブロックの上に落ちてしまいます。その場合に、テトリスやぷよぷよですとすぐには下のブロックとくっつかないため、ガコっガコっと横にずらすことができます。こうすることで、落下速度が速くなってもなんとかブロックを消したりすることができるわけです。

とりあえず、今回はテトリス・ぷよぷよの操作性を再現するために、これを実装してみます。

具体的な方法は、先ほどの落下処理とほぼ同じです。着地をカウントする変数を用意し、下がブロックであれば一定のカウント後にくっつく処理(消去判定など)を行うだけです。

例えば、カウント100でくっつく場合には、以下のようなフローとなります。

なお、このフローには書いてありませんが、テトリスやぷよぷよでは落下した場合に

着地カウントをリセットしています。

4.キー入力

最後はキー入力です。ブロックを左右に移動するために、キーを押しっぱなしにした場合の処理です。

テトリスやぷよぷよでは、キーを押しっぱなしにすると、最初のタイミングでは1つだけ動きますが、少しの間は動かずに、それ以降は高速で移動する、といった処理を行っています。要はテキストエディタなんかで、Aキーを押しっぱなし場合に、最初の一文字はすぐに出ますが、しばらく動かずに、その後は高速でAAAAAAAAAAAAAAAAAAと出るものですね。

まあ、これも考え方は今までとほぼ同じです。少し違うのは、カウントが0の場合は動いて、一定のカウントまでは動きません。そして、それ以降は動く、といった感じです。

カウントが10までは動かないとした場合には、以下のフローとなります。