鱼C论坛

 找回密码
 立即注册
查看: 818|回复: 3

[已解决]Python

[复制链接]
发表于 2023-8-13 13:52:56 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import pygame
import plane_sprites


class PlaneGame:
    """飞机大战主游戏"""

    def __init__(self):
        print("游戏初始化")

        self.screen = pygame.display.set_mode(plane_sprites.SCREEN_RECT.size)

        self.clock = pygame.time.Clock()

        self.__create_sprites()

        pygame.time.set_timer(plane_sprites.CREATE_ENEMY_EVENT, 1000)
        pygame.time.set_timer(plane_sprites.HERO_FIRE_EVENT, 150)

    def __create_sprites(self):

        background1 = plane_sprites.Background()
        background2 = plane_sprites.Background(True)

        self.back_group = pygame.sprite.Group(background1, background2)

        self.enemy_group = pygame.sprite.Group()

        self.hero = plane_sprites.Hero()
        self.hero_group = pygame.sprite.Group(self.hero)

    def start_game(self):
        print("游戏开始")

        while True:

            self.clock.tick(plane_sprites.FRAME_PER_SEC)

            self.__event_handler()

            self.__check_collide()

            self.__update_sprites()

            pygame.display.update()

            pygame.event.get()

    def __event_handler(self):

        for event in pygame.event.get():

            if event.type == pygame.QUIT:
                self.__game_over()
            elif event.type == plane_sprites.CREATE_ENEMY_EVENT:
                enemy = plane_sprites.Enemy()
                self.enemy_group.add(enemy)
            elif event.type == plane_sprites.HERO_FIRE_EVENT:
                self.hero.fire()

        key_pressed = pygame.key.get_pressed()

        if key_pressed[pygame.K_RIGHT]:
            self.hero.speed = 2

        elif key_pressed[pygame.K_LEFT]:
            self.hero.speed = -2

        else:
            self.hero.speed = 0

    def __check_collide(self):

        pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)

        enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)

        if len(enemies) > 0:

            self.hero.kill()

            PlaneGame.__game_over()

    def __update_sprites(self):

        self.back_group.update()
        self.back_group.draw(self.screen)

        self.enemy_group.update()
        self.enemy_group.draw(self.screen)

        self.hero_group.update()
        self.hero_group.draw(self.screen)

        self.hero.bullets.update()
        self.hero.bullets.draw(self.screen)

    def __game_over(self):
        print("游戏结束...")

        pygame.quit()
        exit()


if __name__ == '__main__':
    game = PlaneGame
    game.start_game()
可以告诉我这段代码的错误并告诉我怎么改正吗?
最佳答案
2023-8-13 14:03:49
就这么一个问题,少了()
Snipaste_2023-08-13_14-03-27.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-8-13 13:53:11 | 显示全部楼层
这段代码存在两个问题:

1. 在创建PlaneGame对象时,需要调用类的构造函数,即需要在 game = PlaneGame 后加上括号,即 game = PlaneGame() 。

2. 在调用 game.start_game() 时,应该使用实例对象 game 而不是类名 PlaneGame ,即应该改为 game.start_game() 。

修正后的代码如下:

  1. if __name__ == '__main__':
  2.     game = PlaneGame()
  3.     game.start_game()
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 13:54:28 | 显示全部楼层
根据你提供的代码,有几个问题需要修正:

1. 需要导入 pygame 模块才能使用其中的函数和类。在代码开头添加 import pygame

2. 在导入 plane_sprites 模块之前,需要确保该模块的文件路径正确,并且在同一目录下。在代码开头添加 import plane_sprites

3. 在 PlaneGame 类中的 start_game 方法中,需要处理退出事件(点击窗口的关闭按钮)来正常退出游戏。修改事件处理部分的代码如下:

  
  1.    if event.type == pygame.QUIT:
  2.        self.__game_over()
  3.    
