#----------global variables------------ #https://www.youtube.com/watch?v=BHh654_7Cmw #Create a board import random board = ['-','-','-', '-','-','-', '-','-','-'] #if game is still going GAME_GOING = True #who won? WINNER = None #define valid symbols SYMBOLS = {'X','O'} #define players PLAYER1 = "" PLAYER2 = "" #define how many players SINGLE_PLAYER = True CURRENT_PLAYER = random.choice(list(SYMBOLS)) def main(): global CURRENT_PLAYER global SINGLE_PLAYER global PLAYER1 global PLAYER2 mode = input("Single player mode y/n: ") if mode not in "yn": print("You did not select a valid option no game for you") exit(1) if mode == "y": SINGLE_PLAYER = True else: SINGLE_PLAYER = False player_1 = input("Choose X or O for Player 1: ") if player_1 not in SYMBOLS: print("You did not select a valid option no game for you") exit(1) PLAYER1 = player_1 PLAYER2 = (SYMBOLS - {player_1}).pop() display_board () #while the game is still going while GAME_GOING: #handle a turn handle_turn() #check if he game has ended check_if_game_over() # cahnge to the other player CURRENT_PLAYER = (SYMBOLS - {CURRENT_PLAYER}).pop() #the game has ended if WINNER == 'X' or WINNER == 'O': print (WINNER + "won.") elif WINNER == None: print ("Tie.") def display_board (): print(board [0]+ '|'+ board[1]+'|'+ board [2]) print(board [3]+ '|'+ board[4]+'|'+ board [5]) print(board [6]+ '|'+ board[7]+'|'+ board [8]) #play game of tic tac toe def handle_turn(): # import pdb; pdb.set_trace() print("Current Player {}".format(CURRENT_PLAYER)) while True: if SINGLE_PLAYER: if CURRENT_PLAYER == PLAYER1: #take player input choice = input('Choose a position from 1 to 9: ') else: choice = random.choice(find_open_spaces()) else: #take player input choice = input('Choose a position from 1 to 9: ') if validate_choice(choice): break else: print("Invalid choice") board[choice] == current_player def validate_choice(choice): is_valid = False try: choice = int(choice) except ValueError: return is_valid import pdb; pdb.set_trace() if choice in list(range(0,9)) and choice in find_open_spaces(): valid = True else: brake return is_valid def check_if_game_over(): check_if_win() check_if_tie() def check_if_win(): #call global variable global winner #check rows row_winner = check_rows() #check columns column_winner = check_columns() #check diagonals diagonal_winner = check_diagonal() if row_winner: #there is a winner winner = row_winner elif column_winner: #there is a winner winner = column_winner elif diagonal_winner: #there is a winner winner = diagonal_winner else: winner = None return def check_rows(): 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_going = False #display the winner if row_1: return board[0] if row_2: return board[3] if row_3: return board[6] return def check_columns(): column_1 = board[0] == board[3] == board[6] != '-' column_2 = board[1] == board[4] == board[7] != '-' column_3 = board[2] == board[5] == board[8] != '-' #display the winner if column_1: return board[0] if column_2: return board[1] if column_3: return board[2] return def check_diagonal(): diagonal_1 = board[0] == board[4] == board[8] != '-' diagonal_2 = board[2] == board[4] == board[6] != '-' #display the winner if diagonal_1: return board[0] if diagonal_2: return board[2] return #check_if_tie def check_if_tie(): global game_going if "-" not in board: game_going = False return #change between players def change_player(): #call global variable global current_player #if the current player was X we change to O if current_player == 'X': current_player = 'O' #if current player is O, change to X elif current_player == 'O': current_player = 'X' return def find_open_spaces(): #find a random space to select open_spaces = [] for i in board: if i == "-": open_spaces.append(i) return open_spaces if __name__ == "__main__": main()