Asif Mohmad
Asif Mohmad

Reputation: 15

Why is my Python turtle screen asymmetrical?

I created a pong game where I noticed the paddles are not placed equally at the screen edges.

I created an 800 pixel wide screen, and placed paddles at xcor = 380 and xcor = -380 but on the screen left paddle shows some gap but right paddle doesn't. Is my screen unsymmetrical? How do I fix it?

screen.setup(width=800, height=600)
screen.bgcolor("black")
screen.title("PONG")
screen.tracer(0)

l_paddle = Paddle()
l_paddle.create_paddle((-380, 0))
r_paddle = Paddle()
r_paddle.create_paddle((380, 0))

screenshot of screen

Upvotes: 1

Views: 332

Answers (1)

cdlane
cdlane

Reputation: 41872

When we specify a window size to setup(), we're talking about total pixels used on the screen. Since there is chrome around the window (edges, title bar, etc.) the actual area we have to work with is slightly smaller. Trying to place two turtles at exactly the left and right edge, ignoring chrome:

from turtle import Screen, Turtle

CURSOR_SIZE = 20

WIDTH, HEIGHT = 600, 400

screen = Screen()
screen.setup(WIDTH, HEIGHT)

l_paddle = Turtle('square')
l_paddle.fillcolor('white')
l_paddle.setx(CURSOR_SIZE/2 - WIDTH/2)

r_paddle = Turtle('square')
r_paddle.fillcolor('white')
r_paddle.setx(WIDTH/2 - CURSOR_SIZE/2)

screen.exitonclick()

We get a result similar to yours:

enter image description here

If we compensate for the internal and external chrome elements:

from turtle import Screen, Turtle

CURSOR_SIZE = 20
BORDER_SIZE = 2  # inside the window
CHROME_SIZE = 9  # around the window

WIDTH, HEIGHT = 600, 400

screen = Screen()
screen.setup(WIDTH, HEIGHT)

l_paddle = Turtle('square')
l_paddle.fillcolor('white')
l_paddle.setx(CURSOR_SIZE/2 - WIDTH/2 + BORDER_SIZE)

r_paddle = Turtle('square')
r_paddle.fillcolor('white')
r_paddle.setx(WIDTH/2 - CURSOR_SIZE/2 - BORDER_SIZE - CHROME_SIZE)

screen.exitonclick()

We can get a more precise result:

enter image description here

The problem here is that the amount of chrome is system dependent but turtle doesn't tell us how much to compensate. You might be able to find out from the underlying tkinter code.

My recommendation is you estimate the best you can, assume it's not accurate on all systems, and stay away from the edges so it's less of an issue. The error can be greater in the Y dimension when the title bar is part of the chrome.

Upvotes: 1

Related Questions