Skip to content

Instantly share code, notes, and snippets.

@zenius
Last active November 11, 2021 00:13
Show Gist options
  • Save zenius/4e845c8872b584c6599fc2095367a2de to your computer and use it in GitHub Desktop.
Save zenius/4e845c8872b584c6599fc2095367a2de to your computer and use it in GitHub Desktop.
'''
Tic-Tac-Toe Console Application
@author 'zenius lama'
@Version 3.5.3
@Since 2020-06-06
'''
from random import randrange
#
# the function accepts one parameter containing the board's current status
# and prints it out to the console
#
def DisplayBoard(board):
#print(board)
for i in range(0,len(board),3):
print("+-------"*3 + "+")
print("| "*3 + "|")
print("| " + str(board[i]) + \
" | " + str(board[i + 1]) + \
" | " + str(board[i + 2]) + " | ")
print("| "*3 + "|")
print("+-------"*3 + "+")
#
# the function accepts the board current status, asks the user about their move,
# checks the input and updates the board according to the user's decision
#
def EnterMove(board):
freeFields = MakeListOfFreeFields(board)
pos = int(input("Enter your move:"))
while(pos < 1 or pos > 9):
print("Please enter number between 1 and 9")
pos = int(input("Enter your move:"))
while True:
if pos in freeFields:
board[pos - 1] = 'O'
break
else:
print('Position already filled')
pos = int(input("Enter your move:"))
DisplayBoard(board)
#
# the function browses the board and builds a list of the free squares
#
def MakeListOfFreeFields(board):
freeFields = []
for i in range(len(board)):
if board[i] != 'O' and board[i]!='X':
freeFields.append(board[i])
#print(freeFields)
return freeFields
#
# the function analyzes the board status in order to check if
# the player using 'O's or 'X's has won the game
#
def VictoryFor(board, sign):
arrangements = [[1, 2, 3], [4, 5, 6], [7, 8, 9],[1, 4, 7], [2, 5, 8], [3, 6, 9],[1, 5, 9], [3, 5, 7]]
for i in range(len(arrangements)):
pos1, pos2, pos3 = arrangements[i][0] - 1, arrangements[i][1] - 1, arrangements[i][2] - 1
if (str(board[pos1]) == sign) and (str(board[pos2]) == sign) and (str(board[pos3]) == sign):
return True
return False
#
# the function draws the computer's move and updates the board
#
def DrawMove(board):
freeFields = MakeListOfFreeFields(board)
pos = randrange(1,10)
while True:
if pos in freeFields:
board[pos - 1] = 'X'
break
else:
pos = randrange(1, 10)
DisplayBoard(board)
# main program
# board: 3 x 3 squares
board = [1, 2, 3, 4, 'X', 6, 7, 8, 9]
DisplayBoard(board)
while True:
#check if all board field is filled
moves = 0
for i in range(len(board)):
if board[i] == 'O' or board[i] =='X':
moves +=1
if moves == len(board):
print('Game is Tie')
break
# user turn
EnterMove(board)
if VictoryFor(board, 'O'):
print('You won!!!')
break
# computer turn
DrawMove(board)
if VictoryFor(board, 'X'):
print('Computer won!!!')
break
@ashioyajotham
Copy link

Check cisco Python module

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