1精靈文件 plane_sprites.py
1 import pygame 2 3 class GameSprite(pygame.sprite.Sprite): 4 """飛機大戰游戲精靈""" 5 def __init__(self,plane_name,speed=1): 6 7 # 調用父類方法 只要繼承的不是object類 初始化的第一步都要調用父類方法 8 super().__init__() 9 10 # 定義對象的屬性 11 # 加載精靈圖像 12 self.image = pygame.image.load(plane_name) 13 # 精靈大小 14 # image的get_rect()方法,可以返回pygame.Rect(0,0,圖像寬,圖像高)的對象 15 self.rect = self.image.get_rect() 16 # 設置精靈移動速度 17 self.speed = speed 18 19 def update(self): 20 """更新精靈位置""" 21 # 在屏幕的垂直方向移動 22 self.rect.y += self.speed
2.繪制圖像主頁面
1 import pygame 2 from plane_sprites import * 3 4 # 游戲初始化 5 pygame.init() 6 7 # 創建游戲窗口 480*700 8 # 使用display.set_mode()創建的screen對象是一個內存中的屏幕數據對象,可以理解成是油畫的畫布 9 screen = pygame.display.set_mode((480,700)) 10 11 # 繪制背景圖像 12 bg = pygame.image.load("./images/background.png") 13 # 繪制背景圖像在屏幕 14 #screen.blit方法是在畫布上繪制很多圖像 15 # blit方法接收兩個參數,第一個參數是圖像數據,第二個參數是圖像的坐標 16 screen.blit(bg,(0,0)) 17 18 # display.update()會將畫布的最終結果繪制在屏幕上,這樣可以提高屏幕繪制效率,增加游戲的流暢度 19 # pygame.display.update() 20 21 #hero1. 繪制英雄飛機 22 hero = pygame.image.load("./images/me1.png") 23 24 #hero2. 繪制圖像在屏幕 25 screen.blit(hero,(150,300)) 26 27 # 更新顯示 只有調用update()方法 才能開到繪制在屏幕上的飛機 28 pygame.display.update( ) 29 30 #hero3. 定義rect記錄英雄飛機的初始位置 31 # Rect(x坐標,y坐標,圖片寬,圖片高) 32 hero_rect = pygame.Rect(150,300,102,126) 33 34 35 # pygame.time.Clock 可以非常方便的設置屏幕繪制速度----刷新頻率 36 # clock1.初始化創建一個時鍾對象 37 clock = pygame.time.Clock() 38 39 # 創建敵機的精靈 40 enemy = GameSprite("./images/enemy1.png") 41 enemy2 = GameSprite("./images/enemy1.png",2) 42 43 44 # 創建敵機精靈組 45 enemy_group = pygame.sprite.Group(enemy,enemy2) 46 47 # 游戲循環 48 while True: 49 # clock2.在游戲循環中讓時鍾對象調用tick(頻率)方法 50 # 制定循環體內部的代碼執行的頻率 51 clock.tick(60) #每秒更新60次 52 53 # hero4.修改英雄飛機的位置 54 hero_rect.y -= 1 55 56 if hero_rect.y <= 0-hero_rect.height: 57 hero_rect.y = 700 58 59 #刷新繪制背景圖片 如果沒有這一步 英雄飛機飛行時會有重影 60 screen.blit(bg,(0,0)) 61 # hero5.重新繪制英雄圖像 62 screen.blit(hero,hero_rect) #blit第二個參數可以直接把Rect()放進去 63 64 # 讓精靈組調用兩個方法才能顯示敵機 65 # 精靈組1.update 66 enemy_group.update() 67 # 精靈組2.draw(畫布) 68 enemy_group.draw(screen) 69 70 71 # 更新顯示 72 pygame.display.update() 73 74 # 捕獲事件 75 # event_list = pygame.event.get() 76 # print(event_list) 77 78 79 # 游戲循環中監聽事件 pygame.event.get() 可以獲得用戶當前所做動作的事件列表 80 for event in pygame.event.get(): 81 82 # 事件event 83 # print(event) 84 85 # 判斷用戶是否點擊了關閉按鈕 86 if event.type == pygame.QUIT: 87 print("游戲腿粗") 88 89 # 退出游戲循環 卸載所有模塊 90 pygame.quit() 91 92 # 直接退出系統 93 exit()