- ベストアンサー
javaアプレットで五目並べ
タイトルのとおり、五目並べ(連珠)を今、作成しております。 勝敗判定や、石を置くところまでは上手くできたんですが、禁じ手の三三ができません。 どなたか知恵を貸していただけないでしょうか? 私が、考えていたのは、3マスずつ黒の碁石か空白かを縦横斜めにみていき、共通の空白部分があって、その空白部分に黒の碁石が打たれたら三三の判定を下すというやり方です・・・。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
プログラミングに関してはほとんど素人なので的外れかもしれませんが… >共通の空白部分に黒の碁石が打たれたら そうすると下の図の▲に打たれたときは三三の判定がうまくいかない気がします。 (実戦ではこんな石の置き方はしないでしょうけれど。) 一二三四五 1+++++ 2+++●+ 3++●●+ 4+▲+●+ 5+++++ それと、三三が出来上がるのは黒が打たれた時にその黒石が三三を構成している石になるはずです。 なので、 1. 打たれた黒石によって三ができていないか探す 2. この時点で三が2つできていたらアウト→禁じ手の処理へ 3. できる三が1つだけなら、その三を構成する残りの2つの黒石が三を作っていないか探す 4. (既に1つは三ができているはずなので)三が2つできていたらアウト→禁じ手の処理へ ※上の図で言えば四2の黒石が三を2つ作っているのでアウトと判定されますね。 こんな流れではどうでしょう?
その他の回答 (1)
- liar_adan
- ベストアンサー率48% (730/1515)
盤面ぜんぶ調べなくてもいいんじゃないでしょうか。 いきなり三々ができるわけではなく、 黒が、ある点に打ったときにできるわけだから、 黒が打った点を中心に、4方向(縦・横・両斜め)を調べて、 二つ以上三連ができていればそれは三々だ…という考え方でどうでしょう。 この程度なら、打ってから考えても時間はほとんどかからないでしょう。 AIが三々を避ける場合は まず、仮想的に打ってみて、 仮想的な盤面と打った点を判定ルーチンに渡し、 「これ三々ですかね?」 とチェックするようにすればいいと思います。
お礼
迅速な回答ありがとうございます。 なるほど~!!打ったところだけ中心に調べれば、全部調べずに済みますし効率も良いですね~! 参考になりました。早速試して見ます。
お礼
じんそくな回答ありがとうございます。 poohronさんの言うとおり私の今の考え方では三三の判定が完全にはうまくいきませんね。アドバイスありがとうございます。 今から、修正してみます。また、問題が発生したらまた知恵を貸していただけると幸いです。