Здравствуйте! Я делаю игру "Крестики - Нолики" на Python.
Код у меня частично работает.
В чем все таки проблема?
Я хожу крестиком.
Компьютер ходит Ноликом, все работает, но почему то нолик иногда не ставится на поле, почему так?
Вот код:
import random as r
import time
# Игровое поле
playing_field = [
[[],[],[]],
[[],[],[]],
[[],[],[]]
]
# Флаги
win = False
lose = False
def game():
# Вывести игровое поле в столбик
for i in playing_field:
print(i)
while True:
movie()
def movie():
"""Основной геймплей."""
print("Ваш ход: \n")
try:
a = int(input("Укажите строку: "))
b = int(input("Укажите место: "))
robot_a = r.randint(1, 3)
robot_b = r.randint(1, 3)
except:
print("\n Ошибка! \n")
try:
# [a - 1][b - 1] Чтобы индекс совпадал с номером строки и места.
# Проверка имеется ли "X" или "O", если нет - ставится "X"
if playing_field[a-1][b-1] == "X" or playing_field[a - 1][b - 1] == "O":
print("\n Ошибка! \n")
movie()
else:
playing_field[a - 1][b - 1] = "X"
!!! ВАЖНОЕ МЕСТО !!!
# Проверка имеется ли "X" или "O", если нет - ставится "O"
while playing_field[robot_a-1][robot_b-1] != "O":
if playing_field[robot_a-1][robot_b-1] == "X" or playing_field[robot_a - 1][robot_b - 1] == "O":
robot_a = r.randint(1, 3)
robot_b = r.randint(1, 3)
else:
playing_field[robot_a-1][robot_b-1] = "O"
for i in playing_field:
print(i)
except:
print("\n Ошибка \n")
movie()
С "X" все в порядке, а с "O" не очень.
Это не полный код, так как он не поместился (ну там всеравно дальше идет просто условие выигрыша), главное находится в movie().
Пожалуйста подскажите что не так!
Python
Что не так в моем коде? Крестики - Нолики на python
Проблема с вашим кодом заключается в блоке while-цикла, который отвечает за размещение символа "O" на поле. Код выбирает случайные индексы robot_a и robot_b, и затем пытается разместить символ "O" в ячейке с этими индексами. Однако, если первоначально выбранные индексы указывают на ячейку, которая уже занята символом "X" или "O", код не обновляет индексы и остается в бесконечном цикле.
Вам необходимо обновить блок while-цикла, чтобы он продолжал генерировать новые случайные индексы до тех пор, пока не будет найдена свободная ячейка. Здесь приведен обновленный код для этого блока:
В этом случае, код будет генерировать новые случайные индексы, пока не будет найдена свободная ячейка, а затем разместит символ "O" в этой ячейке.
Обратите внимание, что я также переместил строку playing_field[robot_a-1][robot_b-1] = "O" внутрь цикла, чтобы символ "O" размещался только после того, как будет найдена свободная ячейка.
Надеюсь, это поможет исправить проблему с размещением символа "O" на поле в вашей игре "Крестики - Нолики"!
-------------
Как правило не пользуюсь нейросеткой на этом проекте. Но возможно именно в этом вопросе она поможет. Успехов.
Вам необходимо обновить блок while-цикла, чтобы он продолжал генерировать новые случайные индексы до тех пор, пока не будет найдена свободная ячейка. Здесь приведен обновленный код для этого блока:
while playing_field[robot_a-1][robot_b-1] == "X" or playing_field[robot_a-1][robot_b-1] == "O":
robot_a = r.randint(1, 3)
robot_b = r.randint(1, 3)
playing_field[robot_a-1][robot_b-1] = "O"
В этом случае, код будет генерировать новые случайные индексы, пока не будет найдена свободная ячейка, а затем разместит символ "O" в этой ячейке.
Обратите внимание, что я также переместил строку playing_field[robot_a-1][robot_b-1] = "O" внутрь цикла, чтобы символ "O" размещался только после того, как будет найдена свободная ячейка.
Надеюсь, это поможет исправить проблему с размещением символа "O" на поле в вашей игре "Крестики - Нолики"!
-------------
Как правило не пользуюсь нейросеткой на этом проекте. Но возможно именно в этом вопросе она поможет. Успехов.
Anzor Tabidze
Спасибо вам, это именно тот код и та задумка которую я хотел
Проблема в вашем коде возникает в следующем участке:
Проблема состоит в том, что цикл while проверяет условие playing_field[robot_a-1][robot_b-1] != "O", но не предусмотрено условие, при котором цикл прерывается, если достигнуто максимальное количество попыток для установки "O". Это может приводить к бесконечному циклу, когда все места на игровом поле уже заняты.
Рекомендуется добавить переменную для отслеживания количества попыток установки "O" и ограничить это количество. Например, вы можете добавить счетчик attempt и проверить его значение внутри цикла while. Если количество попыток превышает определенное число (например, 10), выходить из цикла.
Вот пример исправленного кода для этой части:
while playing_field[robot_a-1][robot_b-1] != "O":
if playing_field[robot_a-1][robot_b-1] == "X" or playing_field[robot_a - 1][robot_b - 1] == "O":
robot_a = r.randint(1, 3)
robot_b = r.randint(1, 3)
else:
playing_field[robot_a-1][robot_b-1] = "O"
Проблема состоит в том, что цикл while проверяет условие playing_field[robot_a-1][robot_b-1] != "O", но не предусмотрено условие, при котором цикл прерывается, если достигнуто максимальное количество попыток для установки "O". Это может приводить к бесконечному циклу, когда все места на игровом поле уже заняты.
Рекомендуется добавить переменную для отслеживания количества попыток установки "O" и ограничить это количество. Например, вы можете добавить счетчик attempt и проверить его значение внутри цикла while. Если количество попыток превышает определенное число (например, 10), выходить из цикла.
Вот пример исправленного кода для этой части:
attempt = 0
while playing_field[robot_a-1][robot_b-1] != "O":
if playing_field[robot_a-1][robot_b-1] == "X" or playing_field[robot_a - 1][robot_b - 1] == "O":
robot_a = r.randint(1, 3)
robot_b = r.randint(1, 3)
attempt += 1
if attempt > 10:
break
else:
playing_field[robot_a-1][robot_b-1] = "O"
breakТаким образом, код будет проверять количество попыток и прерывать цикл, если оно превышает 10. Это предотвратит зацикливание программы и позволит установить "O" на доступное место, если оно есть.
Максим Матюшин
chatgpt moment
Anzor Tabidze
Спасибо за ответ
ну как минимум тут пробелов нету на маиле
Зачем ты играешь к крестики нолики когда уже вышел симулятор чистинья зубов и симулятор камня
Anzor Tabidze
Это итоговый проект на занятии
Похожие вопросы
- Переписать код из С++ в Python
- Крестики Нолики с ИИ в питоне помогите сделать, версии из интернета работают некорректно
- Подскажите что не так с кодом? Метод хорд на Python.
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Где ошибка в коде? (Python)
- Python удаление кода через некоторое промежуток времени
- Помощь с Python Завершение после выполнения части кода
- Можно ли создать свой редактор кода на PYTHON?
- Помогите написать программу на Python, моя версия кода на скрине, вроде всё работает, но автопроверка не проходит.
- Проблема с кодом в Python