Я новый программист, и я начал изучать python и хотел научиться кодировать игру c ta c toe.
Игра продолжается, но условия выигрыша и выбор компьютерного поля не работают должным образом: он не знает, когда следует прекратить игру, и иногда компьютер выбирает уже выбранное поле, таким образом отменяя мой выбор (если я пытаюсь чтобы сделать то же самое, я получаю ValueError).
Для алгоритма выигрыша я не хотел go просматривать все варианты вручную, поэтому я использовал наборы. Я создал набор со всеми условиями выигрыша. Итерируя по каждому подмножеству (строки, столбцы и диагонали), я проверяю, является ли это подмножеством позиций игрока / компьютера.
Проблема в том, что это не работает. Если я пытаюсь что-то сделать, я получаю ValueError: list.remove (x) x, которого нет в списке . Иногда я получаю эту ошибку на линии, где удаляется playerChoice, или с компьютера. Другая проблема, как указано выше, заключается в том, что компьютер может отменить мой выбор.
Я думаю, что проблема заключается в удалении элементов из одного набора и добавлении их в другой, но я не могу найти способ обойти это
Вот код:
import random
board = [" ", " ", " ", " ", " ", " ", " ", " ", " "]
playerSymbol = ""
playerPosition = []
aiSymbol = ""
aiPosition = []
possiblePositions = [0, 1, 2, 3, 4, 5, 6, 7, 8]
turn = 0
def drawBoard():
print(board[0] + " | " + board[1] + " | " + board[2])
print("___" + "___" + "___")
print(board[3] + " | " + board[4] + " | " + board[5])
print("___" + "___" + "___")
print(board[6] + " | " + board[7] + " | " + board[8])
def choice():
global playerSymbol
global aiSymbol
answer = input("What do you want to play as? (type x or o) ")
if answer.upper() == "X":
playerSymbol = "X"
aiSymbol = "O"
else:
playerSymbol = "O"
aiSymbol = "X"
def won():
winningPositions = [{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 4, 8}, {2, 4, 6}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}]
for position in winningPositions:
if position.issubset(playerPosition):
print("Player Wins :)")
return True
elif position.issubset(aiPosition):
print("AI wins :(")
return True
else:
return False
def play():
global turn
choice()
while not won():
if turn % 2 == 0:
pos = int(input("Where would you like to play? (0-8) "))
possiblePositions.remove(pos)
playerPosition.append(pos)
board[pos] = playerSymbol
turn += 1
drawBoard()
else:
aiTurn = random.randint(0, len(possiblePositions) - 1)
possiblePositions.remove(possiblePositions[aiTurn])
aiPosition.append(aiTurn)
board[aiTurn] = aiSymbol
turn += 1
print("\n")
print("\n")
drawBoard()
else:
print("Thanks for playing :)")
play()
Я открыт для всевозможных предложений и способов улучшения моего кода. Заранее спасибо и будьте здоровы, Кристи