+1 (315) 557-6473 

Create A Tic Tac Toe Game in The Python Assignment Solution.


Instructions

Objective
Write a python homework to create a tic-tac-toe game.

Requirements and Specifications

Introduction:
In this assignment students will demonstrate their understanding of how to create and manipulate NumPy Arrays.
Instructions:
For this assignment, refer to page 277 of your textbook. The instructions below list the assignment requirements.
    • Create a Python code file named M5HW_TicTacToe_FirstLast.py
    • (replace "FirstLast" with your own name)

    •  Add a title comment block to the top of the new Python file using the following form
    • # A brief description of the project

      # Date

      # CSC121 M5HW – Tic Tac Toe

      # Your Name

      Level 1 = 50 points

  • Complete Exercise 7.10 on page 277 of your textbook. If you are up for another challenge, do the next level NumPy array MUST be used
  • There are several online resources that have this part solved but none use NumPy arrays. You can therefore use them as a reference but CAN NOT copy a paste code.

    To help you get started , I have a few hints and code listed below:

    • To create an empty array, use the .empty() method and set the dtype = str. This is referenced in the book
    • To display the array as a grid(board), you will have to use a for loop to iterate over the array. Since it is 2 dim , you will have 2 for loops . One for the rows and another for the columns. I already have the code for this part below:
    • With this code, the grid is going to look something like this.

    • Now , you can start asking the user what cell they want to mark. For example for the second cell in the first row, you want to identify the row index and the column index.
    •  So you are to ask the user to enter the row number and the column number. For instance if user wants first row second column the indexes will be row(0) and column(1). Why , because we know that index position start with 0
    •  To mark the cell the user defined, use slicing. So back to our example above, if the grid is called (ticTac), the code to populate that cell will be something like this
    • ticTac[0][1]= “X”

    • Now , as the users play you want to evaluate if all the cells in a row or column have been filled with the same symbol , also if all boxed have been filled diagonally with the same symbol. If any of these conditions is true, you have a win and the game should end

    To do this you will have to use both a for loop and a decision structure.

    Level 2 = 40 points

  • Complete Exercise 7.11 on page 277 of your textbook. In this step, you will be building on the program you did for level 1.
Hint: Use the random library for the computer’s pick
Submit your finished code solution file(s) through the assignment link below:
Note: Write program Pseudocode (detail algorithm) and add it as a comment block to the submitted program. (10 points)
Grading criteria:
Shown above
Note : ONLY USE PROGRAMMING METHODS LEARNED IN CLASS. If submission doesn't comply, you will get a grade of "1".
Source Code
# A brief description of the project
# Date
# CSC121 M5HW – Tic Tac Toe
# Your Name
import numpy as np
import random
def init():
    return np.empty((3,3), dtype=str)
def display(grid):
    for row in grid:
        for col in row:
            if len(col) == 0:
                print("|_", end="|")
            else:
                print("|" + col, end="|")
        print()
def make_move(grid, place, symbol):
    row = place[0]
    col = place[1]
    if row < 0 or row > 2 or col < 0 or col > 2:
        return False
    if grid[row][col] != '':
        return False
    grid[row][col] = symbol
    print("Move", (row, col), "is made by", symbol)
    return True
def game_state(grid):
    has_empty = False
    for i in range(3):
        for j in range(3):
            if grid[i][j] == '':
                has_empty = True
    for i in range(3):
        if grid[i][0] == '':
            continue
        curr = grid[i][0]
        is_same = True
        for j in range(1, 3):
            if curr != grid[i][j]:
                is_same = False
        if is_same:
            return curr + " wins!"
    for i in range(3):
        if grid[0][i] == '':
            continue
        curr = grid[0][i]
        is_same = True
        for j in range(1, 3):
            if curr != grid[j][i]:
                is_same = False
        if is_same:
            return curr + " wins!"
    if grid[0][0] != '':
        curr = grid[0][0]
        is_same = True
        for j in range(1, 3):
            if curr != grid[j][j]:
                is_same = False
        if is_same:
            return curr + " wins!"
    if grid[2][0] != '':
        curr = grid[2][0]
        is_same = True
        for j in range(1, 3):
            if curr != grid[2-j][j]:
                is_same = False
        if is_same:
            return curr + " wins!"
    if not has_empty:
        return "Draw"
    return None
def player_move(grid, symbol):
    while True:
        row = int(input("Please, enter row: "))
        col = int(input("Please, enter column: "))
        if make_move(grid, (row, col), symbol):
            return
        print("Invalid input. Try again")
def computer_move(grid, symbol):
    while True:
        row = random.randrange(0, 3)
        col = random.randrange(0, 3)
        if make_move(grid, (row, col), symbol):
            return
        print("Invalid input. Try again")
if __name__ == '__main__':
    tictactoe = init()
    symbols = ["X", "O"]
    players = [True, False]
    to_move = 0
    state = None
    while not state:
        display(tictactoe)
        if players[to_move]:
            print("Human player (" + str(symbols[to_move] + ") to move:"))
            player_move(tictactoe, symbols[to_move])
        else:
            print("Computer player (" + str(symbols[to_move] + ") to move:"))
            computer_move(tictactoe, symbols[to_move])
        state = game_state(tictactoe)
        to_move = (to_move + 1) % 2
        print()
    display(tictactoe)
    print(state)