Step 04 of 12

合法手の判定

currentPlayer置ける場所に、小さな黄色の点でヒントを表示します。 この Step の山場は isValidMove メソッドを自分で書くこと — これ以降、AI もこのメソッドに全面的に依存します。

MyOthello.java
Java runtime を初回読み込み中…
CheerpJ の JRE (数十 MB) をダウンロードしています。
preparing

About this step

8 方向スキャンの定石

8 方向は int[][] DIRECTIONS として static final で持っておきます。 {dr, dc} の組を 8 個書き並べるだけ。そしてループの中では for (int[] d : DIRECTIONS) で回せば、1 方向分の処理を 1 回書くだけで全方向カバーできます。

「挟める」の定義

相手の石が 1 個以上続いた後に自分の石があれば挟めます。 相手の石が 0 個(隣が自分 or 空)のまま自分の石や空マスに当たったら、 その方向では挟めません。sawOpponent という boolean フラグで「相手を通過したか」を覚えておくのがコツ。

動かしてみる

初期配置での黒の合法手は 4 箇所: (3,2), (2,3), (5,4), (4,5)。これが全部ヒントで光れば成功です。