复制代码


   然后,在 __game_over 方法中加入对 pygame.quit()exit() 的调用来退出游戏。

4. 在 PlaneGame 类中的 start_game 方法中,需要通过 pygame.event.get() 获取所有的事件。将以下行代码:

  
  1.    pygame.event.get()
  2.    
复制代码


   放置在循环的开始,以获取并处理当前帧的所有事件。

5. 最后,在代码的末尾,需要添加 pygame.quit()exit() 来确保在游戏结束时顺利退出。

修正后的代码如下所示:

  1. import pygame
  2. import plane_sprites

  3. class PlaneGame:
  4.     """飞机大战主游戏"""
  5.     def __init__(self):
  6.         print("游戏初始化")
  7.         self.screen = pygame.display.set_mode(plane_sprites.SCREEN_RECT.size)
  8.         self.clock = pygame.time.Clock()
  9.         self.__create_sprites()
  10.         pygame.time.set_timer(plane_sprites.CREATE_ENEMY_EVENT, 1000)
  11.         pygame.time.set_timer(plane_sprites.HERO_FIRE_EVENT, 150)

  12.     def __create_sprites(self):
  13.         background1 = plane_sprites.Background()
  14.         background2 = plane_sprites.Background(True)
  15.         self.back_group = pygame.sprite.Group(background1, background2)
  16.         self.enemy_group = pygame.sprite.Group()
  17.         self.hero = plane_sprites.Hero()
  18.         self.hero_group = pygame.sprite.Group(self.hero)

  19.     def start_game(self):
  20.         print("游戏开始")
  21.         while True:
  22.             self.clock.tick(plane_sprites.FRAME_PER_SEC)
  23.             self.__event_handler()
  24.             self.__check_collide()
  25.             self.__update_sprites()
  26.             pygame.display.update()

  27.     def __event_handler(self):
  28.         for event in pygame.event.get():
  29.             if event.type == pygame.QUIT:
  30.                 self.__game_over()
  31.             elif event.type == plane_sprites.CREATE_ENEMY_EVENT:
  32.                 enemy = plane_sprites.Enemy()
  33.                 self.enemy_group.add(enemy)
  34.             elif event.type == plane_sprites.HERO_FIRE_EVENT:
  35.                 self.hero.fire()

  36.         key_pressed = pygame.key.get_pressed()
  37.         if key_pressed[pygame.K_RIGHT]:
  38.             self.hero.speed = 2
  39.         elif key_pressed[pygame.K_LEFT]:
  40.             self.hero.speed = -2
  41.         else:
  42.             self.hero.speed = 0

  43.     def __check_collide(self):
  44.         pygame.sprite.groupcollide(self.hero.bullets, self.enemy_group, True, True)
  45.         enemies = pygame.sprite.spritecollide(self.hero, self.enemy_group, True)
  46.         if len(enemies) > 0:
  47.             self.hero.kill()
  48.             self.__game_over()

  49.     def __update_sprites(self):
  50.         self.back_group.update()
  51.         self.back_group.draw(self.screen)
  52.         self.enemy_group.update()
  53.         self.enemy_group.draw(self.screen)
  54.         self.hero_group.update()
  55.         self.hero_group.draw(self.screen)
  56.         self.hero.bullets.update()
  57.         self.hero.bullets.draw(self.screen)

  58.     def __game_over(self):
  59.         print("游戏结束...")
  60.         pygame.quit()
  61.         exit()

  62. if __name__ == '__main__':
  63.     pygame.init()
  64.     game = PlaneGame()
  65.     game.start_game()
复制代码


你可以尝试运行修正后的代码,看看是否解决了问题。如果还有其他问题,请提供具体的错误信息和描述,以便进一步帮助你解决。
如果问题已经解决,请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-13 14:03:49 | 显示全部楼层    本楼为最佳答案   
就这么一个问题,少了()
Snipaste_2023-08-13_14-03-27.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-20 20:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表