現在GUIなどで行っている五目並べゲームに取り組んでいます。IAとルールチェッカーをコーディングする必要があります(キャプチャ、禁止パターンなどのオプションのルールの場合)。ボードを次のようなint配列で表すことを計画していました。
uint goban[361];
これは19*19碁盤(ボード)を表します。32ビット整数を4バイトに分割でき、各バイト内に次のようなメタデータをストックできるとしましょう。
- 1バイト目:この場合は空/黒/白ですか?
- 2バイト目:この場合は特別なパターンの一部ですか?
- 3バイト目:パターンのどの位置にいますか?
- 4バイト目:私は捕らえることができますか?
この種のソリューションが五目並べAIに適しているかどうかはわかりませんが、私が抱えている主な問題は、それを適切に作成する方法です。パターンを取りましょう:
-OO-O-
オープンで無料の3つで、内側と端にスペースがあります。このパターンを座標のない静的な表現とどのようにリンクさせるのですか?
もう1つの懸念は、パターンをいつ更新する必要があるか、そして361の場合から、前の図をこれに更新するとかなり長くなる可能性があるためです。
XOO-O-
4つのケースすべてを更新する必要があるため、適切ではないと思います。さらに、他の多くの垂直/斜めのパターンに影響を与える可能性があります。
むしろ、現在マップ上にあるパターンのリストを次のように作成する必要があります。
std::list<ThreatList> tlist;
マップを単純なtriboolまたはchar配列にしますか?
評価関数によって埋められる影響マップの高速更新を取得するために、データ表現が最大の情報を提供するようにしたいです。脅威空間検索やその他の五目並べアルゴリズムについていくつか読んだことがありますが、データ表現については説明しておらず、正しく行う方法がわかりません。パターンを表現するためのクリーンな方法と方法を見つけるのを手伝ってください。それらを更新します。
ありがとうございます。