【发布时间】:2022-01-21 13:08:39
【问题描述】:
我正在使用 PyGame 在 Python 中构建一个 Pong 游戏。出于某种原因,游戏中的球有时不会从墙壁/屏幕边缘反弹。它会从墙上反弹一两次然后停止。
我不知道为什么会这样。
有人可以检查我的代码以查看是否有任何错误吗?
import os
import pygame
WIDTH = 600
HEIGHT = 500
class Slider:
def __init__(self, x, y):
self.x = x
self.y = y
self.height = 120
self.width = 8
def draw(self, win):
pygame.draw.rect(win, (0, 255, 64), (self.x, self.y, self.width, self.height))
def move(self, dir, dis):
if dir == 'top' and self.y >= 0:
self.y -= dis
elif dir == 'bottom' and self.y <= 379:
self.y += dis
else:
self.y = self.y
class Ball:
def __init__(self, x, y):
self.x = x
self.y = y
self.radius = 15
self.speedY = 0.2
self.speedX = 0.2
self.top = y
self.bottom = y + 30
self.left = x
self.right = x + 30
def draw(self, win):
ball = pygame.draw.circle(win, (255, 255, 0), (self.x, self.y), self.radius)
self.top = ball.top
self.bottom = ball.bottom
self.left = ball.left
self.right = ball.right
def move(self):
if self.top <= 0:
self.speedY *= -1
else:
self.y += self.speedY
self.x += self.speedX
if self.bottom >= HEIGHT:
self.speedY *= -1
else:
self.y += self.speedY
self.x += self.speedX
if self.left <= 0:
self.speedX *= -1
else:
self.y += self.speedY
self.x += self.speedX
if self.right >= WIDTH:
self.speedX *= -1
else:
self.y += self.speedY
self.x += self.speedX
def draw_window(win, *sprites):
pygame.display.update()
win.fill((0, 0, 0, 0))
for sprite in sprites:
sprite.draw(win)
def main():
win = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption('Pong Game')
slider1 = Slider(100, 250)
slider2 = Slider(500, 250)
ball = Ball(300, 250)
run = True
while run:
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
if event.type == pygame.KEYDOWN:
if event.key == pygame.K_DOWN:
slider1.move('bottom', 0.3)
elif event.key == pygame.K_UP:
slider1.move('top', 0.3)
else:
print(pygame.key.name(event.key))
ball.move()
key = pygame.key.get_pressed()
if key[pygame.K_s]:
slider2.move('bottom', 0.3)
elif key[pygame.K_w]:
slider2.move('top', 0.3)
draw_window(win, slider1, slider2, ball)
pygame.quit()
quit()
main()
【问题讨论】: