初学Python,练习pygame时出现如下错误?
题目:
错误如下:
pygame 2.1.2 (SDL 2.0.18, Python 3.8.0)
Hello from the pygame community. https://www.pygame.org/contri...
Traceback (most recent call last):
  File "12-5.py", line 45, in <module>
run_game()File "12-5.py", line 34, in run_game
zidans.zidan_yidong()AttributeError: 'Group' object has no attribute 'zidan_yidong'
具体代码:
1、12-5.py
import pygamefrom pygame.sprite import Group
from settings import Settings
from ship import Ship
from zidan import Zidan
import game_hanshu as gh
def run_game():
    """初始化游戏设置"""
    pygame.init()
    youxi_set = Settings()
    youxi_screen = pygame.display.set_mode((youxi_set.youxi_screen_width,
                        youxi_set.youxi_screen_height))
    pygame.display.set_caption("我的游戏")
    # 创建一艘飞船
    ship = Ship(youxi_screen)
    # 创建一个用于存储子弹的编组
    zidans = Group()
    # 开始游戏的主循环
    while True:
        # 监视鼠标键盘事件
        gh.check_events(youxi_set,youxi_screen,ship,zidans)
        # 控制飞船移动            
        gh.ship_yidong(youxi_set,youxi_screen,ship)
        # 子弹移动
        zidans.zidan_yidong()
        # 绘制屏幕
        youxi_screen.fill(youxi_set.youxi_bjs)
        for zidan in zidans.sprites():
            zidan.zidan_huizhi()
        ship.blit_ship()
        # 显示最新绘制的屏幕
        pygame.display.flip()
run_game()
2、game_hanshu.py
import sysimport pygame
from settings import Settings
from ship import Ship
from zidan import Zidan
def check_events(youxi_set,youxi_screen,ship,zidans):
    """监视鼠标键盘事件"""
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.KEYDOWN:
            if event.key == pygame.K_UP:
                youxi_set.ship_shangyi = True
            if event.key == pygame.K_DOWN:
                youxi_set.ship_xiayi = True
            if event.key == pygame.K_SPACE:
                xinzidan = Zidan(youxi_set,youxi_screen,ship)
                zidans.add(xinzidan)
        elif event.type == pygame.KEYUP:
            if event.key == pygame.K_UP:
                youxi_set.ship_shangyi = False
            if event.key == pygame.K_DOWN:
                youxi_set.ship_xiayi = False
def ship_yidong(youxi_set,youxi_screen,ship):
    """移动飞船"""
    youxi_screen_rect = youxi_screen.get_rect()
    if youxi_set.ship_shangyi and ship.ship_image_rect.y > 0:
        ship.ship_image_rect.y -= 2
    if youxi_set.ship_xiayi and ship.ship_image_rect.bottom < youxi_screen_rect.bottom:
        ship.ship_image_rect.y += 2
3、settings.py
class Settings():    """游戏相关设置"""
    def __init__(self):
        """初始化游戏的设置"""
        # 屏幕设置
        self.youxi_screen_width = 1200
        self.youxi_screen_height = 800
        self.youxi_bjs = (230, 230, 230)
        # 飞船相关设置
        self.ship_xiayi = False
        self.ship_shangyi = False
        # 子弹相关设置
        self.zidan_width = 3
        self.zidan_height = 15
        self.zidan_yidong_sudu = 4
        self.zidan_color = 60, 60, 60
4、ship.py
import pygameclass Ship():
    """初始化飞船并设置其初始位置"""
    def __init__(self,youxi_screen):
        self.youxi_screen = youxi_screen
        # 加载飞船图像并设置其初始位置
        self.youxi_screen_rect = self.youxi_screen.get_rect()
        self.ship_image = pygame.image.load('images/ship.bmp')
        self.ship_image_rect = self.ship_image.get_rect()
        self.ship_image_rect.centery = self.youxi_screen_rect.centery
        self.ship_image_rect.left = self.youxi_screen_rect.left
    def blit_ship(self):
        # 在指定位置绘制飞船
        self.youxi_screen.blit(self.ship_image,self.ship_image_rect)
5、zidan.py
import pygamefrom pygame.sprite import Sprite
class Zidan(Sprite):
    """一个对飞船发射子弹进行管理的类"""
    def __init__(self,youxi_set,youxi_screen,ship):
        """在飞船所处的位置创建一个子弹对象"""
        super(Zidan,self).__init__()
        self.youxi_screen = youxi_screen
        # 在(0,0)处创建一个表示子弹的矩形,在设置正确的位置
        self.zidan_rect = pygame.Rect(0, 0, youxi_set.zidan_width,
            youxi_set.zidan_height)
        self.zidan_rect.centerx = ship.ship_image_rect.centerx
        self.zidan_rect.top = ship.ship_image_rect.top
        # 存储用小数表示的子弹位置
        self.zidan_x = float(self.zidan_rect.x)
        self.zidan_color = youxi_set.zidan_color
        self.zidan_yidong_sudu = youxi_set.zidan_yidong_sudu
    def zidan_yidong(self):
        """移动子弹"""
        self.zidan_x += self.zidan_yidong_sudu
        self.zidan_rect.x = self.zidan_x
    def zidan_huizhi(self):
        """绘制子弹"""
        pygame.draw.rect(self.youxi_screen,self.zidan_color,self.zidan_rect)
请各位大神帮忙看看问题出在哪了啊,感谢。
以上是 初学Python,练习pygame时出现如下错误? 的全部内容, 来源链接: utcz.com/p/938590.html





