目錄
前言
一、為什么要重構模塊
?二、創建game_functions
?三、創建update_screen()
?四、修改alien_invasion模塊
?五、課后思考
?總結
前言
前兩天我們已經成功創建了窗口,并將小蜜蜂放在窗口的最下方中間位置,本來以為今天將學習控制小蜜蜂,結果是重構模塊,算了,我們按照書上步驟,一起來學習下。
一、為什么要重構模塊
書上說在大型項目中,會經常在添加新代碼前重構既有的代碼。(咱也沒進過大公司,做過大型項目,今天也算體驗了一把大型項目的流程),目的是簡化代碼結構。具體到我們現在做的案例,就是簡化alien_invasion文件,把里面寫的一些功能,再用一個函數封裝起來,然后在alien_invasion里調用,使得alien_invasion看起來更簡潔,邏輯更清晰。我們先來看看alien_invasion里面的代碼。
import sys
import pygame
import settings
from ship import Shipdef run_game():pygame.init()new_setting=settings.Settings()screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))ship = Ship(screen)pygame.display.set_caption("Alien Invasion")while True:for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()screen.fill(new_setting.bg_color)ship.blitme()pygame.display.flip()run_game()
?通過觀察代碼,我們發現,在while循環里主要有兩件事,一件事是監聽用戶操作,另一件事是繪制窗口,那么我們就將這兩件事分別封裝出去。
?二、創建game_functions
?沒啥好說的,創建一個類,把while循環里面的代碼復制過去,然后alien_invasion再調用就行了,我們先寫game_functions的代碼。
import sys
import pygamedef check_events():for event in pygame.event.get():if event.type == pygame.QUIT:sys.exit()
?三、創建update_screen()
書上面并沒有創建一個?update_screen的新文件,而是在game_functions里定義了update_screen函數,那么game_functions不就復雜了嗎?簡化了alien_invasion,復雜了game_functions有啥意義。
?我們觀察上面的代碼,screen.fill(new_setting.bg_color),調用了screen和new_setting,ship.blitme()調用了ship,所以我們在創建新的函數的時候,要將這三個作為傳參傳進去。
def update_screen(new_setting,screen,ship):screen.fill(new_setting.bg_color)ship.blitme()pygame.display.flip()
?四、修改alien_invasion模塊
?現在我們只需要導入game_functions,然后調用里面的函數就行了。
import pygame
import settings
from ship import Ship
import game_functions as gfdef run_game():pygame.init()new_setting=settings.Settings()screen = pygame.display.set_mode((new_setting.screen_width,new_setting.screen_height))ship = Ship(screen)pygame.display.set_caption("Alien Invasion")while True:gf.check_events()gf.update_screen(new_setting,screen,ship)run_game()
?我們來運行一下,看能否成功。
?
?沒問題,成功的
?五、課后思考
?“大蟒蛇”在這里提出了一個問題:“找一個喜歡的游戲角色,放在屏幕中間,然后將屏幕背景色變為圖片的背景色,或者將圖片的背景色變成屏幕背景色”
?看到這個問題,我首先想到的是python可以實現ps的功能?可以吸取顏色,改變背景色?這個其實覺得有可能實現,但是改變圖片背景色,那還要摳圖,覺得不大可能,本著好學的精神,在網上查詢下,可以使用第三方庫來改變圖片的顏色,至于效果怎么樣也就不試了,跟本次案例關系不大,以后有需要再試。但是改變背景色為圖片背景色有難度,沒有發現提取圖片顏色的方式,難道用肉眼看?
?總結
?今天在游戲的進程上沒有突破,但是也體會了大項目的流程。