【#4】~ミノ設置・NEXT表示編~新人プログラマーはテトリスを作れるのか?【C#.NET】

2021.06.14

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

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

今回はミノの設置です。これだけだとすぐ終わっちゃうので、NEXT表示もやります。

前回の記事はこちら。

こんにちは、あんみんどうふです。 前回に続き、テトリス作っていきます。今回はNEXTとテトリミノの移動の実装です。キーボード入力で縦横無尽に操作できるようにします。 前回の記事はこちら↓ https://www.teras...

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

4-0.訂正

・・・の前に訂正箇所がいくつかあります。壁と床を1マスにしていましたが、移動の際にとある方向でIミノを壁や床にくっつけると配列からはみ出してエラーが起きることが判明したので、先に直します。(いるかどうかわかりませんが)参考にしてた方、すみません・・・。

それとLoadイベント時に壁を生成する際、設定した定数に応じて正しく壁を増やすようにしました。以前まではいくら大きい数値にしても1マスの壁しか作らず、意味を成さないものになっていました・・・。

バグ修正ってやつですね。ゲームでもよく見かけるので正直こういうの憧れてました^^;

 

4ー1.ミノ設置

その名の通りのことをします。地面にミノを設置すると次のミノが出てきます。これを作ります。

まずは設置処理を新たなメソッドminoDropに書きます。

たったこれだけ。次にミノ移動メソッドminoMovingの最後のif文に追記します。

これで一番下までミノを落とすと次のミノが現れます。以上。

(ゲームオーバー判定を作っていないので積み上がるとすごいことになってます・・・。まあ、それはそのうち。)

 

4-2.NEXT表示

次のミノが現れたのはいいですが、次のミノが全く分からない状態でプレイしているのでいわゆる“運ゲー”になっています。これを解消すべく、NEXTを表示させます。

デザイナーを開き、50×50のpictureboxを6つ作り、それっぽく並べます。nameは「next_1」~「next_6」にします。

このpictureboxにフィールドと同じ要領でNEXTのミノを描画します。

 

 

コードに戻り、まずはグローバル変数に新たな定数NEXT_DISPLAYを追加します。

ここに入力した数の分、NEXTを表示します。
ぷよテトではNEXTが5つTETRIS99ではNEXTが6つといったように本家でも作品によって数が異なってたりします。
今回は前回に作ったNEXTがちゃんと機能しているか確かめたいので6つ表示させます。

※6月21日追記: 各作品のNEXTの数間違えてたので修正しました。恥ずかし。

 

そしてこれもメソッドの外に追記します。グローバル変数の所でもいいです。

続けてNEXTの表示数を切り替える処理をLoadイベントに追記します。

nextViewという配列に先程作ったNEXTのpictureboxを格納しています。理由としてはfor文でまとめて処理できるようにするためです。いちいちnext_X.Visible = true;って書き並べるの面倒だし。

 

そして新しいメソッドnextDrawingを追加します。これはNEXTを先程作ったpictureboxに描画する処理です。

フィールド描画のほぼコピペです。NEXT用のフィールド配列を作ってその通りに正方形を描画してるだけです。

後はminoDropにnextDrawingを実行させるように追記すれば完了です。

次に出てくるミノがわかるようになり、一気にテトリスらしくなりました!一巡分のミノも7種すべて出てきているので前回作ったNEXTもうまく作れてましたね。よかった~

しかし、回転もできずライン消去もできないこのゲーム、流石にテトリスとは言えません。何をしても最終的に詰んでしまうので最早クソゲーでしかありません。

というわけで次回は回転とライン消去を作ります。(スーパーローテーションはまだやりません)

#5 回転・ライン消去編へ続く。

こんちは、あんみんどうふです。 今回は回転とライン消去です。学生の頃に作ろうとしたテトリスではライン消去がうまくいかず、ミノが宙に浮いていました。リベンジを果たします。 前回の記事はこちら。 https://www.ter...