In this article we’ll see how to develop tic-tac-toe game in Python.
The tic-tac-toe game we are going to develop is a two player game played in the command line. Steps in the program are as follows-
- Give an option to the player 1 to choose symbol (‘X’ or ‘O’).
- Create a tic-tac-toe board with index numbers making it easy for the players to input the index where they want their symbol to be placed.
- Give each player a chance to place the symbol alternatively until one of the players has won the game or the game is drawn.
Tic-tac-toe game – Python code
def user_choice(): choice = ' ' flag = False while not choice.isdigit() or not flag: choice = input('Please input a number (0-10): ') if choice.isdigit() and int(choice) in range(0, 10): flag = True return int(choice) else: print('Enter number between 0 and 10') flag = False def display_board(board): print('\n') print(' ' + board + ' | ' + board + ' | ' + board) print('-----------') print(' ' + board + ' | ' + board + ' | ' + board) print('-----------') print(' ' + board + ' | ' + board + ' | ' + board) def player_input(): marker = '' while not (marker == 'X' or marker == 'O'): marker = input('Player 1: Do you want to be X or O? ').upper() if marker == 'X': return ('X', 'O') else: return ('O', 'X') def place_symbol(board, symbol, position): if board[position] in ('X', 'O'): print('Position already marked') board[position] = symbol def check_marked_position(board, position): if board[position] in ('X', 'O'): print('Position already marked') return False return True def select_player_position(board, player): position = 0 while position not in range(1, 10) or not check_marked_position(board, position): position = int(input(player + ' Choose your next position: (1-9) ')) return position def is_winner(board, symbol): return ((board == symbol and board == symbol and board == symbol) or # top row (board == symbol and board == symbol and board == symbol) or # middle row (board == symbol and board == symbol and board == symbol) or # bottom row (board == symbol and board == symbol and board == symbol) or # first column (board == symbol and board == symbol and board == symbol) or # second column (board == symbol and board == symbol and board == symbol) or # third column (board == symbol and board == symbol and board == symbol) or # diagonal (board == symbol and board == symbol and board == symbol)) # diagonal def is_board_full(board): full_flag = True for i in range(1, 10): if board[i] not in ('X', 'O'): full_flag = False return full_flag def start_play(): while True: player1_symbol, player2_symbol = player_input() tictac_board = ['#', '1', '2', '3', '4', '5', '6', '7', '8', '9'] turn = 'Player1' play_again_flag = 'Y' symbol = '' display_board(tictac_board) while True: if turn == 'Player1': symbol = player1_symbol else: symbol = player2_symbol position = select_player_position(tictac_board, turn) place_symbol(tictac_board, symbol, position) display_board(tictac_board) if is_winner(tictac_board, symbol): print('Yeey! ' + turn + ' won!') break if is_board_full(tictac_board): print('It''s a draw!') break else: turn = 'Player2' if turn is 'Player1' else 'Player1' play_again_flag = input('Do you want to play again? Enter Y or N: ') print(play_again_flag.lower()) if play_again_flag.lower() != 'y': break start_play()
- start_play() function is the main function where first task is to ask player 1 to choose preferred symbol out of ‘X’ or ‘O’. This is done by calling player_input() function.
- To display tic-tac-toe board display_board() function is called passing list tictac_board = [‘#’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’, ‘6’, ‘7’, ‘8’, ‘9’] as an argument. Since index 0 is not required so that has a placeholder value ‘#’.
- In a while loop each player gets a chance to place their respective symbol. Functions used for this task are select_player_position() and place_symbol().
- While placing a symbol it is required to check if the selected position is already marked or not that is done using check_marked_position() function.
- After each turn it is also required to check if there is a winner that is done using is_winner() function. Another thing to check is whether the board is full that is done using is_board_full() function.
- Python Multi-threading Tutorial
- Inheritance in Python With Examples
- super() in Python With Examples
- Python Program to Delete Files Having a Specific Extension
- How to Copy File in Python
- Name Mangling in Python With Examples
That’s all for the topic Tic-Tac-Toe Game in Python. If something is missing or you have something to share about the topic please write a comment.
You may also like