Как мне исправить эту игру, чтобы, если средняя колонка была заполнена, она не показала T ie? - PullRequest
0 голосов
/ 30 января 2020

Привет, я новичок в кодировании, и я сделал эту игру, но всякий раз, когда я в нее играю и заполняю средний столбец X или O, он говорит мне, что он на * 1005. * вместо того, чтобы сказать мне, что победителем является X или O. Как бы я это исправить, чтобы, если X заполняет весь средний столбец или X заполняет весь средний столбец, он не скажет, что он находится на ie, но говорит я, кто победитель?

#Game Board
board = ["-","-","-",
         "-","-","-",
         "-","-","-",]


#Game still going
game_still_going = True

#No winner yet
winner = None 

#firt player turn is X
current_player = "X"


#Play a game of Tic Tac Toe
def play_game():


   #display initial board
  display_board()


  #While the game is still going
  while game_still_going:


    #handle single turn of player
    handle_turn(current_player)


    #check if the game has ended
    check_if_game_over()


    #Flip to the other player
    flip_player()


  #The game has ended
  if winner == "X" or winner == "O":
    print(winner + " WON!!")
  elif winner == None:
    print("Tie!")


#Display Board
def display_board():
  print(board[0] + " | " + board[1] + " | " + board[2] + "    1 | 2 | 3")
  print(board[3] + " | " + board[4] + " | " + board[5] + "    4 | 5 | 6") 
  print(board[6] + " | " + board[7] + " | " + board[8] + "    7 | 8 | 9")


def handle_turn(player):

  print("")
  print(player + "'s turn")
  position = input("Choose a position from 1 to 9: ")


  valid = False
  while not valid:


    while position not in ["1", "2", "3", "4", "5", "6", "7", "8", "9"]:
      position = input("Invalid input. Choose a position from 1 to 9: ")


    position = int(position) - 1


    if board[position] == "-":
      valid = True
    else:
      print("You cant go there. Go Again.")


  board[position] = player


  display_board()


def check_if_game_over():
  check_for_winner()
  check_for_tie()


def check_for_winner():
  global winner
  # check for 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]
  else:
    return None


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_1:
  return board[1]
 if column_1:
  return board[2]
 else:
   return None


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]
  else:
    return None


def check_for_tie():
  global game_still_going
  if "-" not in board:
    game_still_going = False
    return True
  else:
    return False



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



play_game()

1 Ответ

0 голосов
/ 30 января 2020

Если вы посмотрите на def check_columns():, то column_1 повторяется в операторах if, а column_2 & column_3 не используются (как прокомментировал mkrieger1). Вероятно, просто ошибка вырезания и вставки.

Ваш код будет выдавать тот же неправильный "t ie", когда игрок заполнит столбец 2 или столбец 3.

...