战舰游戏AI猜测相同内容
我用Python做了一个战舰游戏。现在,这个游戏里有一个简单的人工智能,它会随机猜测一个还没有猜过的地方,试图找到那艘两格大的战舰。我想让这个人工智能更聪明一点,所以给它设定了一个猜测的模式。为了生成这个AI的猜测,我用了下面的代码。
while X == 0 | Y == 0:
X = 0
Y = 0
guess_col = guessCol(0, size - 1)
guess_row = guessRow(0, size - 1)
# Make sure the guess follows the pattern
if (guess_col + guess_row)%2 != 1:
X = 1
# Make sure the spot has not already been guessed
if board[guess_row][guess_col] != "~":
Y = 1
游戏的棋盘看起来是这样的。
1 2 3 4 5 6 7 8 9
1 ~ ~ ~ ~ ~ ~ ~ ~ ~
2 ~ ~ ~ ~ ~ ~ ~ ~ ~
3 ~ ~ ~ ~ ~ ~ ~ ~ ~
4 ~ ~ ~ ~ ~ ~ ~ ~ ~
5 ~ ~ ~ ~ ~ ~ ~ ~ ~
6 ~ ~ ~ ~ ~ ~ ~ ~ ~
7 ~ ~ ~ ~ ~ ~ ~ ~ ~
8 ~ ~ ~ ~ ~ ~ ~ ~ ~
9 ~ ~ ~ ~ ~ ~ ~ ~ ~
这个模式运行得很好,但新的AI现在会猜测它已经猜过的地方,这样就变得很低效,也不太聪明。我还尝试过用if board[guess_row][guess_col] == "~":
,但这也导致模式无法正常工作。我该怎么做才能让AI只猜测它还没有猜过的地方呢?
1 个回答
4
这一行代码:
while X == 0 | Y == 0:
并不是你想的那样。|
是位运算中的“或”,在 Python 中(和 C 语言家族不同),它的优先级比 ==
高。因此,Python 会把这一行解析成:
while X == (0 | Y) == 0:
这其实等同于:
while X == Y == 0:
由于比较运算符的链式操作,这又等同于:
while (X == Y) and (Y == 0):
这又等同于:
while (X == 0) and (Y == 0):
这绝对不是你写 X == 0 | Y == 0
时想要实现的效果!
与其使用位运算中的“或”,不如用逻辑运算中的“或”,在 Python 中用 or
来表示:
while X == 0 or Y == 0: