「プログラミングに興味があるけど…」
「VBAを使って作業を効率化できたらなぁ」
「プログラミング勉強したけどわからん(´・ω・)」
等々、プログラミングって結構敷居が高い!
気持ちはわかります。私は、最初にJavaを触りましたが、わからなくて何も面白くなかったです。。
でも!普段使っているExcelならわかりやすいはず!
というわけで、Excelでオセロを作ってプログラミングを楽しく学んでいきましょう。
Excelでオセロを作ろう⑩
オセロを作って楽しくプログラミングを学ぼう!
第9回からは石を置くことによって変わる石が存在するかどうかの判定を実装してます。
第10回は右方向です。
石が変わる条件のおさらい
第9回でまとめた条件をおさらいします。
成功
- チェック方向に置いた石と反対の色の石が出てきた後に同色の石が出てきた場合
失敗
- 置いた石からチェック方向には自分の石と色が反対の石がない場合
- 置いた石、置いた石と色が反対の石、置いた石と色が同じ石の順が最短の変更なので、チェックする方向に盤の際から3マス目以内においてない場合
- チェックの途中で石が置かれていないマスが出てきた場合
- 盤の外側に出てしまう場合
これをプログラムで実現していきます。
マクロの内容追記
変わる石が存在するかどうかのチェックをしていきましょう。
今回は右方向のチェックを実装します。
左方向とは逆方向に進みます。
右方向の確認メソッドを作成
まずは右方向に石が変わるか確認していくメソッドを実装します。
右方向に変える石があるかどうかを返すメソッドを標準モジュールの「othello」に準備します。
それと変わるかどうかの返り値も用意します。
Function right_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False right_change_check = check_result End Function
メソッドとして受け取る値は、以下の通りです。
置く石の行:cell_row
置く石の列:cell_column
置こうとしている石:stone
ひっくり返す対象になる石:reverse_stone
を引数として受け取ります。
右方向のチェックなので、列を1ずつ増やしていき、盤からはみ出る前に石が変わる条件を満たすかどうかを確かめていきます。
まず、盤を抜ける前に石を変える(石を挟む)ためには、置く場所が盤の右から3マス以上小さくなければなりません。
そのチェックを加えます。
Function right_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column + 2 <= LEFT_TOP_COLUMN + 8 Then End If right_change_check = check_result End Function
次に、右側に置かれている石が置こうとしている石の逆の石であることを確かめます。
つまり、同色の石、または置かれていない場合は石を変えられないのでそのチェックをします。
Function right_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column + 2 <= LEFT_TOP_COLUMN + 8 Then If Cells(cell_row, cell_column + 1).Value = reverse_stone Then End If End If right_change_check = check_result End Function
この二つがチェック後にループを使ってその先に同色の石があるかどうかを見ていきます。
今回はループ文として「Do while」を使用します。
Function right_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column + 2 <= LEFT_TOP_COLUMN + 8 Then If Cells(cell_row, cell_column + 1).Value = reverse_stone Then i = cell_column + 2 Do While i <= LEFT_TOP_COLUMN + 8 i = i + 1 Loop End If End If right_change_check = check_result End Function
これで盤の終わりまで左側のセルを見ていくことができます。
では、まずは同色の石が出てきて、石が変更可能と判明したときにループを抜ける条件を記述します。
Function right_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column + 2 <= LEFT_TOP_COLUMN + 8 Then If Cells(cell_row, cell_column + 1).Value = reverse_stone Then i = cell_column + 2 Do While i <= LEFT_TOP_COLUMN + 8 If change_bool = True Then Cells(cell_row, i).Value = stone End If i = i + 1 Loop End If End If right_change_check = check_result End Function
そして、同色の石が出てくる前に何も石が置かれていない箇所が出てきたときに変更不可でループを抜ける条件を記述します。
Function right_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column + 2 <= LEFT_TOP_COLUMN + 8 Then If Cells(cell_row, cell_column + 1).Value = reverse_stone Then i = cell_column + 2 Do While i <= LEFT_TOP_COLUMN + 8 If Cells(cell_row, i).Value = "" Then Exit Do End If If change_bool = True Then Cells(cell_row, i).Value = stone End If i = i + 1 Loop End If End If right_change_check = check_result End Function
以上で右側チェックメソッドが完成しました。
動作確認
右方向のチェックがうまくできるか確かめる
上で作成したメソッドを石を置く前に呼び出してしっかりと動くか確認していきます。
メソッドを記述
セルがクリックされたときに呼び出されるメソッド「cell_DoubleClick」の中で石を置いたあとにチェックしてメッセージボックスを出すようにします。
前回左方向のチェックを動かしているのでそれを編集して右方向に修正しましょう。
If right_change_check(cell_click_row, cell_click_column, stone, reverse_stone) = True Then MsgBox "右側に裏返す石があります" Else MsgBox "右側に裏返す石がありません。" End If
「cell_DoubleClick」メソッド全体を見ると以下のようになっています。
メソッドの動作確認
右側に裏返せる石がある状態とない状態で試してしっかりと動作する確認します。
裏返せる石がある状態
裏返せる石がない状態
問題なく右側に裏返す石があるかどうかのチェックができています。
次回の予定
次回は、上方向と下方向へ石が変わるかチェックをしていきます。
記事一覧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!①
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!②
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!③
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!④
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑤
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑥
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑦
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑨
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑩
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑪
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑫
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑬
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑭
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑮