Python Forum
I can't control the speed of the turtle object
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
I can't control the speed of the turtle object
#1
I recently began writing a simple ping pong game in python using turtle. The code seems fine its just but I can't control the speed of ball which is also a turtle object. Here my code (sorry for the mess):
import turtle

# Game Window Properties
gameWindow = turtle.Screen()
gameWindow.title("`*pInG PoNg*")
gameWindow.bgcolor("black")
gameWindow.setup(width = 800, height = 600)
gameWindow.tracer(0)

# Paddle A
paddleA = turtle.Turtle()
paddleA.speed("slowest")
paddleA.shape("square")
paddleA.color("white")
paddleA.shapesize(stretch_wid = 5, stretch_len = 1)
paddleA.penup()
paddleA.goto(-350, 0)

# Paddle B
paddleB = turtle.Turtle()
paddleB.speed("slowest")
paddleB.shape("square")
paddleB.color("white")
paddleB.shapesize(stretch_wid = 5, stretch_len = 1)
paddleB.penup()
paddleB.goto(350, 0)

# Ball
ball = turtle.Turtle()
ball.speed("slowest")
ball.shape("square")
ball.color("white")
ball.penup()
ball.goto(0, 0)
ball.mvX = 1
ball.mvY = 1

# Paddle A Functions
def paddleAUp():
	ycor = paddleA.ycor()
	ycor += 20
	paddleA.sety(ycor)

def paddleADown():
	ycor = paddleA.ycor()
	ycor -= 20
	paddleA.sety(ycor)

# Paddle B Functions
def paddleBUp():
	ycor = paddleB.ycor()
	ycor += 20
	paddleB.sety(ycor)

def paddleBDown():
	ycor = paddleB.ycor()
	ycor -= 20
	paddleB.sety(ycor)

# Keyboard Binding
gameWindow.listen()
gameWindow.onkeypress(paddleAUp, "w")
gameWindow.onkeypress(paddleADown, "s")
gameWindow.onkeypress(paddleBUp, "Up")
gameWindow.onkeypress(paddleBDown, "Down")

# Game loop
gameOver = False
while not gameOver:
	gameWindow.update()

	# Moving the ball
	ball.setx(ball.xcor() + ball.mvX)
	ball.sety(ball.ycor() + ball.mvY)
 
 	# Borders
	if ball.ycor() > 290:
		ball.sety(290)
		ball.mvY *= -1

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

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

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

	# Collisions
	if (ball.xcor() > 340 and ball.xcor() < 350) and (ball.ycor() < paddleB.ycor() + 50 and ball.ycor() > paddleB.ycor() - 50):
		ball.setx(340)
		ball.mvX *= -1
		
	if (ball.xcor() < -340 and ball.xcor() > -350) and (ball.ycor() < paddleB.ycor() + 50 and ball.ycor() > paddleB.ycor() - 50):
		ball.setx(-340)
		ball.mvX *= -1	
Thanks in advance !!.
Reply
#2
Use a speed scalar to change how much the ball moves each update. I changed mvX and mvY to 0.1 and the game is quite playable.
Reply


Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020