I have spent hours on this code. I am a beginner and open to advice and improvements. I've put #
where I feel insecure about the code.
It lets you pick your marker, checks winner, checks draw, ask player if want to play again and checks if the square is occupied.
#TicTacToe
def drawBoard(board):
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(' | |')
game_board = ['#', ' ', ' ',' ', ' ',' ', ' ',' ', ' ',' ']
player1=''
player2=''
def setplayersmove(playermarker):
print("Select your marker: ")
playermarker = input("> ")
return playermarker
def makemove(someone):
print("Enter a number 1-9 for your move: ")
movenum = int(input('> '))
if movenum < 1 or movenum > 9:
print("Number between 1 and 9 only.")
makemove(someone)
else:#makes sure the square is not occupied by ANYONE
if game_board[movenum] != player1 and game_board[movenum] != player2:
game_board[movenum] = someone
else:
print("Move already occupied. Try again: ")
makemove(someone)
def tryagain():
print("Try again?: Y/N")
ans = input('> ').lower()
if ans == 'y':
gamestart()
else:
exit(0)
def checkwinner():
if game_board[1] == game_board[2] == game_board[3] and game_board[1] != ' ':
print("We have a winner!")
tryagain()
elif game_board[4] == game_board[5] == game_board[6] and game_board[4] != ' ':
print("We have a winner!")
tryagain()
elif game_board[7] == game_board[8] == game_board[9] and game_board[7] != ' ':
print("We have a winner!")
tryagain()
elif game_board[1] == game_board[4] == game_board[7] and game_board[1] != ' ':
print("We have a winner!")
tryagain()
elif game_board[1] == game_board[5] == game_board[9] and game_board[1] != ' ':
print("We have a winner!")
tryagain()
elif game_board[2] == game_board[5] == game_board[8] and game_board[2] != ' ':
print("We have a winner!")
tryagain()
elif game_board[1] == game_board[2] == game_board[3] and game_board[1] != ' ':
print("We have a winner!")
tryagain()
elif game_board[3] == game_board[5] == game_board[7] and game_board[3] != ' ':
print("We have a winner!")
tryagain()
def checkdraw():#checking draw. Advice welcome here...
count = 0
for item in game_board:
if item != ' ':
count += 1
if count == 10:
print("---Game Drawn---")
drawBoard(game_board)
tryagain()
def gamestart():
global player1#ways to avoid using global?
global player2
global game_board
game_board = ['#', ' ', ' ',' ', ' ',' ', ' ',' ', ' ',' ']
drawBoard(game_board)
print("---Player I--- ")
player1 = setplayersmove(player1)
print("---Player II--- ")
player2 = setplayersmove(player2)
gameon1 = True
while gameon1:
print("---Player I's Turn---")
makemove(player1)
drawBoard(game_board)
gameon2 = True
checkwinner()
checkdraw()
gameon1 = False
while gameon2:
print("---Player II's Turn---")
makemove(player2)
drawBoard(game_board)
gameon1 = True
checkwinner()
checkdraw()
gameon2 = False
gamestart()