3

私はPentagoC#で-gameを開発しようとしています。

現在、2人のプレーヤーモードがあり、問題なく動作しています。

問題は、 (コンピューターに対して) 1人のプレーヤーモードが必要なことですが、残念ながら、ミニマックス/ネガマックスのすべての実装は、「移動」(大理石の配置、ゲームピースの移動)ごとに計算された1つのものに対するものです。

しかしPentago、すべてのプレーヤーは2つのことを行う必要があります(大理石を配置し、内側のボードの1つを回転させます)

回転部分と大理石の配置の両方を実装する方法がわかりませんでした。誰かにこれを案内してもらいたいです。

ゲームに慣れていない場合は、ここにゲームへのリンクがあります。

誰かが望むなら、それが関係しているなら、私はどこかに私のコードをアップロードすることができます。

事前にどうもありがとうございました

4

2 に答える 2

1

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);

通常、ゲームプレイアルゴリズムでは、特定の位置で可能なすべての動きを列挙する必要があります。この場合、サブムーブの可能なすべてのペアを列挙する必要があります。このリストが手元にあれば、立っているコンピューターゲームのプレイ方法の使用に進むことができます。

于 2010-12-31T01:35:55.427 に答える
1

リックは上記のタプルを提案しましたが、実際には各プレーヤーに2つの独立した動きをさせたい場合があるため、2回続けて順番を維持します。これにより、移動の順序付けが簡単になりますが、使用しているアルゴリズムによっては、検索アルゴリズムが複雑になる場合があります。

UCT(単純な実装ではミニマックスを上回る可能性が高い)のようなアルゴリズムでは、アルゴリズムが最初にどの移動配置が適切であるかを判断し、次にどの回転が最適であるかを判断できるため、2つの移動に分割する方が効率的です。(グーグルUCTはあまり役に立ちません。元の研究論文はあまり洞察力がありませんが、このページの方が良いかもしれません:http ://senseis.xmp.net/?UCT )

于 2010-12-31T01:55:57.023 に答える