「プログラミングに興味があるけど…」
「VBAを使って作業を効率化できたらなぁ」
「プログラミング勉強したけどわからん(´・ω・)」
等々、プログラミングって結構敷居が高い!
気持ちはわかります。私は、最初にJavaを触りましたが、わからなくて何も面白くなかったです。。
でも!普段使っているExcelならわかりやすいはず!
というわけで、Excelでオセロを作ってプログラミングを楽しく学んでいきましょう。
Excelでオセロを作ろう⑮
オセロを作って楽しくプログラミングを学ぼう!
第9回から石を置くことによって変わる石が存在するかどうかの判定を作っています。
前回までで全方向へのチェックを実装しました。
今回は、作成したチェックを裏返す石が存在するかのチェックとして一つへまとめていきます。
作成したチェック処理一覧
まずはこれまでに作ってきたチェック処理のメソッドを洗い出します。
- left_change_check
- right_change_check
- up_change_check
- down_change_check
- left_up_change_check
- right_up_change_check
- left_down_change_check
- right_down_change_check
以上、8メソッドが全方向へのチェック処理です。
裏返す石が存在するかチェックするメソッドを作成する
オセロでは、どこかの方向の石が変更することができれば、石を置くことができます。
逆に変更する石がなければその場所に石を置くことができません。
この判定を実装していきます。
一つでも「true」であれば「true」を返すメソッドの作り方
どれか一つが「true」であれば「true」を返すためには、初期状態を「false」に設定した変数を用意してチェック処理が「true」だった場合にその変数に「true」を代入していきます。
またどのチェック処理がtrueになっても変数がtrueになるように、「または(or)」で条件を作成していきます。
そして、最後にその変数を返していきます。
具体的には、下記のようなイメージになります。
【処理 start】
変数:result = false
「チェック1がtrue」または「チェック2がtrue」または…「チェックnがtrue」の場合 ⇒ result = true
resultを返す
【処理 end】
裏返す石が存在するかチェックする処理を実装する
どのように書けば実装できるかつかめたところで、今回の全方向のチェック処理を使用して裏返す石が存在するかチェックする処理を実装していきます。
チェック処理の名前は「change_check」にします。
Function change_check(cell_row, cell_column, stone, reverse_stone) check_result = False If left_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ right_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ up_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ down_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ left_up_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ right_up_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ left_down_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Or _ right_down_change_check(cell_row, cell_column, stone, reverse_stone, False) = True Then check_result = True End If change_check = check_result End Function
ifの条件の中に出てくる「_(アンダーバー)」は命令文を途中で改行したい場合に使用します。
一行に書いてもいいのですが長くなるので、見やすくするために改行をしました。
石を置く前にチェック処理をする
石を置く前に上記で作成したチェックを行い、石が置けなかった場合はもう一度置く場所を選ばせます。
そのため、チェックが成功した場合のみ石を置いて石のカウントを増やしていきます。
プログラムを実装すると下記のようになります。
If change_check(cell_click_row, cell_click_column, stone, reverse_stone) = True Then '石を置く Cells(cell_click_row, cell_click_column).Value = stone stone_count = stone_count + 1 Else MsgBox "裏返す石がないので置くことができません。" End If
これを追加することにより「cell_DoubleClick」の全体は下記のようになっています。
動作確認
どこかにひっくり返せる石がある場合とない場合を試してみて実際にチェックがうまくいっているか確認していきます。
ひっくり返せる石が存在する場合
ひっくり返せる石が存在しない場合
そのあとに裏返せる石がある場所に置くと黒石が置かれる
次回の予定
今回までで置く場所を確定できたので、次回からは石をひっくり返していきます。。
記事一覧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!①
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!②
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!③
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!④
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑤
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑥
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑦
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑧
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑨
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑩
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑪
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑫
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑬
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑭
【プログラミング入門】Excelでオセロを作って楽しくプログラミングを学ぼう!⑮