Python: 为什么调用ppBall类时会出现语法错误?

0 投票
1 回答
2451 浏览
提问于 2025-04-18 03:56

一般信息

我正在尝试用pygame制作一个乒乓球游戏的重制版。当我运行程序时(现在只有弹球的部分),我遇到了一个无效语法错误。

错误信息

这是我遇到的错误:

C:\Programming\PyGame\Pong>python PyngPongEmbeddedClasses.py
  File "PyngPongEmbeddedClasses.py", line 87
    pyngBall = ppBall((100,100), BALLSIZE, 0, 1)
           ^
SyntaxError: invalid syntax

我的代码

#PyngPong by Ben Lippincott
#This game is not affiliated with the game Pong in any way

import pygame, sys, math
from pygame.locals import *

# Globals!
FPS = 30
ANIMATIONSPEED = 1   # pixels per frame
WINDOWHEIGHT   = 600 # pixels
WINDOWWIDTH    = 800 # pixels
VERSION        = 'v1.0'
BASICFONTSIZE  = 20 # 20 pt font

# screencenter tuple
SCREENCENTERX  = WINDOWWIDTH / 2
SCREENCENTERY  = WINDOWHEIGHT / 2
SCREENCENTER   = (SCREENCENTERX, SCREENCENTERY)

BALLSIZE       = 15 # radius of circle
BGCOLOR        = BLACK

# Color Globals
#         R    G    B
WHITE = (255, 255, 255)
BLACK = (  0,   0,   0)


def addVectors((angle1, length1), (angle2, length2)):
    x  = math.sin(angle1) * length1 + math.sin(angle2) * length2
    y  = math.cos(angle1) * length1 + math.cos(angle2) * length2

    angle = 0.5 * math.pi - math.atan2(y, x)
    length  = math.hypot(x, y)

    return (angle, length)

class ppBall:
    def __init__(self, (x, y), size, angle, speed):
        self.x = x
        self.y = y
        self.size = size
        self.color = (255, 255, 255)
        self.thickness = 0
        self.speed = angle
        self.angle = speed


    def draw(self):    
        pygame.draw.circle(screen, self.color, (self.x, self.y), self.size, self.thickness)


    def move(self):
        (self.angle, self.speed) = addVectors((self.angle, self.speed))
        self.x += math.sin(self.angle) * self.speed
        self.y -= math.cos(self.angle) * self.speed

    def bounce(self):
        if self.x > width - self.size:
            self.x = 2*(width - self.size) - self.x
            self.angle = - self.angle

        elif self.x < self.size:
            self.x = 2*self.size - self.x
            self.angle = - self.angle

        if self.y > height - self.size:
            self.y = 2*(height - self.size) - self.y
            self.angle = math.pi - self.angle

        elif self.y < self.size:
            self.y = 2*self.size - self.y
            self.angle = math.pi - self.angle


def main():
    global FPSCLOCK, DISPLAYSURF, BASICFONT

    # Initialization time!
    pygame.init()
    FPSCLOCK = pygame.time.clock()
    DISPLAYSURF = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT))
    pygame.display.set_caption('Pyng Pong by PhatLipp ' + VERSION)
    BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE

    pyngBall = ppBall((100,100), BALLSIZE, 0, 1)

    while True: # Main game loop!
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

        DISPLAYSURF.fill(BGCOLOR)
        pyngBall.move()
        pyngBall.bounce()
        pyngBall.draw()

        pygame.display.flip()

if __name__ == "__main__":
    main()

这是我调用这个类的方式:

pyngBall = ppBall((100,100), BALLSIZE, 0, 1)

为什么会出现这个问题呢?

1 个回答

5

你在上面那行代码缺少一个右括号:

BASICFONT = pygame.font.Font('freesansbold.ttf', BASICFONTSIZE
#                                                       here--^

每当你遇到这种奇怪的语法错误时,最好先检查一下前面的那一行。很多时候,问题只是因为少了一个括号。

撰写回答