需要Reversi gam的说明吗

2024-06-01 06:50:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用Python编写Reversi游戏。谁能给我一些简单、好、易用的基本思路和策略吗?在

我会感谢任何帮助,因为我已经走了一点远,但在代码之间卡住了,它也变得更加复杂。我想我在一些应该很简单的地方做得太多了。所以。。。。在


Tags: 代码游戏地方策略我会reversi基本思路
3条回答

wikipedia page提供了reversi/othello的所有规则和一些不错的策略建议。基本上,你需要某种数据结构来表示棋盘的状态,也就是说棋盘上所有棋子在游戏中任何一点的位置。正如其他人所建议的那样,2d数组可能是一个不错的选择,但只要它是一个对您有意义的表示,它其实并不重要。一些困难的事情是找出哪些空格是有效的移动,然后找出哪些片段可以翻转,但是,同样,wikipedia页面包含了所有的细节,所以它应该不会太难实现。在

如果你想为你的游戏创建一个人工智能,那么我建议你看看一些带有Alpha-Beta剪枝的minimax类型的算法。在网络上有大量的资源,一个使用minimax和一个不错的评估功能的人工智能将能够很容易地击败大多数人类玩家,因为它可以在很短的时间内看到至少8到9个动作。在minimax上还有其他一些更有趣的变体,比如negamax或negascout,它们可以比基本的minimax做得更好,但我先从更简单的一些开始。Wikipedia有关于所有这些算法的页面,并且有大量关于这些算法的信息,因为许多人工智能课程都将这些算法用于《奥赛罗》或类似的课程。其中一个特别有用的页面是this Java Applet。它允许您在一个样本状态树上逐步执行minimax和negamax的步骤,无论是否进行alpha-beta修剪。在

如果这些都没有道理,告诉我。在

你需要一个二维阵列。当心[[0]*8]*8,而用[[0]代表∗[0]*8]代表∗[0]*8]

白色应该是1,黑色应该是1(当然,反之亦然)。这样你就可以用*=-1做翻转,并保持空白 双四循环将能够得到总得分,并确定比赛是否做得很好。map(sum,map(sum,board))将给出您的净分数

别忘了检查一下球员是否能在回合开始时移动

Reversi是一个优雅简单的游戏。我将使用psuedo C#/Java语言来解释一些概念,但是您可以将它们转换为Python。在

要将其分解为最简单的组成部分,您有两个基本要素:

表示游戏板的二维数组:

gameBoard[10,10]

以及某种形式的枚举,用于存储游戏板中每个磁贴的状态:

^{pr2}$

要渲染棋盘,请在游戏板数组中循环,并以棋子大小的偏移量增加:

for (int i = 0; i < 10; i++)
{
    for (int j = 0; j < 10; j++)
    {
        // The Piece to draw would be at gameBoard[i,j];
        // Pixel locations are calculated by multiplying the array location by an offset.
        DrawPiece(gameBoard[i,j],i * Width of Tile, j * width of tile);
    }
}

同样,将鼠标单击解析回数组中的某个位置也类似,请使用鼠标位置和偏移量来计算实际的平铺。在

每次放置平铺时,您都会扫描整个数组,并根据新颜色应该是什么应用一个简单的基于规则的引擎。(这才是真正的挑战,我把它留给你。)

人工智能可以利用这个虚拟移动阵列扫描的优势,让它扫描10个左右可能的移动,然后选择产生最佳结果的一个。尽量不要让它变得聪明,因为当你让它在它的头脑里玩完整个游戏时,它很容易成为一个无敌的人工智能。在

当阵列中不再有空闲位置时,游戏结束。在

相关问题 更多 >