Моя функция Ti c Ta c Toe "t ie" не будет работать - что мне не хватает? - PullRequest
0 голосов
/ 28 апреля 2020

Я разместил весь код на всякий случай - я считаю, что он либо в функциях "play_game" или "check_t ie". Я следовал учебному пособию, и эти части (play_game & check_t ie) написаны так же, как и в учебнике, другие части, которые не связаны с функцией check_t ie, которую я написал по-своему. Все в игре работает кроме функции check_t ie. Игра просто не остановится.

Спасибо за помощь!

game_still_going = True
winner = None
current_player = ''


board = ["-", "-", "-",
         "-", "-", "-", 
         "-", "-", "-"]


def play_game():
  players()
  display_board()
  while game_still_going:
    handle_turn(current_player)
    check_if_game_over()
    flip_player()
  if winner == 'X' or winner == 'O': 
    print (winner + " is the winner!!!")
  elif winner == None:
    print ("Tie.")


def players():
  global current_player
  print("Select your symbol: 'X' or 'O'")
  p1 = input("Player one: ")
  if p1.upper() == 'X':
    p2 = 'O'
    current_player = 'X'
    print ('Player 1: ' + p1.upper())
    print ('Player 2: ' + p2)
  elif p1.upper() == 'O':
    p2 = 'X'
    current_player = 'O'
    print ('Player 1: ' + p1.upper())
    print ('Player 2: ' + p2)
  elif p1 != 'X' and p1 != 'O':
    print ('Invalid input sorry, try again')
    players()


def display_board():
  print("\n")
  print (board[0] + " | " + board[1] + " | " + board[2])
  print (board[3] + " | " + board[4] + " | " + board[5])
  print (board[6] + " | " + board[7] + " | " + board[8])
  print("\n")


def handle_turn(player):
  print (player + "'s turn.")
  position = input('Choose a position from 1-9: ')
  if position not in ["1", "2", "3", "4", "5", "6", "7", "8", "9"]:
    print ("Invalid input. try again")
    display_board()
    handle_turn(player)
  else:
    position = int(position) - 1
    if board[position] == "-":
      board[position] = player
      display_board()
    elif board[position] == 'X' or board[position] == 'O':
      print ("That slot is taken! Try again.")
      display_board()
      handle_turn(player)


def check_if_game_over():
  check_for_winner()
  check_tie()


def check_for_winner():
  global winner
  # check rows
  row_winner = check_rows()
  column_winner = check_columns()
  diagonal_winner = check_diagonals()
  if row_winner: 
    winner = row_winner
  elif column_winner:
    winner = column_winner
  elif diagonal_winner:
    winner = diagonal_winner
  else:
    winner = None


def check_rows():
  global game_still_going
  row_1 = board[0] == board[1] == board[2] != '-'
  row_2 = board[3] == board[4] == board[5] != '-'
  row_3 = board[6] == board[7] == board[8] != '-'
  if row_1 or row_2 or row_3:
    game_still_going = False
  if row_1:
    return board[0]
  if row_2:
    return board[3]
  if row_3:
    return board[6]
  return


def check_columns():
  global game_still_going
  column_1 = board[0] == board[3] == board[6] != '-'
  column_2 = board[1] == board[4] == board[7] != '-'
  column_3 = board[2] == board[5] == board[8] != '-'
  if column_1 or column_2 or column_3:
    game_still_going = False
  if column_1:
    return board[0]
  if column_2:
    return board[1]
  if column_3:
    return board[2]
  return


def check_diagonals():
  global game_still_going
  diagonal_1 = board[0] == board[4] == board[8] != '-'
  diagonal_2 = board[2] == board[4] == board[6] != '-'
  if diagonal_1 or diagonal_2:
    game_still_going = False
  if diagonal_1:
    return board[0]
  if diagonal_2:
    return board[2]
  return


def check_tie():
  global game_still_going
  if '-' not in board:
    game_stil_going = False
#    return winner
  else:
    return False 


def flip_player():
  global current_player
  if current_player == 'X':
    current_player = 'O'
  elif current_player == 'O':
    current_player = 'X'
  return

play_game()
...