主模塊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()
