ASP.NET Core版 対戦型のマインスイーパーをつくる(4)の続きです。

マインスイーパのなかには「地雷の置かれていないセルを開けたとき、隣接するセルに地雷が置かれていないときは、それらが自動的に開けられる」という機能があるものもあります。

他にも「地雷が置かれていると思われるセルに旗を立て、表示された個数と同じだけの旗を立てたセルで左右のボタンを同時に押下すると、隣接する開けられていないセルを一気に開けることができる」というものもあります。この場合、一気に開けられたセルに地雷がある場合はゲームオーバーとなります。

これらの機能を追加してしまうとゲームの難易度が下がってしまい面白くないのではないと判断してしていないのですが、プログラミング的には面白いと思ったのでベータ版で実装してみることにしました。この機能を使うとゲームは進めやすくなりますが、マスを開くときの緊張感は低下して面白くなくなってしまうかもしれません。

一気にセルを開くための準備

まず以下の処理を多用することになるのでメソッド化してしまいましょう。

セルを一気に開く処理を追加

既存のOpenCellメソッドを以下のように修正します。

開いたセルの数字が0の場合

開いたセルの数字が0の場合、地雷がない隣接するセルを自動で開く処理を示します。

周囲のセルを一気に開く

表示された個数と同じだけの旗を立てたセルで隣接するセルを一気に開ける処理を示します。

一般的には中ボタンをクリック(または左右のボタンを同時に押下)ですが、面倒なので開かれているセルをクリックしたときに表示されている数字と周囲に立てられている旗の数が一致した場合は周囲のセルを一気に開きます。このとき間違えて旗を立てていた場合は地雷があるセルが開かれてしまうのでゲームオーバーとなります。