Question

In: Computer Science

In Python: Please complete the following two tasks in Tic Tac Toe: 1. Allow the user...

In Python: Please complete the following two tasks in Tic Tac Toe:

1. Allow the user to choose heads/tails to see if the user goes first or the computer and alter your code accordingly.

2. Allow the user to play again.

Add a simple strategy for the AI to play against the user.

Solutions

Expert Solution

Here is the code with both your requirements fulfilled.

Have a nice day :)

import random

def drawBoard(board):
        print(board[1] + '|' + board[2] + '|' + board[3])
        print('-+-+-')
        print(board[4] + '|' + board[5] + '|' + board[6])
        print('-+-+-')
        print(board[7] + '|' + board[8] + '|' + board[9])


def inputPlayerLetter():
        letter=''
        while not(letter=='X' or letter=='O'):
                print("Do you want to be 'X' or 'O'?")
                letter = input().upper()

        if letter == 'X':
                return ['X','O']
        else:
                return ['O','X']


def whoGoesFirst():
        print('Do you want to go first? (Yes or No)')
        if  input().lower().startswith('y'):
                return 'player'
        else:
                return 'computer'


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


def makeMove(board, letter, move):
        board[move] = letter


def isWinner(board,letter):
        return ((board[1]==letter and board[2]==letter and board[3]==letter) or
                        (board[4]==letter and board[5]==letter and board[6]==letter) or
                        (board[7]==letter and board[8]==letter and board[9]==letter) or
                        (board[1]==letter and board[4]==letter and board[7]==letter) or
                        (board[2]==letter and board[5]==letter and board[8]==letter) or
                        (board[3]==letter and board[6]==letter and board[9]==letter) or
                        (board[1]==letter and board[5]==letter and board[9]==letter) or
                        (board[3]==letter and board[5]==letter and board[7]==letter))


def getBoardCopy(board):
        dupBoard = []
        for i in board:
                dupBoard.append(i)
        return dupBoard


def isSpaceFree(board, move):
        return board[move] == ' '


def getPlayerMove(board):
        move = '' 
        while move not in '1 2 3 4 5 6 7 8 9'.split() or not isSpaceFree(board,int(move)):
                print('What is your next move? (1-9)')
                move = input()
        return int(move)


def chooseRandomMoveFromList(board, movesList):
        possibleMoves = []
        for i in movesList:
                if isSpaceFree(board, i):
                        possibleMoves.append(i)

        if len(possibleMoves) != 0:
                return random.choice(possibleMoves)
        else:
                return None


def minimax(board, depth, isMax, alpha, beta, computerLetter):
        if computerLetter == 'X':
                playerLetter = 'O'
        else:
                playerLetter = 'X'
        if isWinner(board, computerLetter):
                return 10
        if isWinner(board, playerLetter):
                return -10
        if isBoardFull(board):
                return 0
        if isMax:
                best = -1000
                for i in range(1,10):
                        if isSpaceFree(board, i):
                                board[i] = computerLetter
                                best = max(best, minimax(board, depth+1, not isMax, alpha, beta, computerLetter) - depth)
                                alpha = max(alpha, best)
                                board[i] = ' '
                                if alpha >= beta:
                                        break
                return best
        else:
                best = 1000
                for i in range(1,10):
                        if isSpaceFree(board, i):
                                board[i] = playerLetter
                                best = min(best, minimax(board, depth+1, not isMax, alpha, beta, computerLetter) + depth)
                                beta = min(beta, best)
                                board[i] = ' '
                                if alpha >= beta:
                                        break
                return best


def findBestMove(board, computerLetter):
        if computerLetter == 'X':
                playerLetter = 'O'
        else:
                playerLetter = 'X'
        bestVal = -1000
        bestMove = -1
        for i in range(1,10):
                if isSpaceFree(board, i):
                        board[i] = computerLetter
                        moveVal = minimax(board, 0, False, -1000, 1000, computerLetter)
                        board[i] = ' '
                        if moveVal > bestVal:
                                bestMove = i
                                bestVal = moveVal
        return bestMove


def isBoardFull(board):
        for i in range(1,10):
                if isSpaceFree(board, i):
                        return False
        return True


print('\nWelcome to Tic Tac Toe!\n')
print('Reference of numbering on the board')
drawBoard('0 1 2 3 4 5 6 7 8 9'.split())
print('')

while True:
        theBoard = [' '] * 10
        playerLetter, computerLetter = inputPlayerLetter()
        turn = whoGoesFirst()
        print('The ' + turn + ' will go first.')
        gameIsPlaying = True
        while gameIsPlaying:
                if turn == 'player':
                        drawBoard(theBoard)
                        move = getPlayerMove(theBoard)
                        makeMove(theBoard, playerLetter, move)
                        if isWinner(theBoard, playerLetter):
                                drawBoard(theBoard)
                                print('You won the game')
                                gameIsPlaying = False
                        else:
                                if isBoardFull(theBoard):
                                        drawBoard(theBoard)
                                        print('The game is a tie')
                                        break
                                else:
                                        turn = 'computer'
                else:
                        move = findBestMove(theBoard, computerLetter)
                        makeMove(theBoard, computerLetter, move)
                        if isWinner(theBoard, computerLetter):
                                drawBoard(theBoard)
                                print('You lose the game')
                                gameIsPlaying = False
                        else:
                                if isBoardFull(theBoard):
                                        drawBoard(theBoard)
                                        print('The game is a tie')
                                        break
                                else:
                                        turn = 'player'
        if not playAgain():
                break

