Skip to content

Instantly share code, notes, and snippets.

@qianguigui1104
Last active May 30, 2025 18:31
Show Gist options
  • Save qianguigui1104/edb3b11b33c78e5894aad7908c773353 to your computer and use it in GitHub Desktop.
Save qianguigui1104/edb3b11b33c78e5894aad7908c773353 to your computer and use it in GitHub Desktop.
A traditional Tic Tac Toe game written in Python
# Pam Qian 2016 Fall CS 112 Python Midterm Project II
# Tic Tack Toe
def main():
# The main function
introduction = intro()
board = create_grid()
pretty = printPretty(board)
symbol_1, symbol_2 = sym()
full = isFull(board, symbol_1, symbol_2) # The function that starts the game is also in here.
def intro():
# This function introduces the rules of the game Tic Tac Toe
print("Hello! Welcome to Pam's Tic Tac Toe game!")
print("\n")
print("Rules: Player 1 and player 2, represented by X and O, take turns "
"marking the spaces in a 3*3 grid. The player who succeeds in placing "
"three of their marks in a horizontal, vertical, or diagonal row wins.")
print("\n")
input("Press enter to continue.")
print("\n")
def create_grid():
# This function creates a blank playboard
print("Here is the playboard: ")
board = [[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]]
return board
def sym():
# This function decides the players' symbols
symbol_1 = input("Player 1, do you want to be X or O? ")
if symbol_1 == "X":
symbol_2 = "O"
print("Player 2, you are O. ")
else:
symbol_2 = "X"
print("Player 2, you are X. ")
input("Press enter to continue.")
print("\n")
return (symbol_1, symbol_2)
def startGamming(board, symbol_1, symbol_2, count):
# This function starts the game.
# Decides the turn
if count % 2 == 0:
player = symbol_1
elif count % 2 == 1:
player = symbol_2
print("Player "+ player + ", it is your turn. ")
row = int(input("Pick a row:"
"[upper row: enter 0, middle row: enter 1, bottom row: enter 2]:"))
column = int(input("Pick a column:"
"[left column: enter 0, middle column: enter 1, right column enter 2]"))
# Check if players' selection is out of range
while (row > 2 or row < 0) or (column > 2 or column < 0):
outOfBoard(row, column)
row = int(input("Pick a row[upper row:"
"[enter 0, middle row: enter 1, bottom row: enter 2]:"))
column = int(input("Pick a column:"
"[left column: enter 0, middle column: enter 1, right column enter 2]"))
# Check if the square is already filled
while (board[row][column] == symbol_1)or (board[row][column] == symbol_2):
filled = illegal(board, symbol_1, symbol_2, row, column)
row = int(input("Pick a row[upper row:"
"[enter 0, middle row: enter 1, bottom row: enter 2]:"))
column = int(input("Pick a column:"
"[left column: enter 0, middle column: enter 1, right column enter 2]"))
# Locates player's symbol on the board
if player == symbol_1:
board[row][column] = symbol_1
else:
board[row][column] = symbol_2
return (board)
def isFull(board, symbol_1, symbol_2):
count = 1
winner = True
# This function check if the board is full
while count < 10 and winner == True:
gaming = startGamming(board, symbol_1, symbol_2, count)
pretty = printPretty(board)
if count == 9:
print("The board is full. Game over.")
if winner == True:
print("There is a tie. ")
# Check if here is a winner
winner = isWinner(board, symbol_1, symbol_2, count)
count += 1
if winner == False:
print("Game over.")
# This is function gives a report
report(count, winner, symbol_1, symbol_2)
def outOfBoard(row, column):
# This function tells the players that their selection is out of range
print("Out of boarder. Pick another one. ")
def printPretty(board):
# This function prints the board nice!
rows = len(board)
cols = len(board)
print("---+---+---")
for r in range(rows):
print(board[r][0], " |", board[r][1], "|", board[r][2])
print("---+---+---")
return board
def isWinner(board, symbol_1, symbol_2, count):
# This function checks if any winner is winning
winner = True
# Check the rows
for row in range (0, 3):
if (board[row][0] == board[row][1] == board[row][2] == symbol_1):
winner = False
print("Player " + symbol_1 + ", you won!")
elif (board[row][0] == board[row][1] == board[row][2] == symbol_2):
winner = False
print("Player " + symbol_2 + ", you won!")
# Check the columns
for col in range (0, 3):
if (board[0][col] == board[1][col] == board[2][col] == symbol_1):
winner = False
print("Player " + symbol_1 + ", you won!")
elif (board[0][col] == board[1][col] == board[2][col] == symbol_2):
winner = False
print("Player " + symbol_2 + ", you won!")
# Check the diagnoals
if board[0][0] == board[1][1] == board[2][2] == symbol_1:
winner = False
print("Player " + symbol_1 + ", you won!")
elif board[0][0] == board[1][1] == board[2][2] == symbol_2:
winner = False
print("Player " + symbol_2 + ", you won!")
elif board[0][2] == board[1][1] == board[2][0] == symbol_1:
winner = False
print("Player " + symbol_1 + ", you won!")
elif board[0][2] == board[1][1] == board[2][0] == symbol_2:
winner = False
print("Player " + symbol_2 + ", you won!")
return winner
def illegal(board, symbol_1, symbol_2, row, column):
print("The square you picked is already filled. Pick another one.")
def report(count, winner, symbol_1, symbol_2):
print("\n")
input("Press enter to see the game summary. ")
if (winner == False) and (count % 2 == 1 ):
print("Winner : Player " + symbol_1 + ".")
elif (winner == False) and (count % 2 == 0 ):
print("Winner : Player " + symbol_2 + ".")
else:
print("There is a tie. ")
# Call Main
main()
@jarvissilva937
Copy link

Great code, here is is tutorial to make fruit ninja game in python

@Incerivers
Copy link

Incerivers commented Jan 13, 2024

@basket random Thank you for providing the useful code.

Copy link

ghost commented Jul 12, 2024

If Player 1 puts a lowercase x by accident, then it makes both players "x". Maybe put that in parentheses in the input statement preceding that option, or while loop to restrict input?

Copy link

ghost commented Jul 12, 2024

Very nice code btw

@JumpIn-Git
Copy link

JumpIn-Git commented Aug 9, 2024

here is my version way shorter

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment