動画内の準備ファイルは必要に応じて配布しています。
古いコンテンツだと用意されていない可能性があります。
用意されていないもので、演習に必要であればお問い合わせください。
2021年12月29日【ID:254】
【趣味】コンピュータ対戦可能なオセロゲーム
・cal (続き)
次に、 下記のような内容を記述します。
こちらは、実際に駒を置けるのかを判定し、駒を置く機能になります。
引数には以下の4つが存在します。
・val _str:「●」か「○」、どちらの番なのかを判定するためのものです。「●」か「○」を渡します。
・row_no:盤のどこに駒を置くのか行番号を渡します。
・col_no :盤のどこに駒を置くのか列番号を渡します。
・ck:駒を置ける場合、実際に配置するのか、配置しないのかを判定するためのものです。「True」か「False」を渡します。
Dim data As Variantとありますが、こちらが盤面データを格納するための変数になります。
毎回、盤面を見に行っていると実行時間が長くなってしまうため、配列として受け取ります。
また、こちらに配置後の盤面データを用意し、プログラムの最後に一括配置するようになっています。
※引数ckがFalseの場合は、配置しません。
次に、上下左右斜めと8方向分のプログラムが記述されています。
全てを解説すると長くなるため、「上」のみ解説します。
※こちらは上の内容の一部を抜粋したものです。
やっている作業は単純です。
置こうとしている駒のマスを基準に考えます。
基準より1つ上のマスには、相手の駒があるかどうかを一番最初に確認します。
→相手の駒がなければ、基準より上のマスで、裏返る駒がないことになります。
1つ上の駒が相手の駒だった場合、さらに上へ上と確認します。
その時に、自分の駒がある場合、間の駒を自分の駒に置き換えるようにしています。
ただ、自分の駒が見つかる前に、空白のマスがあった場合は、相手の駒を囲むことができないため、その時点で終了します。
これと同じ作業を、8方向分実行しています。
最後のIF文(If cancel_flg Then)では、上下左右斜めと確認して1つも裏返すことが出来なかった場合、このcheck関数(プロシージャ)では、Falseを返すように実装されています。
1つでも裏返すことが出来る場合は、引数ckがTrueの場合、盤面に反映します。
※ こちらのコンテンツには準備ファイルはありません。