简体   繁体   中英

Turtle module for Python - circles glitch?

I have been trying to create a naughts and crosses game using Python's Turtle module. The issue I keep running into is that the white circles used to cover up the numbers labelling each grid square (so that naughts and crosses can be written there instead) aren't drawn by the turtle in the same place each time the program runs - they are in a similar place, but have jumped slightly and so no longer cover up the letter below. Here's the section of my code which creates the circles:

def position_1(naught_cross): #each function contains the code to write its respective number in the correct place on the grid
    if naught_cross != "1": #i.e. when a 'o' or 'x' is submitted as an argument
        circle_drawer(-125,140) #calls function to draw circle in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(-115,130) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font)) #having the variable 'naught_cross' enables it to change between the grid number and a naught/cross
def position_2(naught_cross):
    if naught_cross != "2":
        circle_drawer(-15,140) #calls function to draw box in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(-5,130) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_3(naught_cross):
    if naught_cross != "3":
        circle_drawer(85,140) #calls function to draw box in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(95,130) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_4(naught_cross):
    if naught_cross != "4":
        circle_drawer(-125,40) #calls function to draw box in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(-115,30) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_5(naught_cross):
    if naught_cross != "5":
        circle_drawer(-15,40)
    t.penup()
    t.setpos(-5,30) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_6(naught_cross):
    if naught_cross != "6":
        circle_drawer(85,40)
    t.penup()
    t.setpos(95,30) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_7(naught_cross):
    if naught_cross != "7": 
        circle_drawer(-125,-60) #calls function to draw box in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(-115,-70) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_8(naught_cross):
    if naught_cross != "8":
        circle_drawer(-15,-60) #calls function to draw box in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(-5,-70) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))
def position_9(naught_cross):
    if naught_cross != "9":
        circle_drawer(85,-60) #calls function to draw box in square before text is typed so text can be cleared when naughts/crosses are inputted in the grid sqaures
    t.penup()
    t.setpos(95,-70) #sets the position of the turltle head in pixels
    font = ("Arial",30,"normal")
    t.write(naught_cross,font=(font))


def circle_drawer(x,y): #paramters are x,y coordinates (contain actual coords in arguments when called) if grid in which white box must be drawn
    t.ht() #hides turtle
    t.lt(90)
    t.setpos(x,y) #sets turtle in poosition according to values in arguments 
    t.fillcolor("white") #sets the colour as white
    t.begin_fill() #fills circle
    t.circle(30) #draws a circle of radius 30
    t.end_fill() #ends filling circle

Does anyone have any ideas to solve this?

There's not sufficient code to give a definitive answer but my guess is the problem is in this line of the circle_drawer() function:

t.lt(90)

First it's suspicious as it's the only line that isn't commented! Second, we really don't know how the turtle is oriented before or after this call as it depends on turns the turtle's made prior to this function call. My belief is you really wanted:

t.setheading(0)

or some other angle other than 0 (zero). This sets the turtle to a consistent known heading before doing your drawing and writing.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM