## January 9, 2024

### Tic-Tac-Toe Game in Python

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-

1. Give an option to the player 1 to choose symbol (‘X’ or ‘O’).
2. 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.
3. 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[1] + ' | ' + board[2] + ' | ' + board[3])
print('-----------')
print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
print('-----------')
print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])

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'):
board[position] = symbol

def check_marked_position(board, position):
if board[position] in ('X', 'O'):
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[1] == symbol and board[2] == symbol and board[3] == symbol) or  # top row
(board[4] == symbol and board[5] == symbol and board[6] == symbol) or  # middle row
(board[7] == symbol and board[8] == symbol and board[9] == symbol) or  # bottom row
(board[1] == symbol and board[4] == symbol and board[7] == symbol) or  # first column
(board[2] == symbol and board[5] == symbol and board[8] == symbol) or  # second column
(board[3] == symbol and board[6] == symbol and board[9] == symbol) or  # third column
(board[1] == symbol and board[5] == symbol and board[9] == symbol) or  # diagonal
(board[3] == symbol and board[5] == symbol and board[7] == 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()
```
1. 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.
2. 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 ‘#’.
3. 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().
4. 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.
5. 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.

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