【#5】~回転・ライン消去編~新人プログラマーはテトリスを作れるのか?【C#.NET】

2021.06.21

CATEGORY : C#.NET プログラミング

こんちは、あんみんどうふです。

今回は回転とライン消去です。学生の頃に作ろうとしたテトリスではライン消去がうまくいかず、ミノが宙に浮いていました。リベンジを果たします。

前回の記事はこちら。

こんにちは、あんみんどうふです。 今回はミノの設置です。これだけだとすぐ終わっちゃうので、NEXT表示もやります。 前回の記事はこちら。 https://www.terasol.co.jp/%e3%83%97%e3%83%...

全編見たい方はタグからどうぞ。

5-1.回転

回転処理を新たにminoTurnメソッドに書きます。仕様として、Zキーを押したら左回転、Xキーを押したら右回転させます。

左回転で現在方向(dir)の値を1減らし、右回転で1増やすことで回転します。下のif文は下限上限を超えないようにする処理です。

 

そしてkeydownイベントに追記します。

Z、Xを押したらそれぞれminoTurnを呼び出すようにしました。これで回転が可能になりました。

ちなみに公式ガイドラインによるとキーボード操作の場合上キーが右回転Spaceキーがハードドロップということになっているらしいです。普段私はSwitchでテトリスをプレイしていますが、パッド操作は上ボタンがハードドロップなんですね。私はこれで慣れちゃっているのでガイドライン通りの操作はちょっと難しく感じますね・・・。
今回はガイドラインに“なるべく近づける”というコンセプトで作っているので、このコードのまま作ります。テトリスさんごめんね!

 

5-2.ライン消去

横1列揃えたら消えて上の段が落ちてくるようにします。これは新規メソッドminoDeleteに書きます。

上から横1列ずつチェックし、何かしらあれば1列すべてにミノがあるかチェックします。1列埋まっているならそこから上のミノをすべて1段分上書きすることで、ライン消去を表現しています。

わかりやすく画像にまとめてみました↓

一応、消去したラインのカウントもしています。今は何にも使ってませんが、後々スコア実装したりするかもしれないし、REN数表示とかやるかもしれないし。

 

後はminoDropに挟み込みます。

ここまで書いたら適当に操作して列を埋めてみます。

ちゃんと回転もするし列も消えてますね。普通のテトリスとしてはほぼほぼ完成です!

 

さて、ここから現代版テトリスの仕様となります。これからスーパーローテーションホールドハードドロップを実装していきます!

次回はスーパーローテーションの実装です。今回のテトリス制作で最も難しい部分かもしれません。

#6 スーパーローテーション編へ続く。

こんにちは、あんみんどうふです。 今回はより直感的に回転できる仕様、スーパーローテーションを実装します。多分ここが一番のつまづきポイント。 前回の記事はこちら。 https://www.terasol.co.jp/%e3%...