0

Hey all here is the code if you want to reproduce the game note it's not complete. I have a brief question regarding the command in python turtle "yourtext.ycor() or yourtext.xcor()". So, I know that this command will return a coordinate position however I believe that it will return the center position, but I am not sure (maybe the leftmost edge or the rightmost edge? (I am referring to the right paddle in this example). So, in essence what does the returned number refer to in terms of pixel position.

Pong Game Output

#Simple Pong in Python 3 for Beginners 
# By @TokyoEdTech
# Part 1: Getting Started

import turtle
import os


wn = turtle.Screen()
wn.title("Pong")
wn.bgcolor("orange")
wn.setup(width=800, height=600)
wn.tracer(0)
 
#Paddle A 

paddle_a = turtle.Turtle()
paddle_a.speed(0)
paddle_a.shape("square")
paddle_a.color("black")
paddle_a.shapesize(stretch_wid=5, stretch_len=1)
paddle_a.penup()
paddle_a.goto(-350,0)

#Paddle B 

paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape("square")
paddle_b.color("black")
paddle_b.shapesize(stretch_wid=5, stretch_len=1)  #This means 100 Tall and 20 Wide so 1=20pix and so 5*20=100pix 
paddle_b.penup()
paddle_b.goto(350,0)

#Ball 
ball = turtle.Turtle()
ball.speed(0)
ball.shape("square")
ball.color("black")
ball.penup()
ball.goto(0,0)
ball.dx =  .2
ball.dy = .2 

#Function 
def paddle_a_up():
    y=paddle_a.ycor()
    y += 20
    paddle_a.sety(y)

def paddle_a_down():
    y=paddle_a.ycor()
    y -= 20
    paddle_a.sety(y)

def paddle_b_up():
    y=paddle_b.ycor()
    y += 20
    paddle_b.sety(y)

def paddle_b_down():
    y=paddle_b.ycor()
    y -= 20
    paddle_b.sety(y)

# Keyboard binding 
wn.listen()
wn.onkeypress(paddle_a_up,"w")
wn.onkeypress(paddle_a_down,"s")
wn.onkeypress(paddle_b_up,"Up")
wn.onkeypress(paddle_b_down,"Down")

#Main game Loop 
while True:
    wn.update()

#Move the Ball 
    ball.setx(ball.xcor() + ball.dx)
    ball.sety(ball.ycor() + ball.dy)

#BorderChecking
    if ball.ycor() > 290:
        ball.sety(290)
        ball.dy *= -1


    if ball.ycor() < -290:
        ball.sety(-290)
        ball.dy *= -1

    if ball.xcor() > 390:
        ball.goto(0,0)
        ball.dx*=-1

    if ball.xcor() < -390:
        ball.goto(0,0)
        ball.dx *= -1





#Paddle and Ball Collisions 

    if (ball.xcor() > 340 and ball.xcor() < 350) and (ball.ycor() < paddle_b.ycor() + 40 and ball.ycor() > paddle_b.ycor() -40):
        ball.setx(340)
        ball.dx *=-1

strong text

cdlane
  • 40,441
  • 5
  • 32
  • 81
Rudy F.
  • 9
  • 1
  • 1
    The coordinates are simply the origin point used for drawing the turtle's shape. I believe all the standard shapes are centered on that point - but if you create custom shapes, they can be arbitrarily positioned (including being completely disconnected from the origin point). – jasonharper May 16 '22 at 23:14

1 Answers1

0

I believe that it will return the center position, but I am not sure (maybe the leftmost edge or the rightmost edge? ... what does the returned number refer to in terms of pixel position.

I agree with @jasonharper with respect to custom shapes (+1) but with respect to built-in shapes, I think this is a question best posed to turtle itself:

from turtle import Screen, Turtle

RADIUS = 150
MAGNIFICATION = 4
FONT = ('Arial', 24, 'normal')

screen = Screen()
shapes = screen.getshapes()
angle = 360/len(shapes)

turtle = Turtle()
turtle.hideturtle()
turtle.shapesize(MAGNIFICATION)
turtle.penup()
turtle.sety(-RADIUS)

for shape in shapes:
    turtle.shape(shape)
    turtle.stamp()
    turtle.dot(MAGNIFICATION, 'red')

    turtle.right(90)
    turtle.forward(RADIUS/2)
    turtle.write(shape, align='center', font=FONT)
    turtle.backward(RADIUS/2)
    turtle.left(90)

    turtle.circle(RADIUS, extent=angle)

screen.exitonclick()

enter image description here

The answer is that the built-in shapes vary with respect to the location of the hot spot. As far as your paddles, which are based on 'square', the hot spot is the center.

cdlane
  • 40,441
  • 5
  • 32
  • 81