Skip to content

Instantly share code, notes, and snippets.

@anishmashankar
Created February 17, 2015 02:02
Show Gist options
  • Save anishmashankar/ba9d0d21cf2b8d391611 to your computer and use it in GitHub Desktop.
Save anishmashankar/ba9d0d21cf2b8d391611 to your computer and use it in GitHub Desktop.
TIC TAC TOE FINAL
board=[' ' for x in range(9)]
#legal board values = X,O
board[4] = 'X'
winning=False
def player_move():
global winning
pos = input("Enter your move ")
board[pos] = 'O'
winning = checkwin('O')
def computer_move():
global winning, board
possible_moves = []
for i in range(len(board)):
if board[i] == ' ':
possible_moves.append(i)
possible_moves_scores = []
for j in possible_moves:
possible_moves_scores.append(get_score(board, j))
correct_move = possible_moves[possible_moves_scores.index(min(possible_moves_scores))]
board[correct_move] = 'X'
winning=checkwin('X')
possible_moves=[]
possible_moves_scores=[]
def get_score(board, i):
score=0
copy_board = [x for x in board]
copy_board[i] = 'X'
directory = {
' ': 1,
'X': 2,
'O': 0
}
score+=directory[board[i]]+directory[board[(i+3)%9]]+directory[board[(i+6)%9]] #same column
if i==0 or i==2 or i==1:
score+=directory[board[0]] + directory[board[1]] + directory[board[2]]
if i==3 or i==4 or i==5:
score+=directory[board[3]] + directory[board[4]] + directory[board[5]]
if i==6 or i==7 or i==8:
score+=directory[board[6]] + directory[board[7]] + directory[board[8]]
#diagonals
'''if i==0 or i==8:
score+=directory[board[0]] + directory[board[8]] + directory[board[4]]
if i==2 or i==6:
score+=directory[board[2]] + directory[board[4]] + directory[board[6]] '''
return score
def printboard():
print board[0]+"|"+board[1] + "|"+board[2]
print "-----"
print board[3]+"|"+board[4] + "|"+board[5]
print "-----"
print board[6]+"|"+board[7] + "|"+board[8]
print '-----------------------'
def checkwin(player):
return ((board[0]==board[1]==board[2]==player) or (
board[3]==board[4]==board[5]==player) or (
board[6]==board[7]==board[8]==player) or (
board[0]==board[3]==board[6]==player) or (
board[1]==board[4]==board[7]==player) or (
board[2]==board[5]==board[8]==player) or (
board[0]==board[4]==board[8]==player) or (
board[2]==board[4]==board[6]==player))
def movesremaining():
return ' ' in board
def is_even(num):
return num%2 == 0
printboard()
turn = 0
while True:
if is_even(turn) and movesremaining():
player_move()
printboard()
if winning:
print 'player wins'
break
elif not is_even(turn) and movesremaining():
print 'computer plays'
computer_move()
printboard()
if winning:
print 'computer wins'
break
else:
print 'draw'
break
turn+=1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment