【发布时间】:2019-04-03 12:47:13
【问题描述】:
我按照本教程制作了一个乒乓球游戏https://youtu.be/C6jJg9Zan7w 我遇到的问题是球(乌龟物体)的速度在不同的计算机上是不一样的。例如,在辅导老师的电脑上,ball.dx ball.dy 的值为 2,球速正常,但在我的电脑上非常快,所以我不得不将其设置为 0.1。我认为这个问题是因为不同的计算机可以输出或多或少的帧。 我知道流行的游戏引擎(如统一虚幻引擎)中有一种方法使用时间而不是帧,因此变量在不同的计算机中是全局的。 我遇到的另一个问题是,当我移动球拍时,球的速度会略有变化。不知道是不是和上面一样的问题
import turtle
import winsound
wn = turtle.Screen()
wn.title('Pong')
wn.bgcolor('black')
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('white')
paddle_a.penup()
paddle_a.goto(-350, 0)
paddle_a.shapesize(5, 1)
# Paddle B
paddle_b = turtle.Turtle()
paddle_b.speed(0)
paddle_b.shape('square')
paddle_b.color('white')
paddle_b.penup()
paddle_b.goto(350, 0)
paddle_b.shapesize(5, 1)
# Ball
ball = turtle.Turtle()
ball.speed(0)
ball.shape('square')
ball.color('white')
ball.penup()
ball.dx = 0.15
ball.dy = 0.15
# Pen
pen = turtle.Turtle()
pen.speed(0)
pen.color('white')
pen.penup()
pen.goto(0, 260)
pen.write("Player A: 0 Player B: 0", align='center', font=('Courier', 24, 'bold'))
pen.hideturtle()
# Score
score_a = 0
score_b = 0
def paddle_a_up():
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_a_down():
y = paddle_a.ycor()
y += -20
paddle_a.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()
# Moving Ball
ball.setx(ball.xcor() + ball.dx)
ball.sety(ball.ycor() + ball.dy)
# Border checking
if ball.ycor() > 290 or ball.ycor() < -290:
winsound.PlaySound('bounce.wav', winsound.SND_ASYNC)
ball.dy *= -1
if ball.xcor() > 390:
winsound.PlaySound('bounce.wav', winsound.SND_ASYNC)
ball.goto(0, 0)
ball.dx *= -1
score_a += 1
pen.clear()
pen.write("Player A: {} Player B: {}".format(score_a, score_b), align='center', font=('Courier', 24, 'bold'))
if ball.xcor() < -390:
winsound.PlaySound('bounce.wav', winsound.SND_ASYNC)
ball.goto(0, 0)
ball.dx *= -1
score_b += 1
pen.clear()
pen.write("Player A: {} Player B: {}".format(score_a, score_b), align='center', font=('Courier', 24, 'bold'))
# Paddle and ball collisions
if (ball.xcor() > 340 and ball.xcor() < 350) and (ball.ycor() < paddle_b.ycor() + 60 and ball.ycor() > paddle_b.ycor() -60):
winsound.PlaySound('bounce.wav', winsound.SND_ASYNC)
ball.setx(340)
ball.dx *= -1
if (ball.xcor() < -340 and ball.xcor() > -350) and (ball.ycor() < paddle_a.ycor() + 60 and ball.ycor() > paddle_a.ycor() -60):
winsound.PlaySound('bounce.wav', winsound.SND_ASYNC)
ball.setx(-340)
ball.dx *= -1
【问题讨论】:
-
我发布的代码会导入一些文件,因此可能对您不起作用。只需注释掉使用“winsound”的行
-
嗨!你找到解决问题的方法了吗?我看了同样的教程,遇到了同样的问题。