3

我正在尝试Pentago用c#开发-game。

现在我有 2 人模式,工作得很好。

问题是,我想要一个玩家模式(针对计算机),但不幸的是,minimax / negamax 的所有实现都是为每个“移动”(放置大理石,移动游戏块)计算的一件事。

butin Pentago,每个玩家需要做件事(放置大理石,并旋转其中一个内板)

我不知道如何实现旋转部分和放置大理石,我希望有人能指导我。

如果你不熟悉游戏,这里有一个游戏链接

如果有人想要,我可以在相关的地方上传我的代码。

非常感谢你

4

2 回答 2

1

如果单个合法移动由两个子移动组成,那么出于游戏算法目的的“移动”只是一个元组,其中第一项是弹珠位置,第二项是棋盘旋转,例如:

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

Rick 建议了上面的元组,但实际上您可能希望每个玩家进行两次独立移动,因此仍然轮到他们连续两次。这可以使移动排序更容易,但可能会使您的搜索算法复杂化,具体取决于您使用的是哪一种。

在像 UCT 这样的算法中(对于简单的实现,它可能优于极小极大),分成两个动作可能更有效,因为该算法可以首先确定哪些动作的放置是好的,然后再找出最好的旋转。(谷歌搜索 UCT 并没有给出太多。原始研究论文不是很有见地,但这个页面可能会更好:http ://senseis.xmp.net/?UCT )

于 2010-12-31T01:55:57.023 回答