'Python Turtle tic-tac-toe board letters keep disappearing
I've made a tic-tac-toe game in python using python turtle. I've made it so that when you click on a square on the board, a letter is placed there, and then the computer places a letter onto the board. However, when the player places a letter on the board and the computer places a letter on the board, a split second later, the letters completely disappear from the board.
Here's the code in which the problem lies:
def printTurtleBoard():
pensize(10)
speed("fastest")
hideturtle()
screen.setup(500,500)
penup()
X = -150
Y = -50
goto(X,Y)
pendown()
for i in range(3):
for i in range(4):
forward(100)
right(90)
penup()
forward(100)
pendown()
for i in range(4):
forward(100)
right(90)
penup()
forward(100)
pendown()
for i in range(4):
forward(100)
right(90)
penup()
Y = Y + 100
goto(X,Y)
pendown()
randomY = random.randint(0,2)
randomX = random.randint(0,2)
global letterO
def letterO():
if randomY == 0 and randomX == 0:
drawer.penup()
drawer.goto(-100,40)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 0 and randomX == 1:
drawer.penup()
drawer.goto(0,40)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 0 and randomX == 2:
drawer.penup()
drawer.goto(100,40)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 1 and randomX == 0:
drawer.penup()
drawer.goto(-100,-60)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 1 and randomX == 1:
drawer.penup()
drawer.goto(0,-60)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 1 and randomX == 2:
drawer.penup()
drawer.goto(100,-60)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 2 and randomX == 0:
drawer.penup()
drawer.goto(-100,-160)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 2 and randomX == 1:
drawer.penup()
drawer.goto(0,-160)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
if randomY == 2 and randomX == 2:
drawer.penup()
drawer.goto(100,-160)
drawer.pendown()
drawer.write("O", align="center",font=("Arial", 75))
topleftsquare = Turtle()
topleftsquare.penup()
topleftsquare.shape("square")
topleftsquare.color("white")
topleftsquare.turtlesize(5)
topleftsquare.goto(-100,100)
topmiddlesquare = Turtle()
topmiddlesquare.penup()
topmiddlesquare.shape("square")
topmiddlesquare.color("white")
topmiddlesquare.turtlesize(5)
topmiddlesquare.goto(0,100)
toprightsquare = Turtle()
toprightsquare.penup()
toprightsquare.shape("square")
toprightsquare.color("white")
toprightsquare.turtlesize(5)
toprightsquare.goto(100,100)
middleleftsquare = Turtle()
middleleftsquare.penup()
middleleftsquare.shape("square")
middleleftsquare.color("white")
middleleftsquare.turtlesize(5)
middleleftsquare.goto(-100,0)
middlemiddlesquare = Turtle()
middlemiddlesquare.penup()
middlemiddlesquare.shape("square")
middlemiddlesquare.color("white")
middlemiddlesquare.turtlesize(5)
middlemiddlesquare.goto(0,0)
middlerightsquare = Turtle()
middlerightsquare.penup()
middlerightsquare.shape("square")
middlerightsquare.color("white")
middlerightsquare.turtlesize(5)
middlerightsquare.goto(100,0)
bottomleftsquare = Turtle()
bottomleftsquare.penup()
bottomleftsquare.shape("square")
bottomleftsquare.color("white")
bottomleftsquare.turtlesize(5)
bottomleftsquare.goto(-100,-100)
bottommiddlesquare = Turtle()
bottommiddlesquare.penup()
bottommiddlesquare.shape("square")
bottommiddlesquare.color("white")
bottommiddlesquare.turtlesize(5)
bottommiddlesquare.goto(0,-100)
bottomrightsquare = Turtle()
bottomrightsquare.penup()
bottomrightsquare.shape("square")
bottomrightsquare.color("white")
bottomrightsquare.turtlesize(5)
bottomrightsquare.goto(100,-100)
def top_left_square(x,y):
global place
global turn
topleftsquare.penup()
topleftsquare.pendown()
topleftsquare.color("white")
topleftsquare.penup()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(-100,40)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 1
print(place)
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
print(turn)
def top_middle_square(x,y):
global place
global turn
topmiddlesquare.penup()
topmiddlesquare.pendown()
topmiddlesquare.color("white")
topmiddlesquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(0,40)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 2
print(place)
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def top_right_square(x,y):
global place
global turn
toprightsquare.penup()
toprightsquare.pendown()
toprightsquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(100,40)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 3
print(place)
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def middle_left_square(x,y):
global place
global turn
middleleftsquare.penup()
middleleftsquare.pendown()
middleleftsquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(-100,-60)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 4
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def middle_middle_square(x,y):
global place
global turn
middlemiddlesquare.penup()
middlemiddlesquare.pendown()
middlemiddlesquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(0,-60)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 5
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def middle_right_square(x,y):
global place
global turn
middlerightsquare.penup()
middlerightsquare.pendown()
middlerightsquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(100,-60)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 6
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def bottom_left_square(x,y):
global place
global turn
bottomleftsquare.penup()
bottomleftsquare.pendown()
bottomleftsquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(-100,-160)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 7
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def bottom_middle_square(x,y):
global place
global turn
bottommiddlesquare.penup()
bottommiddlesquare.pendown()
bottommiddlesquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(0,-160)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 8
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
def bottom_right_square(x,y):
global place
global turn
bottomrightsquare.penup()
bottomrightsquare.pendown()
bottomrightsquare.penup()
drawer = Turtle()
drawer.speed("fastest")
drawer.hideturtle()
drawer.penup()
drawer.goto(100,-160)
drawer.pendown()
drawer.write("X", align="center",font=("Arial", 75))
place = 9
row = (place - 1) // 3
column = (place - 1) % 3
board[row][column] = "X"
print("\n")
printBoard()
print("\n")
win = checkWin()
turn = "O"
while playAgain == "y" and multiplayer == 1:
try:
global place
global turn
print("\n")
printTurtleBoard()
turn = "X"
print(turn)
while turn == "X":
topleftsquare.onclick(top_left_square)
topmiddlesquare.onclick(top_middle_square)
toprightsquare.onclick(top_right_square)
middleleftsquare.onclick(middle_left_square)
middlemiddlesquare.onclick(middle_middle_square)
middlerightsquare.onclick(middle_right_square)
bottomleftsquare.onclick(bottom_left_square)
bottommiddlesquare.onclick(bottom_middle_square)
bottomrightsquare.onclick(bottom_right_square)
win = checkWin()
if win == 1 or win == 2 or win == 3:
play_again()
if turn == "O":
counter += 1
print("Turns counted: ", counter)
print("\n")
printBoard()
print("\n")
computer()
win = checkWin()
if win == 1 or win == 2 or win == 3:
play_again()
#runs the play_again() function
global letterO
letterO()
printBoard()
Sorry this is really long, but I didn't know any other way I could get help on the question without posting all this code
I've tried giving the turtle a name in the printTurtleBoard() function to see if that would solve anything, but the same problem persisted
Solution 1:[1]
you are making letterO a function() and before that, declaring it as a varible. im not sure if this will fix your main problem, but get rid of the global line. also, you are defining functions() inside of your main function() un-indent them or add them before or after your main function.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | tntrobber123 |
