user3357580
user3357580

Reputation: 9

How to find tie game python

Hi i was making this tic tac toe game and i watched some tutorials for it, but there wasn't any game that could end with tie game i tried to make one but the game freezes when tie game appears don't worry about my Finnish variables and comments

import random

board = [0,1,2,
3,4,5,
6,7,8]

def show():
    print board[0], '|',board[1],'|',board[2]
    print '----------'
    print board[3], '|',board[4],'|',board[5]
    print '----------'
    print board[6], '|',board[7],'|',board[8]

def checkLine(char, spot1, spot2, spot3):
    if (board[spot1] == char) and (board[spot2] == char) and (board [spot3] == char)    :
        return True
    else:
        return False

def checkAll(char):
    ret = False
    if checkLine(char, 0, 1, 2):
        ret = True
    if checkLine(char, 0,3, 6):
        ret = True
    if checkLine(char, 1, 4, 7):
        ret = True
    if checkLine(char, 2, 5, 8):
        ret = True
    if checkLine(char, 6, 7, 8):
        ret = True
    if checkLine(char, 3, 4, 5):
        ret = True
    if checkLine(char, 2, 4, 6):
        ret = True
    if checkLine(char, 0, 4, 8):
        ret = True
    return ret

moves = range(9) 
numindex = 1
ratkennut = False
while moves:
    show()

    input = raw_input("Put x: ")
    try:
        val = int(input)
        input = int(input)
    except ValueError:
        print("Input number!")
        input = raw_input("Put x: ")
        input = int(input)
    if input in moves:
        moves.remove(input)

    if board [input] != 'x' and board[input] != 'o':
        board[input] = 'x'

        if checkAll('x') == True:
            print "~~ X Won ~~"
            ratkennut = True
            break;

        while moves:
            random.seed() #Gives opponents move
            opponent = random.choice(moves)
            moves.remove(opponent)

            if board[opponent] != 'o' and board[opponent] != 'x':
                board[opponent] = 'o'

                if checkAll('o') == True:
                    print "~~ O Won ~~"
                    ratkennut = True
                break;
    else:
        print 'This  spot is taken'
else:
    print "Tie!"

Question: What's wrong with this code when the game ends with tie game it freezes and i need to ctrl + c how to make it find the tie game and print "tie game" I edited it and now it works really great!

Upvotes: 2

Views: 312

Answers (2)

jonrsharpe
jonrsharpe

Reputation: 122107

Your randint move choice in a while loop for the opponent could run indefinitely, especially as the number of valid moves remaining gets smaller. Instead, make a list of valid moves and list.remove() each move from it:

moves = range(9) 

This simplifies the user's move:

if input in moves:
    moves.remove(input)

The opponent's move:

opponent = random.choice(moves)
moves.remove(opponent)

And determining the end of the game:

while moves:
    ...
else:
    print "It's a tie."

Upvotes: 2

Noelkd
Noelkd

Reputation: 7906

You could count your moves there are only 9 moves in a tic tac toe game.

You want something like:

if  not checkAll('o') and  not checkAll('x') and moves == 9:
    print "Tie Game"
    break

Upvotes: 1

Related Questions