# tic tac toe
import random
def printBoard(bo):
print ("| "+bo[1]+" | "+bo[2]+" | "+bo[3]+" |")
print ("-------------")
print ("| "+bo[4]+" | "+bo[5]+" | "+bo[6]+" |")
print ("-------------")
print ("| "+bo[7]+" | "+bo[8]+" | "+bo[9]+" |")
def lookForWin(bo, sym):
if (bo[1] == ' ' and bo[2] == sym[1] and bo[3] == sym[1]) or (bo[1] == ' ' and bo[4] == sym[1] and bo[7] == sym[1]) or (bo[1] == ' ' and bo[5] == sym[1] and bo[9] == sym[1]):
return 1
elif (bo[2] == ' ' and bo[1] == sym[1] and bo[3] == sym[1]) or (bo[2] == ' ' and bo[5] == sym[1] and bo[8] == sym[1]):
return 2
elif (bo[3] == ' ' and bo[1] == sym[1] and bo[2] == sym[1]) or (bo[3] == ' ' and bo[6] == sym[1] and bo[9] == sym[1]) or (bo[3] == ' ' and bo[5] == sym[1] and bo[7] == sym[1]):
return 3
elif (bo[4] == ' ' and bo[1] == sym[1] and bo[7] == sym[1]) or (bo[4] == ' ' and bo[5] == sym[1] and bo[6] == sym[1]):
return 4
elif (bo[5] == ' ' and bo[1] == sym[1] and bo[9] == sym[1]) or (bo[5] == ' ' and bo[2] == sym[1] and bo[8] == sym[1]) or (bo[5] == ' ' and bo[3] == sym[1] and bo[7] == sym[1]) or (bo[5] == ' ' and bo[4] == sym[1] and bo[6] == sym[1]):
return 5
elif (bo[6] == ' ' and bo[3] == sym[1] and bo[9] == sym[1]) or (bo[6] == ' ' and bo[4] == sym[1] and bo[5] == sym[1]):
return 6
elif (bo[7] == ' ' and bo[5] == sym[1] and bo[3] == sym[1]) or (bo[7] == ' ' and bo[4] == sym[1] and bo[1] == sym[1]) or (bo[7] == ' ' and bo[8] == sym[1] and bo[9] == sym[1]):
return 7
elif (bo[8] == ' ' and bo[7] == sym[1] and bo[9] == sym[1]) or (bo[8] == ' ' and bo[5] == sym[1] and bo[2] == sym[1]):
return 8
elif (bo[9] == ' ' and bo[5] == sym[1] and bo[1] == sym[1]) or (bo[9] == ' ' and bo[3] == sym[1] and bo[6] == sym[1]) or (bo[9] == ' ' and bo[7] == sym[1] and bo[8] == sym[1]):
return 9
else:
return 0
def lookForLose(bo, sym):
if (bo[1] == ' ' and bo[2] == sym[0] and bo[3] == sym[0]) or (bo[1] == ' ' and bo[4] == sym[0] and bo[7] == sym[0]) or (bo[1] == ' ' and bo[5] == sym[0] and bo[9] == sym[0]):
return 1
elif (bo[2] == ' ' and bo[1] == sym[0] and bo[3] == sym[0]) or (bo[2] == ' ' and bo[5] == sym[0] and bo[8] == sym[0]):
return 2
elif (bo[3] == ' ' and bo[1] == sym[0] and bo[2] == sym[0]) or (bo[3] == ' ' and bo[6] == sym[0] and bo[9] == sym[0]) or (bo[3] == ' ' and bo[5] == sym[0] and bo[7] == sym[0]):
return 3
elif (bo[4] == ' ' and bo[1] == sym[0] and bo[7] == sym[0]) or (bo[4] == ' ' and bo[5] == sym[0] and bo[6] == sym[0]):
return 4
elif (bo[5] == ' ' and bo[1] == sym[0] and bo[9] == sym[0]) or (bo[5] == ' ' and bo[2] == sym[0] and bo[8] == sym[0]) or (bo[5] == ' ' and bo[3] == sym[0] and bo[7] == sym[0]) or (bo[5] == ' ' and bo[4] == sym[0] and bo[6] == sym[0]):
return 5
elif (bo[6] == ' ' and bo[3] == sym[0] and bo[9] == sym[0]) or (bo[6] == ' ' and bo[4] == sym[0] and bo[5] == sym[0]):
return 6
elif (bo[7] == ' ' and bo[5] == sym[0] and bo[3] == sym[0]) or (bo[7] == ' ' and bo[4] == sym[0] and bo[1] == sym[0]) or (bo[7] == ' ' and bo[8] == sym[0] and bo[9] == sym[0]):
return 7
elif (bo[8] == ' ' and bo[7] == sym[0] and bo[9] == sym[0]) or (bo[8] == ' ' and bo[5] == sym[0] and bo[2] == sym[0]):
return 8
elif (bo[9] == ' ' and bo[5] == sym[0] and bo[1] == sym[0]) or (bo[9] == ' ' and bo[3] == sym[0] and bo[6] == sym[0]) or (bo[9] == ' ' and bo[7] == sym[0] and bo[8] == sym[0]):
return 9
else:
return 0
def lookForImp(bo):
if bo[1] == ' ':
return 1
elif bo[3] == ' ':
return 3
elif bo[7] == ' ':
return 7
elif bo[9] == ' ':
return 9
elif bo[5] == ' ':
return 5
else:
return 0
def lookForSide(bo):
if bo[2] == ' ':
return 2
elif bo[4] == ' ':
return 4
elif bo[6] == ' ':
return 6
elif bo[8] == ' ':
return 8
else:
return 0
def lookForWinner(bo, sym):
if (bo[1] == sym[0] and bo[2] == sym[0] and bo[3] == sym[0]) or (bo[4] == sym[0] and bo[5] == sym[0] and bo[6] == sym[0]) or (bo[7] == sym[0] and bo[8] == sym[0] and bo[9] == sym[0]) or (bo[1] == sym[0] and bo[4] == sym[0] and bo[7] == sym[0]) or (bo[2] == sym[0] and bo[5] == sym[0] and bo[8] == sym[0]) or (bo[3] == sym[0] and bo[6] == sym[0] and bo[9] == sym[0]) or (bo[1] == sym[0] and bo[5] == sym[0] and bo[9] == sym[0]) or (bo[3] == sym[0] and bo[5] == sym[0] and bo[7] == sym[0]):
return 0
elif (bo[1] == sym[1] and bo[2] == sym[1] and bo[3] == sym[1]) or (bo[4] == sym[1] and bo[5] == sym[1] and bo[6] == sym[1]) or (bo[7] == sym[1] and bo[8] == sym[1] and bo[9] == sym[1]) or (bo[1] == sym[1] and bo[4] == sym[1] and bo[7] == sym[1]) or (bo[2] == sym[1] and bo[5] == sym[1] and bo[8] == sym[1]) or (bo[3] == sym[1] and bo[6] == sym[1] and bo[9] == sym[1]) or (bo[1] == sym[1] and bo[5] == sym[1] and bo[9] == sym[1]) or (bo[3] == sym[1] and bo[5] == sym[1] and bo[7] == sym[1]):
return 1
else:
return 2
def whoStart():
x = random.randint(0,1)
return x
def checkMove(move, board):
if board[int(move)] == " ":
return True
else:
return False
print ("""Hello! Would you like to play a game of tic-tac-toe with me?
it will be lots of fun!""")
playAgain = True
while playAgain == True:
print ("Ok, lets start!")
print()
playBoard = [' ', '1', '2', '3', '4', '5', '6', '7', '8', '9']
printBoard(playBoard)
print ("Use this layout to input!")
print()
playBoard = [' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ', ' ']
symbol = [' ', ' ']
print ('Which symbol do you want to play as?')
print()
while symbol[0].upper() != "X" and symbol[0].upper() != "O":
print ("(X or O)")
symbol[0] = input()
if symbol[0].upper() == 'X':
symbol = ['X', 'O']
elif symbol[0].upper() == 'O':
symbol = ['O', 'X']
print ('Ok! You are '+ symbol[0] +' and i am '+ symbol[1] +'!')
print()
GoNext = whoStart()
if GoNext == 0:
print('Ok, you start!')
GoSecond = 1
else:
print("Ok, I'll go first!")
GoSecond = 0
print()
win = [False, False]
while win == [False, False]:
if GoNext == 0:
printBoard(playBoard)
print ("Your turn!")
print ("Where do you want to play? (1-9)")
move = input()
while not move.isdigit or move == "0":
print ("Please insert a nmber between 1 and 9")
move = input()
while not checkMove(move, playBoard):
print("That spot is already taken, please provide a free placement.")
move = input()
playBoard[int(move)] = symbol[0]
winner = lookForWinner(playBoard, symbol)
GoNext = 1
else:
printBoard(playBoard)
move = lookForWin(playBoard, symbol)
if move == 0:
move = lookForLose(playBoard, symbol)
if move == 0:
move = lookForImp(playBoard)
if move == 0:
move = lookForSide(playBoard)
if move != 0:
playBoard[int(move)] = symbol[1]
print ("I think I am going to play on " + str(move) + " .")
winner = lookForWinner(playBoard, symbol)
tie = 0
if move == 0 and winner == 2:
print ("Oh, it is a tie!")
tie = 1
break
GoNext = 0
if winner == 0:
win[0] = True
elif winner == 1:
win[1] = True
printBoard(playBoard)
answer = " "
if win[0] == True:
print ("Congrats!! You win!! Do you want to play again?")
elif win[1] == True:
print ("Yay!! I win! I win! in your face!! Wanna lose again?")
elif tie == 1:
print ("Ok, niether won, do you want to play again?")
while answer != "no" and answer != "yes":
print ("(yes on no)")
answer = input()
if answer == "no":
playAgain = False
else:
playAgain = True
print ("Ok, see you next time!!")
I it is finished, and idiot proof