⇒ Blazor WebAssemblyで作成したテトリスはこちら とても重いです。

ではBlazor WebAssemblyでテトリスを作ります。使用するクラスは以下で作成したものを基本的にそのまま使います。ただBlazor WebAssemblyにあわない部分は変更します。

PictureBoxに頼らずC#でテトリスをつくる (その1)
MovingTetriminoクラス PictureBoxに頼らずC#でテトリスをつくる (その2)

ではさっそくBlazor WebAssemblyでテトリスを作ってみましょう。

基本的にそのままでいいのですが、先頭に

をつけてください。

変更が必要な部分だけ示します。

Blockクラス

Draw(Graphics g)メソッドを変更します。

FixedTetriminoクラス

MovingTetriminoクラス

PlaySoundeffect.Rotate()メソッドが使えないのでコメントアウトしています。また移動系のメソッドは実際に移動処理ができたらtrue、できなかった場合はfalseを返すように変更しました。

あとミノが着地したときにイベントが発生するのですが、そのときドロップポイントを渡せるようにしました。

ではこれらのクラスをつかってBlazor WebAssemblyでテトリスをつくることにします。

パッケージマネージャーからBlazor.Extensions.CanvasとToolbelt.Blazor.HotKeysをインストールしておいてください。

wwwroot/index.html

Pages/Index.razor

まず音を鳴らすためのメソッドを示します。

次にキー入力に対応できるようにします。

これはイベントハンドラをセットするためのメソッドです。Dispose()でイベントの捕捉を切り離す必要があります。これをしないと再び同じページが読み込まれたときに処理が二重三重におこなわれてしまいます。

CreateOutsideBlocks()メソッドはテトリスの外枠のブロックの位置を取得するためのものです。

以下は描画処理に関するコードです。

現在落下してくるミノやすでにフィールドに固定されたミノ、次に降ってくるミノ、ホールドされているミノを表示するためのものです。ゲームオーバーになったりPauseしているときはそれを示す文字列を描画します。

以下はキー入力されたときに呼び出されるメソッドに関するコードです。

最後にイベントハンドラに関するコードを示します。

さてこれで一応完成なのですが、実際に動かしてみると動作がとても重いです。やっぱりこういうものをつくるのであればJavaScriptあたりがいいのかな?