You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pygame开发乒乓球游戏时遇TypeError:draw()缺少必填参数

Pygame乒乓球游戏位置参数错误修复

问题根源

  1. draw函数参数缺失:main循环里重复调用了draw,其中draw(WIN)未传递paddles参数,但draw()函数定义明确要求接收win和paddles两个参数,这直接触发了TypeError。
  2. handle_paddle_movement参数传递错误:调用该函数时,你把两个paddle打包成列表传入,但函数定义需要分别传入left_paddle和right_paddle两个独立对象,不修复的话后续移动逻辑会报错。

修复步骤

  1. 删除main循环中多余的draw(WIN)调用,只保留正确的draw(WIN, [left_paddle, right_paddle])。
  2. 修改handle_paddle_movement的调用方式,从handle_paddle_movement(keys, [left_paddle, right_paddle])改为handle_paddle_movement(keys, left_paddle, right_paddle)。

修复后的完整代码

import pygame
pygame.init()

WIDTH, HEIGHT = 700, 500
WIN = pygame.display.set_mode((WIDTH, HEIGHT))
pygame.display.set_caption("Ping Pong!")
FPS = 60

WHITE = 255,255,255
BLACK = 0,0,0
PADDLE_WIDTH, PADDLE_HEIGHT = 20, 100

class Paddle:
    color = WHITE
    VEL = 4
    def __init__(self, x, y, width, height):
        self.x = x
        self.y = y
        self.width = width
        self.height = height

    def draw(self,win):
        pygame.draw.rect(win, self.color, (self.x, self.y, self.width,self.height))
        #x and y coords will be the top left corner of the object rectangle
        #The other variables will be in respect of the top left coordinate

    def move(self, up=True):
        if up:
            self.y -= self.VEL
        else:
            self.y += self.VEL

def draw(win, paddles):
    win.fill(BLACK)
    for paddle in paddles:
        paddle.draw(win)
    pygame.display.update() #Updates the display

def handle_paddle_movement(keys, left_paddle, right_paddle):
    if keys[pygame.K_w]:
        left_paddle.move(up=True)
    if keys[pygame.K_s]:
        left_paddle.move(up=False)

    if keys[pygame.K_UP]:
        right_paddle.move(up=True)
    if keys[pygame.K_DOWN]:
        right_paddle.move(up=False)
        
def main():
    run = True
    clock = pygame.time.Clock()
    left_paddle = Paddle(10, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT)
    right_paddle = Paddle(WIDTH - 10 - PADDLE_WIDTH, HEIGHT//2 - PADDLE_HEIGHT//2, PADDLE_WIDTH, PADDLE_HEIGHT)

    while run:
        #Limits Frames per Second
        clock.tick(FPS)
        draw(WIN, [left_paddle, right_paddle])
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                run = False
                break
        keys = pygame.key.get_pressed()
        handle_paddle_movement(keys, left_paddle, right_paddle)
        

         
    pygame.quit()

if __name__ == "__main__":
    main()

内容的提问来源于stack exchange,提问作者Nick badger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 16:40:41