Week 19
Post date: Apr 7, 2017 3:04:27 PM
import random
def drawBoard(board):
print(" | | ")
print(" ",board[0],"|",board[1],"|",board[2])
print(" | | ")
print("-------------")
print(" | | ")
print(" ",board[3],"|",board[4],"|",board[5])
print(" | | ")
print("-------------")
print(" | | ")
print(" ",board[6],"|",board[7],"|",board[8])
print(" | | ")
def win(board, player):
if board[0] == player and board[1] == player and board[2] == player:
return True
if board[3] == player and board[4] == player and board[5] == player:
return True
if board[6] == player and board[7] == player and board[8] == player:
return True
if board[0] == player and board[3] == player and board[6] == player:
return True
if board[1] == player and board[4] == player and board[7] == player:
return True
if board[2] == player and board[5] == player and board[8] == player:
return True
if board[0] == player and board[4] == player and board[8] == player:
return True
if board[2] == player and board[4] == player and board[6] == player:
return True
return False
############## Get computer mark ############
def opponent(sUser):
if sUser == "O":
return "X"
return "O"
############## Strategy to move random ############
def randommove(board, sUser):
emptystep = []
for x in range(0,9):
if board[x] == " ":
emptystep.append(x)
move = random.randint(0,len(emptystep)-1)
move = emptystep[move]
return move
############## Strategy to win or block ############
def nextMoveWin(board, sUser):
for x in range(0,9):
if board[x] == " ":
board[x] = sUser
isWin = win(board, sUser)
board[x] = " "
if isWin:
return x
return -1
############## Move center ##################
def moveCenter(board):
if board[4] == " ":
return 4
return -1
############## Move Corner ##################
def moveCorner(board):
if board[1] == " " and board[3] == " " and board[0] == " ":
return 0
if board[1] == " " and board[5] == " " and board[2] == " ":
return 2
if board[5] == " " and board[7] == " " and board[8] == " ":
return 8
if board[3] == " " and board[7] == " " and board[6] == " ":
return 6
if board[0] == " ":
return 0
if board[2] == " ":
return 2
if board[6] == " ":
return 6
if board[8] == " ":
return 8
return -1
############## Check for tie ##################
def checktie(board):
isTie = True
for x in range(0,9):
if board[x] == " ":
isTie = False
return isTie
############## Head or Tail ######################
def headtail():
bet = input("Head or Tail:")
flip = random.randint(0,1)
if flip == 0:
coin = "Head"
else:
coin = "Tail"
if bet == coin:
return True
return False
############## User move ##################
def usermove(board, user):
move = input("Make your move (1~9):")
if board[int(move) - 1] != " ":
print("You lost your move!!!")
else:
board[int(move) - 1] = user
drawBoard(board)
if win(board, user):
print("The user ", user, "won!!!")
return True
if checktie(board):
print("It is a tie")
return True
return False
############## 2 ways block ##################
def twowaysblock(board, user):
empty = 0
x = 0
o = 0
steps = [0,1,2,5,8]
for i in steps:
if board[i] == ' ': empty += 1
if board[i] == 'X': x += 1
if board[i] == 'O': o += 1
if user == 'X' and empty == 3 and x == 2:
for i in steps:
if board[i] == ' ':
return i
return -1
############## Computer move ##################
def computermove(board, user):
movetype = ""
move = nextMoveWin(board, opponent(user))
if move == -1:
move = nextMoveWin(board, user)
else:
if movetype == "": movetype = "Computer moves to win!"
if move == -1:
move = twowaysblock(board, user)
else:
if movetype == "": movetype = "Computer moves to win!"
if move == -1:
move = moveCenter(board)
else:
if movetype == "": movetype = "Computer blocks your win!"
if move == -1:
move = moveCorner(board)
else:
if movetype == "": movetype = "Computer moves center!"
if move == -1:
move = randommove(board,opponent(user))
else:
if movetype == "": movetype = "Computer moves corner!"
if movetype == "": movetype = "Computer moves random!"
print(movetype)
board[move] = opponent(user)
print("Computer moves", move + 1)
drawBoard(board)
if win(board, opponent(user)):
print("The computer", opponent(user), "won!!!")
return True
if checktie(board):
print("It is a tie!")
return True
return False
################## Main Program ##################
tttBoard = [" "] * 9
drawBoard(tttBoard)
#if headtail():
# print("You won, you will be X")
user = "X"
#else:
# print("You lost, you will be O")
# user = "O"
#print("The computer is", opponent(user))
while(True):
if user == "X":
if usermove(tttBoard, user):break
if computermove(tttBoard, user): break
else:
if computermove(tttBoard, user):break
if usermove(tttBoard, user):break