A
ale.of.ginger
Greetings! I am trying to make a multiplayer (no AI, 2 person) game of
tic tac toe in Python. So far it has been pretty simple. My only
concern is with the win checking to see if a person has won. At first
it looked like it was working, but now it sometimes assigns a win when
you enter an X or O (doesn't matter) on certain tiles (row 1, column 1
won't be an error, but row 2, column 3 will be...). If you can find
the problem, I'd be very thankful! Here's the code:
# TIC TAC TOE
# Started: 10/31/05
# Ended: still in progress
loop = 1
while loop == 1:
print "TIC TAC TOE"
print "1 - Play Multiplayer"
print "2 - Quit"
option = input("> ")
if option == 2:
# QUIT
loop = 0
if option == 1:
# MAIN GAME LOOP
print "Rules: You will alternate turns."
print "On your turn, you can place your letter (O = Player 1 or
X = Player 2)",
print "in any unoccupied square."
print "The first to get 3 in a row wins. Good luck!"
gameboard = [' ',' ',' ',' ',' ',' ',' ',' ',' ']
win = 0
turnnumber = 0
while win != 1:
if turnnumber % 2 == 0:
print " "
print "Player 1"
print " "
print
"[",gameboard[0],"]","[",gameboard[1],"]","[",gameboard[2],"]"
print
"[",gameboard[3],"]","[",gameboard[4],"]","[",gameboard[5],"]"
print
"[",gameboard[6],"]","[",gameboard[7],"]","[",gameboard[8],"]"
print "What row?"
row = input("> ")
print "What column?"
column = input("> ")
if (row > 3 or row < 1) or (column > 3 or column < 1):
print "Exceeeded limits."
turnnumber = turnnumber - 1
if row == 1 and column == 1:
if gameboard[0] != ('O' or 'X'):
gameboard[0] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 1:
if gameboard[3] != ('O' or 'X'):
gameboard[3] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 1:
if gameboard[6] != ('O' or 'X'):
gameboard[6] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 2:
if gameboard[1] != ('O' or 'X'):
gameboard[1] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 2:
if gameboard[4] != ('O' or 'X'):
gameboard[4] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 2:
if gameboard[7] != ('O' or 'X'):
gameboard[7] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 3:
if gameboard[2] != ('O' or 'X'):
gameboard[2] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 3:
if gameboard[5] != ('O' or 'X'):
gameboard[5] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 3:
if gameboard[8] != ('O' or 'X'):
gameboard[8] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
turnnumber = turnnumber + 1
if (((gameboard[0] and gameboard[1] and gameboard[2]) ==
'O') or ((gameboard[3] and gameboard[4] and gameboard[5]) == 'O') or
((gameboard[6] and gameboard[7] and gameboard[8]) == 'O')\
or ((gameboard[0] and gameboard[3] and gameboard[6]) ==
'O') or ((gameboard[1] and gameboard[4] and gameboard[7]) == 'O') or
((gameboard[2] and gameboard[5] and gameboard[8]) == 'O')\
or ((gameboard[0] and gameboard[4] and gameboard[8]) ==
'O') or ((gameboard[2] and gameboard[4] and gameboard[6]) == 'O')):
print "Player 1 wins!"
win = 1
if ((gameboard[0:9]) == ('O' or 'X')) and (win == 0):
print "Tie."
win = 1
if turnnumber % 2 == 1 and win != 1:
print " "
print "Player 2"
print " "
print
"[",gameboard[0],"]","[",gameboard[1],"]","[",gameboard[2],"]"
print
"[",gameboard[3],"]","[",gameboard[4],"]","[",gameboard[5],"]"
print
"[",gameboard[6],"]","[",gameboard[7],"]","[",gameboard[8],"]"
print "What row?"
row = input("> ")
print "What column?"
column = input("> ")
if (row > 3 or row < 1) or (column > 3 or column < 1):
print "Exceeeded limits."
turnnumber = turnnumber - 1
if row == 1 and column == 1:
if gameboard[0] != ('O' or 'X'):
gameboard[0] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 1:
if gameboard[3] != ('O' or 'X'):
gameboard[3] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 1:
if gameboard[6] != ('O' or 'X'):
gameboard[6] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 2:
if gameboard[1] != ('O' or 'X'):
gameboard[1] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 2:
if gameboard[4] != ('O' or 'X'):
gameboard[4] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 2:
if gameboard[7] != ('O' or 'X'):
gameboard[7] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 3:
if gameboard[2] != ('O' or 'X'):
gameboard[2] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 3:
if gameboard[5] != ('O' or 'X'):
gameboard[5] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 3:
if gameboard[8] != ('O' or 'X'):
gameboard[8] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
turnnumber = turnnumber + 1
if (((gameboard[0] and gameboard[1] and gameboard[2]) ==
'X') or ((gameboard[3] and gameboard[4] and gameboard[5]) == 'X') or
((gameboard[6] and gameboard[7] and gameboard[8]) == 'X')\
or ((gameboard[0] and gameboard[3] and gameboard[6]) ==
'X') or ((gameboard[1] and gameboard[4] and gameboard[7]) == 'X') or
((gameboard[2] and gameboard[5] and gameboard[8]) == 'X')\
or ((gameboard[0] and gameboard[4] and gameboard[8]) ==
'X') or ((gameboard[2] and gameboard[4] and gameboard[6]) == 'X')):
print "Player 2 wins!"
win = 1
tic tac toe in Python. So far it has been pretty simple. My only
concern is with the win checking to see if a person has won. At first
it looked like it was working, but now it sometimes assigns a win when
you enter an X or O (doesn't matter) on certain tiles (row 1, column 1
won't be an error, but row 2, column 3 will be...). If you can find
the problem, I'd be very thankful! Here's the code:
# TIC TAC TOE
# Started: 10/31/05
# Ended: still in progress
loop = 1
while loop == 1:
print "TIC TAC TOE"
print "1 - Play Multiplayer"
print "2 - Quit"
option = input("> ")
if option == 2:
# QUIT
loop = 0
if option == 1:
# MAIN GAME LOOP
print "Rules: You will alternate turns."
print "On your turn, you can place your letter (O = Player 1 or
X = Player 2)",
print "in any unoccupied square."
print "The first to get 3 in a row wins. Good luck!"
gameboard = [' ',' ',' ',' ',' ',' ',' ',' ',' ']
win = 0
turnnumber = 0
while win != 1:
if turnnumber % 2 == 0:
print " "
print "Player 1"
print " "
"[",gameboard[0],"]","[",gameboard[1],"]","[",gameboard[2],"]"
"[",gameboard[3],"]","[",gameboard[4],"]","[",gameboard[5],"]"
"[",gameboard[6],"]","[",gameboard[7],"]","[",gameboard[8],"]"
print "What row?"
row = input("> ")
print "What column?"
column = input("> ")
if (row > 3 or row < 1) or (column > 3 or column < 1):
print "Exceeeded limits."
turnnumber = turnnumber - 1
if row == 1 and column == 1:
if gameboard[0] != ('O' or 'X'):
gameboard[0] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 1:
if gameboard[3] != ('O' or 'X'):
gameboard[3] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 1:
if gameboard[6] != ('O' or 'X'):
gameboard[6] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 2:
if gameboard[1] != ('O' or 'X'):
gameboard[1] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 2:
if gameboard[4] != ('O' or 'X'):
gameboard[4] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 2:
if gameboard[7] != ('O' or 'X'):
gameboard[7] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 3:
if gameboard[2] != ('O' or 'X'):
gameboard[2] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 3:
if gameboard[5] != ('O' or 'X'):
gameboard[5] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 3:
if gameboard[8] != ('O' or 'X'):
gameboard[8] = ('O')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
turnnumber = turnnumber + 1
if (((gameboard[0] and gameboard[1] and gameboard[2]) ==
'O') or ((gameboard[3] and gameboard[4] and gameboard[5]) == 'O') or
((gameboard[6] and gameboard[7] and gameboard[8]) == 'O')\
or ((gameboard[0] and gameboard[3] and gameboard[6]) ==
'O') or ((gameboard[1] and gameboard[4] and gameboard[7]) == 'O') or
((gameboard[2] and gameboard[5] and gameboard[8]) == 'O')\
or ((gameboard[0] and gameboard[4] and gameboard[8]) ==
'O') or ((gameboard[2] and gameboard[4] and gameboard[6]) == 'O')):
print "Player 1 wins!"
win = 1
if ((gameboard[0:9]) == ('O' or 'X')) and (win == 0):
print "Tie."
win = 1
if turnnumber % 2 == 1 and win != 1:
print " "
print "Player 2"
print " "
"[",gameboard[0],"]","[",gameboard[1],"]","[",gameboard[2],"]"
"[",gameboard[3],"]","[",gameboard[4],"]","[",gameboard[5],"]"
"[",gameboard[6],"]","[",gameboard[7],"]","[",gameboard[8],"]"
print "What row?"
row = input("> ")
print "What column?"
column = input("> ")
if (row > 3 or row < 1) or (column > 3 or column < 1):
print "Exceeeded limits."
turnnumber = turnnumber - 1
if row == 1 and column == 1:
if gameboard[0] != ('O' or 'X'):
gameboard[0] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 1:
if gameboard[3] != ('O' or 'X'):
gameboard[3] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 1:
if gameboard[6] != ('O' or 'X'):
gameboard[6] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 2:
if gameboard[1] != ('O' or 'X'):
gameboard[1] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 2:
if gameboard[4] != ('O' or 'X'):
gameboard[4] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 2:
if gameboard[7] != ('O' or 'X'):
gameboard[7] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 1 and column == 3:
if gameboard[2] != ('O' or 'X'):
gameboard[2] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 2 and column == 3:
if gameboard[5] != ('O' or 'X'):
gameboard[5] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
if row == 3 and column == 3:
if gameboard[8] != ('O' or 'X'):
gameboard[8] = ('X')
else:
print "This cell is already filled."
turnnumber = turnnumber - 1
turnnumber = turnnumber + 1
if (((gameboard[0] and gameboard[1] and gameboard[2]) ==
'X') or ((gameboard[3] and gameboard[4] and gameboard[5]) == 'X') or
((gameboard[6] and gameboard[7] and gameboard[8]) == 'X')\
or ((gameboard[0] and gameboard[3] and gameboard[6]) ==
'X') or ((gameboard[1] and gameboard[4] and gameboard[7]) == 'X') or
((gameboard[2] and gameboard[5] and gameboard[8]) == 'X')\
or ((gameboard[0] and gameboard[4] and gameboard[8]) ==
'X') or ((gameboard[2] and gameboard[4] and gameboard[6]) == 'X')):
print "Player 2 wins!"
win = 1