「プログラミングに興味があるけど…」
「VBAを使って作業を効率化できたらなぁ」
「プログラミング勉強したけどわからん(´・ω・)」
等々、プログラミングって結構敷居が高い!
気持ちはわかります。私は、最初にJavaを触りましたが、わからなくて何も面白くなかったです。。
でも!普段使っているExcelならわかりやすいはず!
というわけで、Excelでオセロを作ってプログラミングを楽しく学んでいきましょう。
Excelでオセロを作ろう⑬
オセロを作って楽しくプログラミングを学ぼう!
第9回から石を置くことによって変わる石が存在するかどうかの判定を作っています。
前回から斜め方向へのチェックを実装し、前回は左上を実装しました。
今回は、左下へのチェックを実装していきます。
石が変わる条件のおさらい
第9回でまとめた条件をおさらいします。
成功
- チェック方向に置いた石と反対の色の石が出てきた後に同色の石が出てきた場合
失敗
- 置いた石からチェック方向には自分の石と色が反対の石がない場合
- 置いた石、置いた石と色が反対の石、置いた石と色が同じ石の順が最短の変更なので、チェックする方向に盤の際から3マス目以内においてない場合
- チェックの途中で石が置かれていないマスが出てきた場合
- 盤の外側に出てしまう場合
これをプログラムで実現していきます。
左上と左下とのチェックの差
左上へのチェックと左下へのチェックの差を考えていきます。
左上へのチェックと左下へのチェックでの違いは下記の二つがあります。
- チェック方向の差
- 盤外に出た時の判定
一つずつ見ていきます。
チェック方向の差
左上へと左下ではチェックする方向が違うので、左下のチェックでは行を「-1」ではなく「+1」していきます。
オセロで表すと下記のようになります。
左上へのチェック
左下へのチェック
盤外に出た時の判定
盤外に出た時の判定は、左方向へは共通ですが、縦方向に違いがあります。
左上へのチェックでは上方向に、左下へのチェックでは下方向になります。
【左下方向チェック】マクロ内容追記
左上へのチェックとの差を理解したところで、左下方向に変わる石があるかどうかのチェックを実装していきましょう。
左上と同様に行と列両方の変更を同時に行っていきます。
左下方向の確認メソッドの作成
前回までに作ってきたメソッドと同様に「othello」に「left_down_change_check」メソッドを作成していきます。
まずは初期位置が左下から横方向と縦方向ともに2マス以上離れていること(①)と左上の石が置いた石と反対の石であることのチェック(②)します。
Function left_down_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False //① If cell_column - 2 >= LEFT_TOP_COLUMN And cell_row + 2 <= LEFT_TOP_ROW + 7 Then //② If Cells(cell_row + 1, cell_column - 1).Value = reverse_stone Then //中身にチェック処理を記述 End If End If left_down_change_check = check_result End Function
次にチェック処理を記載していきます。
二つの変数iとj(行と列のそれぞれの動きを管理する変数)を用意していきます(①)。
そして、その変数をwhile文の中で列は「-1」、行は「+1」していきます(②)。
while文を続ける条件は、用意したiとjの値が盤の左上の座標よりも大きい場合は、処理を続けていきます(③)。
Function left_down_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column - 2 >= LEFT_TOP_COLUMN And cell_row + 2 <= LEFT_TOP_ROW + 7 Then If Cells(cell_row + 1, cell_column - 1).Value = reverse_stone Then //① i = cell_column - 2 j = cell_row + 2 //③ Do While i >= LEFT_TOP_COLUMN And j <= LEFT_TOP_ROW + 7 //② i = i - 1 j = j + 1 Loop End If End If left_down_change_check = check_result End Function
最後に、ループを抜ける条件をループ内に記載していきます。
自分と同じ色の石が置いてある場合はチェックをtrueとしてループを抜けます(①)。
チェック先に石が置かれていない場合はループを抜けます。(②)
Function left_down_change_check(cell_row, cell_column, stone, reverse_stone) Dim check_result As Boolean check_result = False If cell_column - 2 >= LEFT_TOP_COLUMN And cell_row + 2 <= LEFT_TOP_ROW + 7 Then If Cells(cell_row + 1, cell_column - 1).Value = reverse_stone Then i = cell_column - 2 j = cell_row + 2 Do While i >= LEFT_TOP_COLUMN And j <= LEFT_TOP_ROW + 7 //① If Cells(j, i).Value = stone Then check_result = True Exit Do End If //② If Cells(j, i).Value = "" Then Exit Do End If i = i - 1 j = j + 1 Loop End If End If left_down_change_check = check_result End Function
これで左下方向へのチェックメソッドの完成です。
【左下方向チェック】動作確認
左下方向へのチェックがうまくできるか確かめる
上で作成したメソッドを石を置く前に呼び出してしっかりと動くか確認していきます。
メソッドを記述
セルがクリックされたときに呼び出されるメソッド「cell_DoubleClick」の中で石を置いたあとにチェックしてメッセージボックスを出すようにします。
左上方向のチェックを動かしているのでそれを編集して左下方向に修正しましょう。
If left_down_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でオセロを作って楽しくプログラミングを学ぼう!⑮