【学习笔记】《Python从入门到实践》游戏-Alien Invasion
主模块alien_invasion.py
1 #导入两个库 2 from settings import Settings 3 from ship import Ship 4 import game_function as gf 5 import pygame 6 7 8 9 def run_game(): 10 11 #初始化游戏并创建一个屏幕对象 12 13 pygame.init()#没搞清楚初始化有什么用? 14 ai_settings = Settings()#通过ai_settings引用Settings类 15 screen = pygame.display.set_mode(
(ai_settings.screen_width,ai_settings.screen_height))#创建一个的窗口,大小由Settings类 里的screen_width和screen_height决定 16 17 pygame.display.set_caption("Alien Invasion")#给窗口标题命名——Alien Invasion 18 19 #为何创建窗口需要保存在变量里,而给窗口命名只需要一个方法? 20 21 #创建一艘飞船
23 ship = Ship()#创建Ship类的实例ship 24 25 #开始游戏的主循环 26 27 while True: 28 29 30 31 #监视键盘和鼠标事件 32 33 gf.check_events()
#更新屏幕
36 gf.update_screen(ai_settings,screen,ship)#gf.update_screen函数有3个参数,分别是ai_settings(Settings类的实例),screen (屏幕对象)和ship(Ship类的实例) 37 38 39 40run_game()
模块一 游戏设置settings.py
1 class Settings(): 2 3 """存储《外星人入侵》的所有设置的类""" 4 5 def __init__(self): 6 7 """初始化游戏的设置""" 8 9 #屏幕设置 10 11 self.screen_width = 1200 12 13 self.screen_height = 800 14 15 self.bg_color = (230,230,230)
模块二 添加飞船图像ship.py
1 import pygame 2 3 class Ship(): 4 5 def __init__(self,screen): 6 """初始化飞船并设置其初始设置""" 7 self.screen = screen 8 9 #加载飞船图像并获取其外接矩形 10 self.image = pygame.image.load('images/ship.bmp') 11 self.rect = self.image.get_rect() 12 self.screen_rect = screen.get_rect() 13 14 #将每艘新飞船放在屏幕底部中央 15 self.rect.centerx = self.screen_rect.centerx 16 self.rect.bottom = self.screen_rect.bottom 17 18 def blitme(self): 19 """在指定位置绘制飞船""" 20 self.screen.blit(self.image,self.rect)
模块三 游戏运行模块game_function.py
1 import sys 2 3 import pygame 4 5 def check_events(): 6 """响应按键和鼠标事件""" 7 for event in pygame.event.get(): 8 if event.type == pygame.QUIT: 9 sys.exit() 10 11 def update_screen(ai_settings,screen,ship): 12 """更新屏幕上的图像,并切换到新屏幕""" 13 #让每次循环时都重绘屏幕 14 screen.fill(ai_settings.bgcolor)#给窗口添加背景色(参数为背景色),screen.fill = pygame.display.set_mode().fill,
ai_settings.bgcolor等于Settings类下的bgcolor对象值
15 ship.blitme()#在指定位置绘制飞船(等价于Ship类下的blitme函数,实质是ship.pygame.display.set_mode().blitme)
16
17 #让最近绘制的屏幕可见
18 pygame.display.flip()