質問
私は開発しようとしています Pentago
-C#のゲーム。
今、私は2つのプレーヤーモードを持っています。
問題は、私が望むことです 1人のプレイヤー モード(コンピューターに対して)ですが、残念ながら、ミニマックス /ネガマックスのすべての道具は 1 各「移動」(大理石の配置、動きのゲームピース)について計算されたもの。
butin Pentago
, 、すべてのプレイヤーがする必要があります 2 物(大理石を置き、内側のボードの1つを回転させる)
私は回転部品の回転と大理石の配置の両方を実装する方法を理解していませんでした。これで私を導く人が大好きです。
あなたがゲームに精通していないなら、ここにあります リンク ゲームに。
誰かが望むなら、それが関連するならどこかにコードをアップロードすることができます。
事前にどうもありがとうございました
解決
単一の法的動きが2つのサブモーブで構成されている場合、ゲームアルゴリズムの「移動」は、最初のアイテムが大理石の配置であり、2番目のアイテムがボードのローテーションであるという単なるターパルです。
var marbleMove = new MarbleMove(fromRow, fromCol, toRow, toCol);
var boardRotation = new BoardRotation(subBoard, rotationDirection);
var move = new Tuple<MarblMove, BoardRotation>(marbleMove, boardRotation);
通常、アルゴリズムを再生するゲームでは、特定の位置に対してすべての可能な動きを列挙する必要があります。この場合、列挙する必要があります すべての可能なペア サブモーブの。このリストを手に入れると、スタンディングコンピューターゲームの再生アプローチを使用することに進むことができます。
他のヒント
リックは上記のタプルを提案しましたが、実際に各プレイヤーに2つの独立した動きをしてもらうことをお勧めします。これにより、移動順序が容易になりますが、使用しているものに応じて検索アルゴリズムを複雑にする場合があります。
UCTのようなアルゴリズムでは(単純な実装のミニマックスよりも優れている可能性が高い)、アルゴリズムが最初に移動がどのような配置が良いかを把握し、次にローテーションが最適なものを把握できるため、2つの動きに侵入することがより効率的になります。 (グーグルのUCTはあまり与えません。元の研究論文はあまり洞察力がありませんが、このページはより良いかもしれません。 http://senseis.xmp.net/?ct)