[ Java奮戦記_目次 ]

行列で石の配置を表すクラス



仕様を確認する

このクラスは、行列で石の配置を表します。
碁盤に見立てた19×19の行列に、当初は を設定し、黒石が置かれたら 、白石が置かれたら を配置します。
石を置いた後に、取り除かれる石がないか確認し、ある場合はその点を に置き換え、除いた石の数をアゲハマとして数えます。
このクラスは、常にある瞬間の一盤面を表しています。


コーディングする

クリックしてソース IntBoard.java を表示

[コンストラクタ]

  1. 石が置かれていない空のインスタンスを生成します。

[実装するメソッド]

  1. インスタンスを初期化します。
  2. パラメータとして「石の色」「行番号」「列番号」を受け取り、盤面を一手更新します。
  3. 戻り値として「盤面データ」を返します。
  4. 戻り値として「黒番のアゲハマ数」を返します。
  5. 戻り値として「白番のアゲハマ数」を返します。

[参考情報]

  1. クリックして Javadoc を表示
  2. テストプログラム TestIntBoard.java


注意点

このクラスは、ある瞬間の一盤面を表しているので、手順データは持っていません。
このクラスにアゲハマ処理(石を取る処理)が入っていますが、作成当初はうまくいった、と思いました。うまくいった、という意味は、ごちゃごちゃと分岐や例外処理が増えるようなロジックではなく、見やすい繰り返し処理にまとまった、という意味です。

ただ、作成して大分経って、やはり処理に無駄があるのでは、と思っています。詳細を忘れてしまいましたが、結果として、同じ場所を2度以上チェックしているような気がする、ということです。

このアゲハマ処理は、19×19のすべての点について、ダメが詰まっているかいないかをチェックしています。その際、つながっている石を一つの石群として認識し、石群のダメがすべて詰まっていたら、盤面から取り除くようになっています。

逆に言えば、石群のダメが詰まっていないとき、途中までチェックした石群の点を、チェック済みにして、ダメ詰まりチェックの対象から外してもよかったのではないか、と思っているのです。
もしロジックを再確認する気持ちになったら見てみようかなあ、と、少しだけ思っています。