Python Win Checking

Ginger_Ale

Lurker
Retired Moderator
Joined
Jul 23, 2004
Messages
8,802
Location
Red Sox Nation
I am trying to make a tic tac toe game (text based) in Python - it's pretty easy so far (only multiplayer, I might try AI later but that will be a bit harder). The one problem I have is with checking to see if a person has won. I had some code in there and it worked, but as I was editing some other sections, it seems it now gives a win when you place a X or O in a random square (ie; row 1, column 1 doesn't give a win, but row 2, column 3 does). If anyone could find the culprit / make a suggestion, that'd be great. I probably overlooked something.

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

:goodjob:
 
Back
Top Bottom