# ship.py
import pygame
class Ship():
def __init__(self, screen):
# 初始化飞船并获取其初始位置
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load("images/ship.bmp") # 返回了飞船的surface,并存储到self.image
self.rect = self.image.get_rect() # 通过get_rect()活动相应surface的属性rect。(矩形即rect对象)
self.screen_rect = screen.get_rect() # 将矩形存储到self.screent_rect
# 将每艘新飞船放到屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self): # 定义此方法,让它根据self.rect的位置将图像绘制到屏幕上
# 在指定位置绘制飞船
self.screen.blit(self.image, self.rect)
# alien_invasion.py
import pygame
from settings import Settings
from ship import Ship
# 导入所需模块
def run_game():
# 初始化游戏并创建一个屏幕对象
pygame.init() # 初始化背景设置
ai_settings = Settings()
screen = pygame.display.set_mode((ai_settings.screen_width, ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion") # 显示在屏幕的左上角
# 设置背景色
# bg_color = (230,230,230) # RGB(红绿蓝三色)
# 创建一艘飞船ship
ship = Ship(ai_settings, screen)
# 游戏的主循环
while True:
# 监视键盘和鼠标事件
for event in pygame.event.get(): # 事件循环
# pygame.event.get()方法,所有的键盘和鼠标事件都会促使for循环运行。
if event.type == pygame.QUIT:
# 若玩家单机游戏窗口的关闭按钮,将检测到pygame.QUIT事件,我们将调用sys.exit()来退出游戏
sys.exit()
# 每次循环都重绘屏幕
screen.fill(bg_color) # 用背景色填充屏幕,只接受一个实参,一种颜色
ship.blitme()
# 让最近绘制的屏幕可见
pygame.display.flip()
run_game()
# settings.py
class Settings():
# 存储alien_invasion的所有设置的类
def __init__(self):
# 初始化游戏设置
# 屏幕设置
self.screen_width = 1200
self.screen_height = 800
self.bg_color = (230, 230, 230)
你 Ship()类中只定义了 self.screen_rect 属性,没有定义 self.screen 属性啊
Ship的def init():方法中应该加上self.screen = screen 吧
# ship.py
import pygame
class Ship():
def __init__(self, screen):
# 初始化飞船并获取其初始位置
# 加载飞船图像并获取其外接矩形
self.screen = screen #****************加上这行
self.image = pygame.image.load("images/ship.bmp") # 返回了飞船的surface,并存储到self.image
self.rect = self.image.get_rect() # 通过get_rect()活动相应surface的属性rect。(矩形即rect对象)
self.screen_rect = screen.get_rect() # 将矩形存储到self.screent_rect
# 将每艘新飞船放到屏幕底部中央
self.rect.centerx = self.screen_rect.centerx
self.rect.bottom = self.screen_rect.bottom
def blitme(self): # 定义此方法,让它根据self.rect的位置将图像绘制到屏幕上
# 在指定位置绘制飞船
self.screen.blit(self.image, self.rect)
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!