Ошибка в игре в крестики-нолики, но ошибка не выводится

#python

#python

Вопрос:

Я создал базовую игру в крестики-нолики, и, кажется, все работает, за исключением проверки большинства ситуаций с X win. O отлично работает во всех случаях, но X — нет. Я не понимаю, что не так.

Я попытался объединить условия выигрыша в одну группу, и это не сработало. Я не вижу никаких ошибок.

 def def_board():
  global board
  empty = "| |"
  board = {'1':empty, '2':empty, '3':empty, '4':empty, '5':empty, '6':empty, '7':empty, '8':empty, '9':empty,}
  print("Board:")
  print('|1|2|3|n|4|5|6|n|7|8|9|')

def board_check_x():
  board_check_board = ["null", board['1'], board['2'], board['3'] ,board['4'],board['5'],board['6'],board['7'],board['8'],board['9']]
  if "|X|" == board_check_board[1] and "|X|" == board_check_board[2] and "|X|" == board_check_board[3]:
    player_win("2")
  if "|X|" == (board_check_board[4] and "|X|" == board_check_board[5] and "|X|" == board_check_board[6]):
    player_win("2")
  if "|X|" == (board_check_board[7] and "|X|" == board_check_board[8] and "|X|" == board_check_board[9]):
    player_win("2")
  if "|X|" == (board_check_board[1] and "|X|" == board_check_board[4] and "|X|" == board_check_board[7]):
    player_win("2")
  if "|X|" == (board_check_board[2] and "|X|" == board_check_board[5] and "|X|" == board_check_board[8]):
    player_win("2")
  if "|X|" == (board_check_board[3] and "|X|" == board_check_board[6] and "|X|" == board_check_board[9]):
    player_win("2")
  if "|X|" == (board_check_board[1] and "|X|" == board_check_board[5] and "|X|" == board_check_board[9]):
    player_win("2")
  if "|X|" == (board_check_board[3] and "|X|" == board_check_board[5] and "|X|" == board_check_board[7]):
    player_win("2")

def board_check_o():
  board_check_board = ["null", board['1'], board['2'], board['3'] ,board['4'],board['5'],board['6'],board['7'],board['8'],board['9']]
  if "|O|" == board_check_board[1] and "|O|" == board_check_board[2] and "|O|" == board_check_board[3]:
    player_win("1")
  elif "|O|" == board_check_board[4] and "|O|" == board_check_board[5] and "|O|" == board_check_board[6]:
    player_win("1")
  elif "|O|" == board_check_board[7] and "|O|" == board_check_board[8] and "|O|" == board_check_board[9]:
    player_win("1")
  elif "|O|" == board_check_board[1] and "|O|" == board_check_board[4] and "|O|" == board_check_board[7]:
    player_win("1")
  elif "|O|" == board_check_board[2] and "|O|" == board_check_board[5] and "|O|" == board_check_board[8]:
    player_win("1")
  elif "|O|" == board_check_board[3] and "|O|" == board_check_board[6] and "|O|" == board_check_board[9]:
    player_win("1")
  elif "|O|" == board_check_board[1] and "|O|" == board_check_board[5] and "|O|" == board_check_board[9]:
    player_win("1")
  elif "|O|" == board_check_board[3] and "|O|" == board_check_board[5] and "|O|" == board_check_board[7]:
    player_win("1")

  

Я хочу, чтобы игра проверила, получаете ли вы X три раза подряд. Вместо этого игра не регистрирует ее для случая X, но отлично работает для O.

Ответ №1:

Обновите свою board_check_x функцию.

Попробуйте это:

 def board_check_x():
  board_check_board = ["null", board['1'], board['2'], board['3'] ,board['4'],board['5'],board['6'],board['7'],board['8'],board['9']]
  if "|X|" == board_check_board[1] and "|X|" == board_check_board[2] and "|X|" == board_check_board[3]:
    player_win("2")
  elif "|X|" == board_check_board[4] and "|X|" == board_check_board[5] and "|X|" == board_check_board[6]:
    player_win("2")
  elif "|X|" == board_check_board[7] and "|X|" == board_check_board[8] and "|X|" == board_check_board[9]:
    player_win("2")
  elif "|X|" == board_check_board[1] and "|X|" == board_check_board[4] and "|X|" == board_check_board[7]:
    player_win("2")
  elif "|X|" == board_check_board[2] and "|X|" == board_check_board[5] and "|X|" == board_check_board[8]:
    player_win("2")
  elif "|X|" == board_check_board[3] and "|X|" == board_check_board[6] and "|X|" == board_check_board[9]:
    player_win("2")
  elif "|X|" == board_check_board[1] and "|X|" == board_check_board[5] and "|X|" == board_check_board[9]:
    player_win("2")
  elif "|X|" == board_check_board[3] and "|X|" == board_check_board[5] and "|X|" == board_check_board[7]:
    player_win("2")
  

Если ваш o работает, это должно сработать и для x. Я только что переработал вашу функцию o для поиска x с помощью двух быстрых регулярных выражений в моем редакторе.