ボールソリティアとは?
ボールソリティアとは、 空いたマスに向かって1つ飛ばしでボールを移動させ、飛ばれた方のボールをゲームから取り除くというゲームです。
これを繰り返してボードにボールを1つだけ残すことができたらクリアという単純なものです。
ソリティアとは一人遊びのことで、トランプなどでもソリティアというゲームがありますが、それとはルールなども大きく異なります。
解法に関して数学的な研究がいろいろとなされているようですが、今回はあくまでGUIを作ることを目的として楽しんでいきます。
まずは初期設定
ということで、まずは初期状態を作成します。
ボールソリティアは、縦横7マスずつの正方形から、四隅に関して2×2を取り除いた十字のフィールドで行います。
真ん中以外にすべてボールが設置されている状態から開始し、初期状態のボールの数は32です。
For iter = 0 To 48
arrRow = Int(iter / 7) + 1
arrClm = iter Mod 7 + 1
If arrRow = 4 And arrClm = 4 Then
Cells(arrRow, arrClm) = "○"
ElseIf Abs(arrRow - 4) < 2 Or Abs(arrClm - 4) < 2 Then
Cells(arrRow, arrClm) = "●"
End If
Next
ボールがある状態を●、ない状態を〇とした場合、上記のようなコードで初期設定が可能です。
Elseif以下が少しややこしそうですが、要は真ん中の十字から2以上離れたところには何も入れないということを指しています。
実際このコードを処理すると、次のように初期状態が現れます。
あとはこれに、クリック操作でボールを動かす部分を実装していけば意外とあっさりと作れてしまいます。
Worksheet_SelectionChange
この時、セルに現れたボールを操作するので、セルの選択を変えたときにVBAが起動するような処理が必要になります。
そこで利用するのが、Worksheet_SelectionChangeです。
VBEの画面のSheet1を選択し、プルダウンからWorksheetとSelectionChangeを選択すると、自動でSubモジュールが現れます。
これによって、セルの選択を変えると、変更した後に選択しているセルを「Target」として、VBAをきどうすることがかのうとなります。
試しにこのSubモジュールに次のようなコードを入れると、選択するごとにセルの色がかわるのがわかります。
Target.interior.colorindex = 4
次回以降はこれを使って、実際にボールを動かす動作を実装します。
ちなみに、範囲選択するとすべてが色が変わってしまうので、その際には、次のコードを差し込んで、範囲選択の場合には処理が起きないようにします。
If InStr(Target.Address, ":") Then Exit Sub
コメント