#python
#python
Вопрос:
Я создал игру battleship на Python. В настоящее время в игре есть простой искусственный интеллект, который случайным образом угадывает место, которое он еще не угадал на доске, чтобы попытаться найти двухблочный большой линкор. Я делаю искусственный интеллект более интеллектуальным, задавая ему шаблон для подражания. Чтобы сгенерировать предположение искусственного интеллекта, я использую следующий код.
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 ~ ~ ~ ~ ~ ~ ~ ~ ~
Шаблон работает идеально, но новый ИИ теперь угадывает места, о которых он уже догадался, что делает его очень неэффективным и не очень умным. Я также пробовал использовать if board[guess_row][guess_col] == "~":
, но это приводит к тому, что шаблон также не работает. Как я могу заставить искусственный интеллект угадывать только в тех местах, о которых он еще не догадался?
Комментарии:
1. Вы когда-нибудь меняли значение
board[guess_row][guess_col]
на что-то другое, чем~
? Покажите нам этот код.2. @jwodder Когда блок угадан, он меняется на X, а когда корабль поражен, он меняется на H. У меня есть полный исходный код здесь: github.com/JellyBellyFred/BattleShip
Ответ №1:
Строка:
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:
Комментарии:
1. Спасибо! Я бы никогда не догадался, что я должен изложить
or
!