【#8.5】~デバッグモード編~新人プログラマーはテトリスを作れるのか?【C#.NET】

2021.07.16

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

あんみんどうふです。番外編です。

今回は今作っているテトリスのデバッグに便利な機能を実装します。別に必要ないけど自己満足で作ります。

前回の記事はこちら。

こんにちは、あんみんどうふです。 今回はフィールドを見やすくするためにマス目と、ミノの置く場所をわかりやすくするためにゴーストを実装します。 前回の記事はこちら。 https://www.terasol.co.jp/%e3...

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

#○.5シリーズについて

いつも数字で区切って機能の実装等してますが、この0.5区切りの投稿では「別に必要ないけどあれば便利な機能」の実装をしています。主に開発側が楽できるようなものなので、今作っているテトリス自体に影響はあまりありません。
興味ない方はすっ飛ばして構わないです。

デバッグモードとは

処理を正しく実行できるかを確認したり、このように実行したらどうなるか等のテスト・デバッグを支援するモードのことです。

実際のゲームにも存在し、昔のゲームであればチートコードやバグ技等で呼び出すことができます(今のゲームはほとんど無いです)。
「ゼルダの伝説 ムジュラの仮面」のRTAでは2019年当時、手順を踏むことでデバッグメニューを表示させ、自由自在にアイテムを取得する技が使われていました…。

今回作るのはデバッグモードでミノを選んだりフィールドを自由に改変したりできるようにする機能です。
Tスピンのテストをするためにいちいちミノなんて積み上げていられません!

デバッグモード切替

グローバル変数として「DEBUG_MODE」を追加します。

これがtrueの間はデバッグモードが有効になります。

 

といっても、これだけだとデバッグモードが有効化されているのかわかりづらいので、Loadイベントの最後に以下のコードを追記します。

デバッグモードが有効の時、フォームのタイトルバーに「 – Debug Mode」という文字列が追加されます。

 

ミノの種類変更

デバッグモード有効時のみ、操作中のミノを変更できるようにします。
変更の操作は数字キーで行いたい為、KeyDownイベントに追記します。

できました。落とすミノを全部Iミノにして遊ぶこともできますね。

 

マウスでフィールドを自由に編集

ドット絵を描くペイントツールのように、マウスでフィールド内を編集できるようにします。
処理はTimerで反復処理させることでリアルタイムに編集できているように見せます。

まず、グローバル変数として以下の変数を追加します。

マウスをクリックした位置の座標と、クリックされているボタンを表す変数です。これから追加するイベントで使います。

 

デザイナーを開き、view_fieldから新規でMouseDownイベント、MouseUpイベント、MouseMoveイベントを追加します。
そして、Timerを追加しnameを「debugTimer」、Intervalを「10」にし、Tickイベントを追加します。

コードに戻り、MouseDownイベントに以下のコードを記述します。

MouseDownイベントはマウスのボタンが押されたタイミングで呼び出される処理で、ここで左クリックされたか右クリックされたかを判定しています。
また、debugTimerを開始(Enabled = true)させることでフィールドを編集する処理が行われます。

ちなみに、左クリックがブロック生成右クリックがブロック消去のつもりです。

 

次にMouseUpイベントへコードを書きこみます。

MouseUpイベントはマウスのボタンが離されたタイミングで呼び出される処理で、debugTimerを停止させることで編集の処理を止めています。

 

次にMouseMoveイベントです。

MouseMoveはフィールド上でマウスを動かしている時に呼び出される処理で、ブロックを生成する座標を決めています。

 

最後にdebugTimerのTickイベントのコードを書きます。

debugTimerのIntervalに設定した時間が経過する度に実行される処理です。Intervalは「10」に設定したので、10ミリ秒=0.01秒ごとに実行されます。
これだけ短い間隔にすればリアルタイムっぽい編集になるでしょう。

ここではMouseDownで取得した「押されたマウスのボタン」からブロックを生成するか消去するかを決めて処理し、最後に描画しています。
生成・消去する座標はMouseMoveで取得しています。

できました。自由にマウスで盤面をいじれるので、Tスピンのテストにもってこいですね。


とりあえずこれだけ作っておけばだいぶ楽できそうです。いちいちTミノが出るまでリセットしなくて済みます。

無効化するのもDEBUG_MODEの値をfalseにするだけなので切り替えは簡単ですね。

 

というわけで自己満足のデバッグモードでした。
#9 ゲームオーバー+α編へ続く。

こんにちは、あんみんどうふです。 今回はゲームオーバーの実装…だけだとすぐ終わっちゃうので、ゲームが始まるときのカウントダウンも実装します。 前回の記事はこちら。 https://www.terasol.co.jp/%e3...