Related Solutions

PYTHON (Game: Tic-tac-toe): Write a program that plays the tic-tac-toe game. Two players take turns clicking...
PYTHON (Game: Tic-tac-toe): Write a program that plays the tic-tac-toe game. Two players take turns clicking an available cell in a 3 x 3 grid with their respective tokens (either X or O). When one player has placed three tokens in a horizontal, vertical, or diagonal row on the grid, the game is over and that player has won. A draw (no winner) occurs when all the cells in the grid have been filled with tokens and neither player has...
Python Code Needed Two-Player, Two-Dimensional Tic-Tac-Toe Write a script to play two-dimensional Tic-Tac-Toe between two human...
Python Code Needed Two-Player, Two-Dimensional Tic-Tac-Toe Write a script to play two-dimensional Tic-Tac-Toe between two human players who alternate entering their moves on the same computer. Create a 3-by-3 two-dimensional array. Each player indicates their moves by entering a pair of numbers representing the row and column indices of the square in which they want to place their mark, either an 'X' or an 'O'. When the first player moves, place an 'X' in the specified square. When the second...
PLEASE READ CAREFULLY!!!! write a client.py and server.py file for tic-tac-toe IN PYTHON with the following...
PLEASE READ CAREFULLY!!!! write a client.py and server.py file for tic-tac-toe IN PYTHON with the following restrictions (SO WRITE TWO FILES THAT PLAY PYTHON THROUGH A SOCKET) Use a 5 x 5 grid (dimensions are subject to change, so use constants for NUM_ROWS and NUM_COLS) Use 'X' for player 1 and 'O' for player 2 (symbols and the number of players is subject to change, so use constants) Each player can make 1 move per turn before having to wait...
please create a tic tac toe game with python using only graphics.py library
please create a tic tac toe game with python using only graphics.py library
Python: Write a program that plays Tic-tac-toe with a user. Each round, the game prints out...
Python: Write a program that plays Tic-tac-toe with a user. Each round, the game prints out the state of the board, asks the user where they would like to place their mark, and implements this decision. The program then places its own mark on a randomly chosen available position. Once one of the player won, the program declares the result and asks if the user would like to continue. The first player is selected at random.
Write a program that plays tic-tac-toe. The tic-tac-toe game is played on a 3 × 3...
Write a program that plays tic-tac-toe. The tic-tac-toe game is played on a 3 × 3 grid as shown below: The game is played by two players, who take turns. The first player marks moves with a circle, the second with a cross. The player who has formed a horizontal, vertical, or diagonal sequence of three marks wins. Your program should draw the game board, ask the user for the coordinates of the next mark (their move), change the players...
PLEASE READ VERY CAREFULLY write a client.py and server.py file for tic-tac-toe IN PYTHON with the...
PLEASE READ VERY CAREFULLY write a client.py and server.py file for tic-tac-toe IN PYTHON with the following restrictions (SO WRITE TWO FILES THAT PLAY PYTHON THROUGH A SOCKET) Use a 5 x 5 grid (dimensions are subject to change, so use constants for NUM_ROWS and NUM_COLS) Use 'X' for player 1 and 'O' for player 2 (symbols and the number of players is subject to change, so use constants) Each player can make 1 move per turn before having to...
Here is an interaction in a tic-tac-toe game, with user input in bold: >> gm =...
Here is an interaction in a tic-tac-toe game, with user input in bold: >> gm = Game.new('andy', 'mike') => #<Game:0x2e91d78 @players=[Andy, Mike]> >> gm.play_game('mike') Mike, enter your next O O-- --- --- Andy, enter your next X O-X --- --- Mike, enter your next O O-X -O- --- Andy, enter your next X move Bad move dude! You go again. O-X -O- --- Andy, enter your next X move O-X -OX --- Mike, enter your next O move O-X -OX...
make a 4x4 tic tac toe in javascript (X is the user) (O is the computer)
make a 4x4 tic tac toe in javascript (X is the user) (O is the computer)
USING RSTUDIO: Write a script that allows two people to play tic-tac-toe. The script should allow...
USING RSTUDIO: Write a script that allows two people to play tic-tac-toe. The script should allow each player to take sequential turns and to interactively enter their choice of position at the command line on each turn. For each turn, the script should output the set-up of the board. Note, you don’t have to use “x” and “o” as the symbol of each player. Note, the main body of this code (not including functions) should be able to be written...
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT