Write a modular program that plays the game TicTacToe. Each player selects a cha
ID: 3685320 • Letter: W
Question
Write a modular program that plays the game TicTacToe. Each player selects a character, either x or o. While alternating turns, each player places their character in an empty cell of a three row, three column grid, attempting to place their character in all three cells of any one row, column or diagonal across the grid, while preventing the opponent from doing the same. If one of the players is not the computer, the program earns partial credit. An excellent program is well documented and the computer player never loses a game to the human player. The program must be written in Python. The program must contain these functions, and may contain other functions as needed:
get_human_move() to get the human’s move (or get_human1_move and get_human2_move functions if the computer is not a player)
get_human() to get the human’s choice of being player x or o (if two human players the other human inherits the other player)
check_winner() to see if a player has three x or three o in a row
draw_board() to draw the 3 x 3 matrix
Explanation / Answer
import random def todrawBoard(board): # This function will print out the board that it was passed. # This basically includes the "board" which is a list of 10 strings representing the board (ignore index 0) print(' | |') print(' ' + board[7] + ' | ' + board[8] + ' | ' + board[9]) print(' | |') print('-----------') print(' | |') print(' ' + board[4] + ' | ' + board[5] + ' | ' + board[6]) print(' | |') print('-----------') print(' | |') print(' ' + board[1] + ' | ' + board[2] + ' | ' + board[3]) print(' | |') def toinputPlayerLetter(): # This function Lets the player type which letter they want to be.This will basically return a list with the player's letter as the first item, and the computer's letter as the second. letter = '' while not (letter == 'X' or letter == 'O'): print('Do you want to choose the letter X or O?') letter = input().upper() #now we will have the first element in the tuple is the player's letter, the second is the computer's letter. if letter == 'X': return ['X', 'O'] else: return ['O', 'X'] def deicidewhoGoesFirst(): # This function will randomly choose the player who goes first. if random.randint(0, 1) == 0: return 'computer' else: return 'player' def toplayAgain(): # This function returns True if the player wants to play again, otherwise it returns False. print('Do you want to play again? (yes or no)') return input().lower().startswith('y') def tomakeMove(board, letter, move): board[move] = letter def whoisWinner(bo, le): # this function returns True if that player has won across rows,columns and diagnols.we will check for each of the cases and then return true. # We use bo instead of board and le instead of letter so we don't have to type as much. return ((bo[7] == le and bo[8] == le and bo[9] == le) or # across the top (bo[4] == le and bo[5] == le and bo[6] == le) or # across the middle (bo[1] == le and bo[2] == le and bo[3] == le) or # across the bottom (bo[7] == le and bo[4] == le and bo[1] == le) or # down the left side (bo[8] == le and bo[5] == le and bo[2] == le) or # down the middle (bo[9] == le and bo[6] == le and bo[3] == le) or # down the right side (bo[7] == le and bo[5] == le and bo[3] == le) or # diagonal (bo[9] == le and bo[5] == le and bo[1] == le)) # diagonal def getBoardCopy(board): # Make a duplicate of the board list and return it the duplicate. dupeBoard = [] for i in board: dupeBoard.append(i) return dupeBoard def isSpaceFree(board, move): # Return true if the passed move is free on the passed board. return board[move] == ' ' def togetPlayerMove(board): # this function will eet the player type in his move by choosing 1 place amoung the 9 places 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): # Returns a valid move from the passed list on the passed board. # Returns None if there is no valid move. possibleMoves = [] for i in movesList: if isSpaceFree(board, i): possibleMoves.append(i) if len(possibleMoves) != 0: return random.choice(possibleMoves) else: return None def togetComputerMove(board, computerLetter1): # This function has a board and the computer's letter and determines where to move and return that move. if computerLetter1 == 'X': playerLetter1 = 'O' else: playerLetter1 = 'X' # First, check if we can win in the next move for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, computerLetter, i) if isWinner(copy, computerLetter): return i # Check if the player could win on his next move, and block them. for i in range(1, 10): copy = getBoardCopy(board) if isSpaceFree(copy, i): makeMove(copy, playerLetter, i) if isWinner(copy, playerLetter): return i # Try to take one of the corners, if they are free. move = chooseRandomMoveFromList(board, [1, 3, 7, 9]) if move != None: return move # Try to take the center, if it is free. if isSpaceFree(board, 5): return 5 # Move on one of the sides. return chooseRandomMoveFromList(board, [2, 4, 6, 8]) def isBoardFull(board): # This function will return True if every space on the board has been taken. Otherwise return False. for i in range(1, 10): if isSpaceFree(board, i): return False return True print('This is the Tic Tac To game') while True: # This is done to reset the board theBoard = [' '] * 10 playerLetter1, computerLetter1 = toinputPlayerLetter() turn = decidewhoGoesFirst() print('The ' + turn + ' will go first.') gameIsPlaying = True while gameIsPlaying: if turn == 'player': # This is the Player's turn. todrawBoard(theBoard) move = togetPlayerMove(theBoard) tomakeMove(theBoard, playerLetter1, move) if whoisWinner(theBoard, playerLetter1): todrawBoard(theBoard) print(Congrats. You have won the game!') gameIsPlaying = False else: if isBoardFull(theBoard): todrawBoard(theBoard) print('The game is a tie!') break else: turn = 'computer' else: # This is for Computer's turn/second player turn move = togetComputerMove(theBoard, computerLetter1) tomakeMove(theBoard, computerLetter1, move) if whoisWinner(theBoard, computerLetter1): drawBoard(theBoard) print('The computer wins.YOU HAVE LOST') gameIsPlaying = False else: if isBoardFull(theBoard): todrawBoard(theBoard) print('The game is a tie!') break else: turn = 'player' if not toplayAgain(): break
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.