一.外星人入侵
1.代碼鏈接
2.開始遊戲項目
1).創建pygame窗口
import pygame 引入pygame模塊
pygame.init() 初始化,檢查模塊運行是否存在問題,是pygame運行前的檢查,返回一個元組,前面的數是成功的模塊,後面是出現問題的模塊。
pygame.display.set_mode((w,h)) 創造一個寬爲w,高爲h的分辨率的窗口
pygame.display.set_caption(“Alien Invasion”) 爲窗口賦予一個名字
pygame.display.flip() 更新界面
pygame.event.get() 獲取事件的隊列
2).設置背景色
bg_color = (230,230,230) 背景顏色是一個三元組
3).創建設置類
把所有需要設置的參數合成一個設置類,作爲一個模塊,可以模塊化,便於修改和更新,不用到處找
4).創建一個ship類
將飛船的圖像顯示在屏幕上
class Ship(): 創建一個ship類
def init(self,screen) 後者指定,圖像繪製在哪個屏幕上
pygame.image.load(‘images/ship.bmp’) 加載圖像,返回一個表示飛船的surfac
get_rect() 獲取相應surface的屬性rect,像處理矩形一樣處理圖像,可以設置圖像的方位
5).重構:模塊game_function
def check_events(): 將管理事件的代碼移入check_event中
def update_screen 更新屏幕,這裏不用import ship,因爲傳入的是一個對象,方法是屬於對象的,因此不用import
6).駕駛飛船,左右移動
pygame.event.get() 獲取事件
event.type == pygame.KEYDOWN 按鍵是作爲KEYDOWN事件,用來離散移動
ship.moving_right 添加標誌量,可以在while循環中,可KEYUP一起完成持續移動
** ship.center ** 用來存ship的座標的小數表示,用來優化ship的位置
ship.rect.right < ship.screen_rect.right 用來限制飛船的移動範圍
7).射擊
setting.bullet 設置裏面添加子彈的屬性
創建bullet類
pygame.sprite.Group 用編組存儲子彈
用空格鍵設置按鍵
bullets.remove(bullet) 刪除出了屏幕的子彈
==函數必須先定義再調用,但是函數中調用函數可以不遵守這個規則
3.添加外星人
1).創建外星人
class Alien(): 設置外星人類
在設置裏面添加外星人的信息
2).創建外星人編組
aliens = Group() 創建一個空的編組
aliens.draw(screen) 對空編組調用draw函數,自動繪製編組的每個元素
3).讓外星人移動
在setting裏面記錄移動速度,在外星人類中創建移動方法,在game_function裏面應用移動方法
4).設置外星人向下移動的速度和移動的方向參數
gf中的alien_update,作爲主方法,實現alien的一切改變,然後再在裏面定義別的方法實現別的方法
5).射殺外星人
檢測子彈和外星人之間的碰撞
sprite.groupcollid(bullets,aliens,True,True) 將每顆子彈的rect和每個外星人的rect進行比較,並且返回一個字典,其中包含發生了碰撞的子彈和外星人。True爲刪除對應的對象
6).檢測飛船碰撞
pygame.sprite.spritecollideany(ship,aliens) 檢測精靈和編組的碰撞
class GameStats(): 創建一個統計信息的新類
from time import sleep 用來暫停一段時間
def check_aliens_bottom(ai_settings,stats,screen,ship,aliens,bullets):
響應外星人到達屏幕底端
7).飛船用完遊戲結束
給飛船添加屬性,就是留下的命的條數,當命用完了,就遊戲停止
4.記分
1).添加play按鈕
import pygame.font 將文本渲染到屏幕上
self.screen.fill(self.button_color,self.rect) 用來填充一個圖像
self.screen.blit(self.msg_image,self.msg_image_rect) 用來繪製文本圖像
2).開始遊戲
play_button.rect.collidepoint(x,y) 檢查一個點是否在矩形內
pygame.mouse.get_pos() 得到鼠標點擊的位置
3).將play按鈕切換到非活動狀態
如果state.game_active爲false才運行
4).隱藏光標
pygame.mouse.set_visible(False) 隱藏光標
5).記錄分數
在game_stats中記錄這些統計信息
遍歷collisions,得到每次循環擊中的外星人個數
在設置裏面修改每個等級的外星人點數
round(x,n) n用來調整四捨五入的位數-1,即四捨五入小數點左側第幾位
"{:,}".format(x) 千分位分割