Skip to main content

Make your first project in python: Tick-Tack Toe game

Tick Tack Toe

The whole project goes on in following simple steps


  • Write a function that can print out a board. Set up your board as a list, where each index 1-9 corresponds with a number on a number pad, so you get a 3 by 3 board representation.
    The following code will print a board for our game provided all the values of each column of the board as the list "board". Initially we don't have any values on board so we should pass a space for each element. 
    you can check the board by running the code only.
           
    from IPython.display import clear_output
    
    def display_board(board):
        clear_output()  # Remember, this only works in jupyter!
        
        print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9])
        print('-----------')
        print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6])
        print('-----------')
        print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3])
    
           

  • Write a function that can take in a player input and assign their marker as 'X' or 'O'. Think about using while loops to continually ask until you get a correct answer.
    The following code will take in a player input and assign their marker as 'X' or 'O' means it will ask the player one to chose to be either 'X' or 'O'.
    the function will return a tuple with first element representing the player 1, and second element as the player 2.
           
    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')
           

  • Write a function that takes in the board list object, a marker ('X' or 'O'), and a desired position (number 1-9) and assigns it to the board.

           
    def place_marker(board, marker, position):
        board[position] = marker


  • Write a function that takes in a board and checks to see if someone has won.

    This function when called takes in the board and checks if someone has won or not, in our program we will be calling this function again and again so that continuous checking for winner can be done.
           
    def win_check(board,mark):
        
        return ((board[7] == mark and board[8] == mark and board[9] == mark) or
        (board[4] == mark and board[5] == mark and board[6] == mark) or
        (board[1] == mark and board[2] == mark and board[3] == mark) or
        (board[7] == mark and board[4] == mark and board[1] == mark) or
        (board[8] == mark and board[5] == mark and board[2] == mark) or
        (board[9] == mark and board[6] == mark and board[3] == mark) or
        (board[7] == mark and board[5] == mark and board[3] == mark) or
        (board[9] == mark and board[5] == mark and board[1] == mark))
    


  • Write a function that uses the random module to randomly decide which player goes first. You may want to lookup random.randint() Return a string of which player went first.

           
    import random
    
    def choose_first():
        if random.randint(0, 1) == 0:
            return 'Player 2'
        else:
            return 'Player 1'
           


  • Write a function that returns a Boolean indicating whether a space on the board is freely available.

    This function checks for the free space on the board and if there is any free space available it returns "True" otherwise "False"
           
    def space_check(board, position):
        
        return board[position] == ' '
           


  • Write a function that checks if the board is full and returns a boolean value. True if full, False otherwise.

  •        
    def full_board_check(board):
        for i in range(1,10):
            if space_check(board, i):
                return False
        return True
           


  • Write a function that asks for a player's next position (as a number 1-9) and then uses the function from step 6 to check if its a free position. If it is, then return the position for later use.

  •        
    def player_choice(board, p):
        position = 0
        
        while position not in [1,2,3,4,5,6,7,8,9] or not space_check(board, position):
            position = int(input('Choose your next position player' + p + ' : (1-9) '))
            
        return position
           


  • Write a function that asks the player if they want to play again and returns a boolean True if they do want to play again.

  •        
    def replay():
        
        return input('Do you want to play again? Enter Yes or No: ').lower().startswith('y')
           


  • We will use while loops and the functions we've made to run the game.

  •        
    print('Welcome to Tic Tac Toe!')
    
    while True:
        # Reset the board
        theBoard = [' '] * 10
        player1_marker, player2_marker = player_input()
        turn = choose_first()
        print(turn + ' will go first.')
        
        play_game = input('Are you ready to play? Enter Yes or No.')
        
        if play_game.lower()[0] == 'y':
            game_on = True
        else:
            game_on = False
    
        while game_on:
            if turn == 'Player 1':
                # Player1's turn.
                
                display_board(theBoard)
                position = player_choice(theBoard, '1')
                place_marker(theBoard, player1_marker, position)
    
                if win_check(theBoard, player1_marker):
                    display_board(theBoard)
                    print('Congratulations! You have won the game!')
                    game_on = False
                else:
                    if full_board_check(theBoard):
                        display_board(theBoard)
                        print('The game is a draw!')
                        break
                    else:
                        turn = 'Player 2'
    
            else:
                # Player2's turn.
                
                display_board(theBoard)
                position = player_choice(theBoard, '2')
                place_marker(theBoard, player2_marker, position)
    
                if win_check(theBoard, player2_marker):
                    display_board(theBoard)
                    print('Player 2 has won!')
                    game_on = False
                else:
                    if full_board_check(theBoard):
                        display_board(theBoard)
                        print('The game is a draw!')
                        break
                    else:
                        turn = 'Player 1'
    
        if not replay():
            break
           

Download the complete source code:


You can run the code either by writing the whole code by yourself on your device or run it in the terminal give bellow.



Hope you enjoyed this article and have learned something new for more such topics please follow us.

Comments

Post a Comment