[ Java奮戦記_目次 ]
行列で石の配置を表すクラス
仕様を確認する
このクラスは、行列で石の配置を表します。
碁盤に見立てた19×19の行列に、当初は
0 を設定し、黒石が置かれたら
1 、白石が置かれたら
2 を配置します。
石を置いた後に、取り除かれる石がないか確認し、ある場合はその点を
0 に置き換え、除いた石の数をアゲハマとして数えます。
このクラスは、常にある瞬間の一盤面を表しています。
コーディングする
→
クリックしてソース IntBoard.java を表示
[コンストラクタ]
- 石が置かれていない空のインスタンスを生成します。
[実装するメソッド]
- インスタンスを初期化します。
- パラメータとして「石の色」「行番号」「列番号」を受け取り、盤面を一手更新します。
- 戻り値として「盤面データ」を返します。
- 戻り値として「黒番のアゲハマ数」を返します。
- 戻り値として「白番のアゲハマ数」を返します。
[参考情報]
- クリックして Javadoc を表示
- テストプログラム TestIntBoard.java
注意点
このクラスは、ある瞬間の一盤面を表しているので、手順データは持っていません。
このクラスにアゲハマ処理(石を取る処理)が入っていますが、作成当初はうまくいった、と思いました。うまくいった、という意味は、ごちゃごちゃと分岐や例外処理が増えるようなロジックではなく、見やすい繰り返し処理にまとまった、という意味です。
ただ、作成して大分経って、やはり処理に無駄があるのでは、と思っています。詳細を忘れてしまいましたが、結果として、同じ場所を2度以上チェックしているような気がする、ということです。
このアゲハマ処理は、19×19のすべての点について、ダメが詰まっているかいないかをチェックしています。その際、つながっている石を一つの石群として認識し、石群のダメがすべて詰まっていたら、盤面から取り除くようになっています。
逆に言えば、石群のダメが詰まっていないとき、途中までチェックした石群の点を、チェック済みにして、ダメ詰まりチェックの対象から外してもよかったのではないか、と思っているのです。
もしロジックを再確認する気持ちになったら見てみようかなあ、と、少しだけ思っています。