[Python] I have made a Tic Tac Toe game but it shows the wrong player when someone has won

Discussão em 'Python' iniciado por Stack, Fevereiro 15, 2025.

  1. Stack

    Stack Membro Participativo

    I have made a Tic Tac Toe game in python and when X wins it shoes that O has won and when O wins it shows that X has won. I am pretty sure that the problem is that it changes player and after that checks if someone has won, I tried making it so it will switch be before the player switch but it still didn't work. I also tried to change player in the is_win function but that also didn't fix it. Could someone please take a look at this and help me fix this.

    initial_board = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
    board = initial_board
    def empty_board(): #use board = empty_board() everytime you want to empty the board
    board = [['_', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]
    return(board)
    def switch_turn(player): #use player = switch_turn(player) everytime you want to switch players
    if player == 'X':
    return 'O'
    return 'X'
    def print_board(board):
    print(*board, sep = "\n")
    def is_full(board):
    return all('_' not in box for box in board)
    def is_valid(board, row, col):
    x = board[row]
    if x[col] == '_':
    return True
    return False
    def set_cell(board, row, col, player):
    x = board[row]
    if is_valid(board,row,col) is True:
    x[col] = player
    print_board(board)
    else:
    print("already taken")
    def get_user_input():
    while True:
    while True:
    row = int(input("Enter the row you want (0-2): "))
    if row > 2 or row < 0:
    print("The number you entered is not valid")
    continue
    break
    while True:
    col = int(input("Enter the column you want (0-2): "))
    if col > 2 or col < 0:
    print("The number you entered is not valid")
    continue
    break
    if is_valid(board,row,col) is True:
    return row,col
    else:
    print("This place is taken")
    continue
    def is_win(board,player):
    row1 = board[0]
    row2 = board[1]
    row3 = board[2]
    if row1[0] == row1[1] == row1[2] != '_':
    print(player + " Has won!")
    return True
    elif row2[0] == row2[1] == row2[2] != '_':
    print(player + " Has won!")
    return True
    elif row3[0] == row3[1] == row3[2] != '_':
    print(player + " Has won!")
    return True
    elif row1[0] == row2[0] == row3[0] != '_':
    print(player + " Has won!")
    return True
    elif row1[1] == row2[1] == row3[1] != '_':
    print(player + " Has won!")
    return True
    elif row1[2] == row2[2] == row3[2] != '_':
    print(player + " Has won!")
    return True
    elif row1[0] == row2[1] == row3[2] != '_':
    print(player + " Has won!")
    return True
    elif row1[2] == row2[1] == row3[0] != '_':
    print(player + " Has won!")
    return True
    else:
    return False
    def game():
    player = 'X'
    print_board(board)
    while is_win(board, player) is False:
    if is_full(board) is True and is_win(board, player) is False:
    print("draw")
    break
    elif is_full(board) is True and is_win(board, player) is True:
    print(is_win(board, player))
    break
    row, col = get_user_input()
    set_cell(board, row, col, player)
    player = switch_turn(player)
    game()

    Continue reading...

Compartilhe esta Página