我的任务是使用pygame和numpy的Tic-Tac_Toe。我几乎完成了所有程序。我只需要帮助了解如何找到胜利者。如果任何行,列或对角线的总和等于3,我会找到胜利者。
我有两个3x3矩阵填充0' s。我们称之为xPlayer和oPlayer。每当玩家x或玩家在某个位置选择他们的选择时,矩阵就会被填充1。因此,如果玩家x选择[0,0],则[0,0]处的矩阵位置获得1值。这应该持续到任何行,列或对角线的总和为3.如果两个矩阵中的所有位置都是1,那么就没有赢家。
我需要帮助找到胜利者。我对python很陌生,所以我不太了解矩阵索引。任何帮助将不胜感激!
编辑:基本上,你如何找出每行,每列和对角线的总和来检查它们中的任何一个是否等于3.
答案 0 :(得分:2)
要在numpy中索引矩阵,只需使用符号A [y,x]引用矩阵A的行y和列x。如果要一次从矩阵中选择多个值,可以使用标准python列表切片。例如,要选择A的最左列,您将使用A [:,0]。
在您的情况下,找到您可以执行的列的总和
sum(xPlayer[:,0])
计算xPlayer最左边一列和
的总和sum(xPlayer[0,:])
表示xPlayer的第一行。在对角线的情况下,您只需要手动添加数组条目,因此其中一个对角线将是:
xPlayer[0,0]+xPlayer[1,1]+xPlayer[2,2]
或者,您可以使用numpy函数计算
行和列的总和xPlayer.sum(0)
计算每列中行数之和
xPlayer.sum(1)
计算每行中各列的总和。你甚至可以在不手动指定索引的情况下计算对角线,所以
sum(xPlayer.diagonal())
表示左上角 - 右上角和
sum(numpy.fliplr(xPlayer).diagonal())
为另一个对角线。
编辑:澄清一下,这适用于"数组"在numpy。所有上述陈述仍可用于"矩阵"通过
将矩阵转换为数组arr = numpy.array(mat)
或适当地使用得到的矩阵。请注意,在后一种情况下,矩阵对于所有操作都不具有相同的形状。
答案 1 :(得分:-2)
设置一个bool来检查每个回合。如果它返回true,那么无论转向它还是赢了
所以,例如,它是x转,他打出胜利的举动,bool检查是否有人赢了,返回true,打印出来(玩家轮到它)赢了!并结束游戏。