# python – Game of Noughts and Crosses Feedback

this is my 2nd project on Python. I created a game of Noughts and Crosses(Tic-Tac-Toe) that you can play against the computer. What are your thoughts on my implementation of the game? Is there anything I’ve missed or could improve upon?

I did think about adding a figure window and making it more interactive by clicking on where you want to move however that seemed a bit too advanced.

``````import random
import sys
import numpy as np

# Today we are going to make an interactive game in Python.
# This is going to be a game of noughts and crosses!

#  Initialise grid and collection of X's or O's needed to win a game.
grid = (("_", "_", "_"), ("_", "_", "_"), ("_", "_", "_"))
print(np.asarray(grid))  # To make the output represent a grid instead of a list of lists.
row_os = ("O", "O", "O")
row_xs = ("X", "X", "X")
coords_picked = ()

# Create a loop to find all co-ordinates in our grid
all_coords = ()
for x in range(3):
for y in range(3):
all_coords.append((x, y))

turn = 0
remaining_coords = ()

while turn < 10:
# Find status of each column
column_1 = (row(0) for row in grid)
column_2 = (row(1) for row in grid)
column_3 = (row(2) for row in grid)

# Find status of 2 diagonals
main_diag = (row(i) for i, row in enumerate(grid))
counter_diag = (row(-i - 1) for i, row in enumerate(grid))

# Winning conditions for each player
if (grid(0) == row_os or grid(1) == row_os or grid(2) == row_os) or (
column_1 == row_os or column_2 == row_os or column_3 == row_os) or (main_diag == row_os) or (
counter_diag == row_os):
print("The computer has won!")
sys.exit()
elif (grid(0) == row_xs or grid(1) == row_xs or grid(2) == row_xs) or (
column_1 == row_xs or column_2 == row_xs or column_3 == row_xs) or (main_diag == row_xs) or (
counter_diag == row_xs):
print("Well done, you have won!")
sys.exit()
else:
# If nobody has won yet, take another turn
if turn % 2 == 0:
x_coord = input()
y_coord = input()
coords_picked.append((int(x_coord), int(y_coord)))
grid(int(x_coord))(int(y_coord)) = "X"
print(np.asarray(grid))
turn += 1
else:
# Computer randomly picks a co-ordinate in the grid that has not been picked yet
remaining_coords = list(set(all_coords) - set(coords_picked))
comp_coords = random.choice(remaining_coords)
grid(comp_coords(0))(comp_coords(1)) = "O"
coords_picked.append((comp_coords(0), comp_coords(1)))
print(comp_coords)
print(np.asarray(grid))
turn += 1

print("A draw?! We must play again!")
``````