I'm writing code in python for a tic tac toe game. I have ran into a problem. can any one help me out. thanks
# TIC TAC TOE
# Started: 10/19/09
# Ended: still in progress
#GLOBAL CONSTANTS
X = "X"
O = "O"
Empty = " "
TIE = "TIE"
NUM_SQUARES = 9
def display_instruct():
"""Display game instructions."""
print \
"""
Welcome to the intellectual challenge of all time: Tic-Tac-Toe.
You will make your move know by entering a number, 0 - 8. The number
will correspond to the board position as illustrated:
0 | 1 | 2
_________
3 | 4 | 5
_________
6 | 7 | 8
Prepare yourself. The ultimate battle is about to begin. \n
"""
def ask_yes_no(question):
"""Ask a yes or no question."""
response = None
while response not in ("y", "n"):
response = raw_input(question).lower()
return response
def ask_number(question, low, high):
"""Ask for a number within a range."""
response = None
while response not in range(low, high):
response = int(raw_input(question))
return response
def pieces():
"""Determine if Player 1 or Computer goes first."""
go_first = ask_yes_no("Do you require the first move? (y/n):")
if go_first == "y":
print "\nThen take the first move."
player1 = X
computer = O
else:
print "\nComputer will go first."
player2 = X
computer = O
return computer, player1
def new_board():
"""Create new game board."""
board = []
for square in range(NUM_SQUARES):
board.append(EMPTY)
return board
def display_board(board):
"""Display game board on screen."""
print "\n\t", board[0], "|", board[1], "|", board[2]
print "\t", "------"
print "\t", board[3], "|", board[4], "|", board[5]
print "\t", "------"
print "\t", board[6], "|", board[7], "|", board[8], "\n"
def legal_moves(board):
"""Create list of legal moves."""
moves =[]
for squares in range(NUM_SQUARES):
if board[square] == EMPTY:
moves.append(square)
return moves
def winner(board):
"""Determine the game winner."""
WAYS_TO_WIN = ((0, 1, 2),
(3, 4, 5),
(6, 7, 8),
(0, 3, 6),
(1, 4, 7),
(2, 5, 8),
(0, 4, 8),
(2, 4, 6))
for row in WAYS_TO_WIN:
if board[row[0]] == board[row[1]] == board[row[2]] != EMPTY:
winner = board[row[0]]
return winner
if EMPTY not in board:
return TIE
return None
def player1_move(board, player1):
"""Get Player 1 move."""
legal = legal_moves(board)
move = None
while move not in legal:
move = ask_number("Where will you move? (0 - 8): ", 0, NUM_SQUARES)
if move not in legal:
print "\nThat square is already occupied. Choose another.\n"
print "Fine..."
return move
def computer_move(board, computer, player1):
""" Make computer move."""
# make a copy to work with since function will be changing list
board = board[:]
# the best positions to have, in order
BEST_MOVES = (4, 0, 2, 6, 8, 1, 3, 5, 7)
print "I shall take square number",
# if computer can win, block that move
for move in legal_moves(board):
board[move] = computer
if winner(board) == computer:
print move
return move
# done checking this move, undo it
board[move] = EMPTY
# if player1 can win, block that move
for move in legal_moves(board):
board[move] = player1
if winner(board) == player1:
print move
return move
# done checking this move, undo it
board[move] = EMPTY
# since no one can win on next move, pick open square
for move in BEST_MOVES:
if move in legal_moves(board):
print move
return move
#done checking this move, undo it
board[move] = EMPTY
def next_turn(turn):
"""Switch turns."""
if turn == X:
return O
else:
return X
def congrat_winner(The_winner, computer, player1):
"""Congratulate the winner."""
if the_winner != TIE:
print the_winner, "won\n"
else:
print "It's a tie!\n"
if the_winner == computer:
print " Computer is great.\n"
elif the_winner == player1:
print "Player 1 is great.\n"
elif the_winner == TIE:
print "You two try again.\n"
def main():
display_instruct()
computer, player1 = pieses()
turn = X
board = new_board()
display_board(board)
while not winner(board):
if turn == player1:
move = player1_move(board, player1)
board[move] = player1
else:
turn == computer
move = computer_move(board, player2)
board[move] = computer
display_board(board)
turn = next_turn(turn)
the_winner = winner(board)
congrat_winner(the_winner , computer, player1)
# start the program
main()
raw_input("\n\nPress the enter key to quit.")
Editor's note:
If you have an error please state the error message.
Also, use code tags with your code to preserve the indentations. Otherwise the code is very difficult to read and not too many folks will help.