完全按照“python编程 从入门到实践”这本书实现项目一第12章武装飞船
12.4.2在屏幕上绘制飞船发生报错
alien_invasion.py
import pygame
import sys
import time
from settings import Settings
from ship import Ship
class AlienInvasion: #类
def __init__(self): #游戏初始设定
pygame.init() #初始化
pygame.mixer.init() # 初始化音频模快
pygame.display.set_caption("外星人入侵")
self.sttings = Settings()
self.screen = pygame.display.set_mode(
(self.sttings.screen_width,self.sttings.screen_height)) # 显示窗口
self.ship = Ship(self)
pygame.mixer.music.load('D:/pythonProject/game/音乐/过场音乐.mp3')
b=1
if b == 1:
pygame.mixer.music.play(-1, 1)
for a in range(1, 6574):
background = pygame.image.load(f"D:\pythonProject\game\guochangtu\out{a}.jpg") # 图片位置 加载图片
screen = pygame.display.set_mode((927, 521))
screen.blit(background, (0, 0))
pygame.display.update() # 显示内容8
time.sleep(0.005) # 延时0.02秒
b = 2
pygame.mixer.music.load('D:/pythonProject/game/音乐/背景音乐.mp3')
pygame.mixer.music.play(-1, 1)
def run_game(self):
while True:
#游戏主程序
self._check_events()
self._update_screen()
def _check_events(self):
#检测玩家行为
for event in pygame.event.get():
if event.type == pygame.QUIT: # 如果单击关闭窗口,则退出
sys.exit()
def _update_screen(self):
#重绘屏幕
background = pygame.image.load(r"D:\pythonProject\game\游戏背景.jpg") # 图片位置 加载图片
screen = pygame.display.set_mode((927, 521))#设置窗口大小
screen.blit(background, (0, 0)) #将背景图片对齐窗口
self.ship.blitme()
pygame.display.flip() # 刷新界面
if __name__== '__main__':
#运行游戏
ai = AlienInvasion()
ai.run_game()
``
ship.py
import pygame
from pygame.sprite import Sprite
class Ship(Sprite): #管理飞船
def __init__(self, ai_game): # 初始化飞船及设置其初始位置
Sprite.__init__(self)
self.screen = ai_game.screen
self.screen.settings = ai_game.settings
self.screen_rect = ai_game.screen.get_rect()
# 加载飞船图片并获取其外观矩阵
self.image = pygame.image.load("D:\pythonProject\game\飞船.png")
self.rect = self.image.get_rect()
#把飞船放在屏幕底部的中央
self.rect.midbottom = self.screen_rect.midbottom
def blitme(self):
#在指定位置绘制飞船
self.screen.blit(self.image, self.rect)
settings.py
class Settings:
def __init__(self):
self.screen_width=927
self.screen_height=521
程序运行后报错
File "D:/pythonProject/game/游戏.py", line 73, in <module>
ai = AlienInvasion()
File "D:/pythonProject/game/游戏.py", line 14, in __init__
self.ship = Ship(self)
File "D:\pythonProject\game\ship.py", line 7, in __init__
self.screen.settings = ai_game.settings
AttributeError: 'AlienInvasion' object has no attribute 'settings'