我正在尝试制作一款游戏,该游戏实现了修剪过的a-b极小极大游戏树搜索井字游戏(X和Os,结和十字架等)。但是,我还没有。我目前正在编写代码来创建tic-tac-toe板并为板分配点。 这是tic-tac-toe板的代码 - 它现在使用+和 - 而不是X和O,这样我就可以直观地测试我的minimax代码。
class Tictactoe:
__game = [[0, 0, 0] for i in range(0, 3)]
def print(self):
for i in range(0, 3):
for j in self.__game[i]:
print(j, end=" ")
print()
def playMove(self, max, i, j):
if max:
self.__game[i][j] = '+'
else:
self.__game[i][j] = '-'
def testMove(self, max, i, j):
temp = list(self.__game)
if max:
temp[i][j] = '+'
else:
temp[i][j] = '-'
return temp
def getState(self):
return list(self.__game)
def getValue(self, symbol, game):
diag1 = True
diag2 = True
for i in range(0, 3):
column = True
row = True
for j in range(0, 3):
row &= game[i][j] == symbol
column &= game[j][i] == symbol
if i==j:
diag1 &= game[i][j] == symbol
diag2 &= game[i][2-j] == symbol
if row or column or diag1 or diag2:
return 1
return 0
使用Tictactoe的程序如下:
from tictactoe import Tictactoe
t = Tictactoe()
def main():
global t
t.playMove(True,0,2)
t.playMove(True,1,1)
t.playMove(True,2,2)
t.print()
print(t.getValue('+',t.getState()))
print(t.getValue('-',t.getState()))
print(t.getValue('+',t.testMove(True,2,0)))
t.print()
main()
暂时忽略表单 - 我只是想让Tictactoe方法正常工作。运行代码时,我得到了这个:
0 0 +
0 + 0
0 0 +
0
0
1
0 0 +
0 + 0
+ 0 +
我的问题是,我希望能够在做出特定动作后得到一块板的暂定分数 - 这就是这条线
(t.getValue('+',t.testMove(True,2,0))
应该制作游戏板的副本以测试移动。
def testMove(self, max, i, j):
temp = list(self.__game)
if max:
temp[i][j] = '+'
else:
temp[i][j] = '-'
return temp
但是,正如您所看到的,我的打印方法仅打印ACTUAL游戏板 - 不应该通过测试移动板的副本来影响它。但是,我们可以看到在(2,2)处添加一个点的测试实际上增加了游戏的这一点。如果有人能够确切地看到这里发生的事情会很棒。