主要.py:
from turtle import Screen
from Paddle import Paddle
#creating screen
screen = Screen()
screen.screensize(1000, 600)
screen.bgcolor('black')
screen.title('Pong')
screen.tracer(0)
#paddle objects: rPaddle is for the paddle in the right and lPaddle for the left one
rPaddle = Paddle((350, 0)) #the tuple is for the starting position of the paddle object
lPaddle = Paddle((-350, 0))
#screen listeners
screen.listen()
screen.onkey(lPaddle.up, 'w')
screen.onkey(lPaddle.down, 's')
screen.onkey(rPaddle.up, 'Up')
screen.onkey(rPaddle.down, 'Down')
game_on = True
while game_on:
screen.update()
screen.exitonclick()
桨.py:
from turtle import Turtle
class Paddle(Turtle):
def __init__(self, starting_coords): #creates the paddles
super().__init__()
self.paddle = Turtle("square")
self.paddle.color('white')
self.paddle.shapesize(5, 1)
self.paddle.penup()
self.paddle.goto(starting_coords)
def up(self):
new_y = self.paddle.ycor() + 40 #makes the paddle move 40 pixels up
self.goto(self.xcor(), new_y)
print("up")
def down(self):
new_y = self.paddle.ycor() - 40 # moves the paddle 40 pixels down
self.goto(self.xcor(), new_y)
print('down')
我留下了一些打印语句以确保按键被按下,但即使显示打印语句,桨仍然不会移动,所以我在遵循教程时对该怎么做感到非常困惑。
奇怪的是,您对 Turtle 进行了子类化,并且还创建了一个 Turtle 实例作为成员。这会造成混乱:您在屏幕上显示
self.paddle
,然后使用 self.goto()
进行移动。这是一只完全不同的乌龟!您可能的意思是:self.paddle.goto()
。
请参阅如何在 python 中创建从turtle模块继承的子类,了解为什么不应该子类化turtle的更多原因(如果这还不够证据)。
顺便说一句,
while game_on:
尽可能地猛烈攻击 CPU,从而提供不可移植的帧速率——快的机器运行得快,慢的机器运行得慢。最好使用 ontimer
来运行事件循环。 这是一个例子。