Milestone Project 1: Walk-through Steps Workbook

Below is a set of steps for you to follow to try to create the Tic Tac Toe Milestone Project game!


In [86]:
# For using the same code in either Python 2 or 3
from __future__ import print_function 

## Note: Python 2 users, use raw_input() to get player input. Python 3 users, use input()

Step 1: 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.


In [87]:
from IPython.display import clear_output
def display_board(board):
    clear_output()
    # implementation is really janky in tut

Step 2: 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.


In [3]:
def player_input():
    marker = ''
    while not (marker == 'O' or marker == 'X'):
        marker = raw_input('Player 1: Do you want to be O or X? ').upper()
    
    if marker == 'X':
        return ('X', 'O')
    else:
        return ('O','X')

In [4]:
player_input()


Player 1: Do you want to be O or X? O
Out[4]:
('O', 'X')

Step 3: 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.


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

Step 4: Write a function that takes in a board and a mark (X or O) and then checks to see if that mark has won.


In [90]:
def win_check(board,mark):
    # lots of manual checks in tut
    pass

Step 5: 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.


In [8]:
import random
def choose_first(): # janky
    if random.randint(0, 1) == 0:
        return 'Player 1'
    else: 
        return 'Player 2'

Step 6: Write a function that returns a boolean indicating whether a space on the board is freely available.


In [7]:
def space_check(board, position):
    return board[position] == ' ' # janky

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


In [5]:
def full_board_check(board):
    # janky implement using a 1D array
    for i in range(1, 10):
        if space_check(board, i):
            return False
        
    return True

Step 8: 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.


In [9]:
def player_choice(board):
    position = ''
    while position not in '1 2 3 4 5 6 7 8 9'.split() or not space_check(board[int(position)]):
        position = raw_input('Choose your next position: (1-9)')
    return position

Step 9: 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.


In [10]:
def replay():
    # what's interesting is the str func chaining
    return raw_input('Do you want to play again? Enter Yes or No').lower().startswith('y')

Step 10: Here comes the hard part! Use while loops and the functions you've made to run the game!


In [7]:
print('Welcome to Tic Tac Toe!')

while True:
    # Set the game up here
    theBoard = [' '] * 10
    player1_marker, player2_marker = player_input() #tuple unpacking
    turn = choose_first()
    print(turn + 'will go first!')

    game_on = True
    while game_on:
        #Player 1 Turn
        if turn == 'Player 1': # janky
            display_board(theBoard)
            position = player_choice(theBoard)
            place_marker(theBoard, player1_marker, position)
            
            if win_check(theBoard, player1_marker):
                display_board(theBoard)
                print('Congrats, {pl}, has won the game!'.format(pl=turn))
                game_on = False
            else:
                turn = 'Player 2' # janky
        
        # Player2's turn.
        if turn == 'Player 2':
            display_board(theBoard)
            position = player_choice(theBoard)
            place_marker(theBoard, player2_marker, position)
            
            if win_check(theBoard, player2_marker):
                display_board(theBoard)
                print('Congrats, {pl}, has won the game!'.format(pl=turn))
                game_on = False
            else:
                turn = 'Player 1' # janky

        if not replay():
            break


Welcome to Tic Tac Toe!

Good Job!