在我的乒乓球游戏的结尾添加一个def main

2024-07-01 08:33:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图在我的乒乓球游戏的末尾添加一个def main,以使它更易于阅读,但我在尝试这样做时遇到了问题。当我添加def main时,我只得到一个黑屏,但是没有它我就得到了整个游戏。你知道吗

    import pygame


    SCR_WID, SCR_HEI = 640, 480
    class Player():
    def __init__(self):
            self.x, self.y = 16, SCR_HEI/2
            self.speed = 3
            self.padWid, self.padHei = 8, 64
            self.score = 0
            self.scoreFont = pygame.font.Font("imagine_font.ttf", 64)

    def scoring(self):
            scoreBlit = self.scoreFont.render(str(self.score), 1, (255, 255, 255))
            screen.blit(scoreBlit, (32, 16))
            if self.score == 10:
                    print ("player 1 wins!")
                    exit()

    def movement(self):
            keys = pygame.key.get_pressed()
            if keys[pygame.K_w]:
                    self.y -= self.speed
            elif keys[pygame.K_s]:
                    self.y += self.speed

            if self.y <= 0:
                    self.y = 0
            elif self.y >= SCR_HEI-64:
                    self.y = SCR_HEI-64

    def draw(self):
            pygame.draw.rect(screen, (255, 255, 255), (self.x, self.y, self.padWid, self.padHei))

    class Enemy(Player):
    def __init__(self):
            self.x, self.y = SCR_WID-16, SCR_HEI/2
            self.speed = 3
            self.padWid, self.padHei = 8, 64
            self.score = 0
            self.scoreFont = pygame.font.Font("imagine_font.ttf", 64)

    def scoring(self):
            scoreBlit = self.scoreFont.render(str(self.score), 1, (255, 255, 255))
            screen.blit(scoreBlit, (SCR_HEI+92, 16))
            if self.score == 10:
                    print ("Player 2 wins!")
                    exit()

    def movement(self):
            keys = pygame.key.get_pressed()
            if keys[pygame.K_UP]:
                    self.y -= self.speed
            elif keys[pygame.K_DOWN]:
                    self.y += self.speed

            if self.y <= 0:
                    self.y = 0
            elif self.y >= SCR_HEI-64:
                    self.y = SCR_HEI-64

    def draw(self):
            pygame.draw.rect(screen, (255, 255, 255), (self.x, self.y, self.padWid, self.padHei))

    class Ball():
    def __init__(self):
            self.x, self.y = SCR_WID/2, SCR_HEI/2
            self.speed_x = -3
            self.speed_y = 3
            self.size = 8

    def movement(self):
            self.x += self.speed_x
            self.y += self.speed_y

            #wall col
            if self.y <= 0:
                    self.speed_y *= -1
            elif self.y >= SCR_HEI-self.size:
                    self.speed_y *= -1

            if self.x <= 0:
                    self.__init__()
                    enemy.score += 1
            elif self.x >= SCR_WID-self.size:
                    self.__init__()
                    self.speed_x = 3
                    player.score += 1
            ##wall col
            #paddle col
            #player
            for n in range(-self.size, player.padHei):
                    if self.y == player.y + n:
                            if self.x <= player.x + player.padWid:
                                    self.speed_x *= -1
                                    break
                    n += 1
            #enemy
            for n in range(-self.size, enemy.padHei):
                    if self.y == enemy.y + n:
                            if self.x >= enemy.x - enemy.padWid:
                                    self.speed_x *= -1
                                    break
                    n += 1
            ##paddle col

    def draw(self):
            pygame.draw.rect(screen, (255, 255, 255), (self.x, self.y, 8, 8))

    SCR_WID, SCR_HEI = 640, 480
   screen = pygame.display.set_mode((SCR_WID, SCR_HEI))
   pygame.display.set_caption("Pong")
   pygame.font.init()
   clock = pygame.time.Clock()
   FPS = 60



  def main():  
      ball = Ball()
      player = Player()
      enemy = Enemy()

      while True:
      #process
      for event in pygame.event.get():
                    if event.type == pygame.QUIT:
                            print ("Game exited by user")
                            exit()



    ##process
    #logic
    ball.movement()
    player.movement()
    enemy.movement()
    ##logic
    #draw
    screen.fill((0, 0, 0))
    ball.draw()
    player.draw()
    player.scoring()
    enemy.draw()
    enemy.scoring()
    ##draw
    #_______
    pygame.display.flip()
    clock.tick(FPS)
   main()

Tags: selfifinitdefscreenpygamescoreplayer
2条回答

结尾对main()的调用应该是

if __name__ == "__main__":
    main()

这样就可以运行代码并运行函数。而且你的压痕看起来有点不对劲。你的代码结构是否与空格有关?你知道吗

如前所述,应在脚本末尾插入以下语句:

if __name__ == "__main__":
    main()

这个答案会给你更多关于这句话含义的信息。你知道吗

What does if __name__ == "__main__": do?

简而言之,它告诉解释器它与函数main()有什么关系: 1) 如果文件已作为独立脚本执行,则自动运行它。 2) 如果文件已作为模块从其他脚本导入,则不运行。 在你的情况下,通缉犯的行为是第一位的。你知道吗

相关问题 更多 >

    热门问题