小白修仙錄 實戰篇

一.外星人入侵

1.代碼鏈接

<<alien_invasion>>

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) 千分位分割

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章