小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python飛機(jī)大戰(zhàn) 游戲框架搭建

 只怕想不到 2019-08-24

目標(biāo)

  • 明確主程序職責(zé)
  • 實(shí)現(xiàn)主程序類(lèi)
  • 準(zhǔn)備游戲精靈組

01. 明確主程序職責(zé)

  • 回顧 快速入門(mén)案例,一個(gè)游戲主程序的 職責(zé) 可以分為兩個(gè)部分:
  • 游戲初始化
  • 游戲循環(huán)
  • 根據(jù)明確的職責(zé),設(shè)計(jì) PlaneGame 類(lèi)如下:
  • 提示 根據(jù) 職責(zé) 封裝私有方法,可以避免某一個(gè)方法的代碼寫(xiě)得太過(guò)冗長(zhǎng)

如果某一個(gè)方法編寫(xiě)的太長(zhǎng),既不好閱讀,也不好維護(hù)!

  • 游戲初始化 ——init() 會(huì)調(diào)用以下方法:
  • 游戲循環(huán) —— start_game() 會(huì)調(diào)用以下方法:

02. 實(shí)現(xiàn)飛機(jī)大戰(zhàn)主游戲類(lèi)

2.1 明確文件職責(zé)

  • plane_main

封裝 主游戲類(lèi)創(chuàng)建 游戲?qū)ο髥?dòng)游戲

  • plane_sprites
  • 封裝游戲中 所有 需要使用的 精靈子類(lèi)
  • 提供游戲的 相關(guān)工具

代碼實(shí)現(xiàn)

  • 新建 plane_main.py 文件,并且設(shè)置為可執(zhí)行
  • 編寫(xiě) 基礎(chǔ)代碼

import pygame

from plane_sprites import *

class PlaneGame(object):

'''飛機(jī)大戰(zhàn)主游戲'''

def __init__(self):

print('游戲初始化')

def start_game(self):

print('開(kāi)始游戲...')

if __name__ == '__main__':

# 創(chuàng)建游戲?qū)ο?/p>

game = PlaneGame()

# 開(kāi)始游戲

game.start_game()

2.3 游戲初始化部分

完成init() 代碼如下:

def __init__(self):

print('游戲初始化')

# 1. 創(chuàng)建游戲的窗口

self.screen = pygame.display.set_mode((480, 700))

# 2. 創(chuàng)建游戲的時(shí)鐘

self.clock = pygame.time.Clock()

# 3. 調(diào)用私有方法,精靈和精靈組的創(chuàng)建

self.__create_sprites()

def __create_sprites(self):

pass

使用 常量 代替固定的數(shù)值

  • 常量 —— 不變化的量
  • 變量 —— 可以變化的量

應(yīng)用場(chǎng)景

  • 在開(kāi)發(fā)時(shí),可能會(huì)需要使用 固定的數(shù)值,例如 屏幕的高度 是 700
  • 這個(gè)時(shí)候,建議 不要 直接使用固定數(shù)值,而應(yīng)該使用 常量
  • 在開(kāi)發(fā)時(shí),為了保證代碼的可維護(hù)性,盡量不要使用 魔法數(shù)字

常量的定義

  • 定義 常量 和 定義 變量 的語(yǔ)法完全一樣,都是使用 賦值語(yǔ)句
  • 常量 的 命名 應(yīng)該 所有字母都使用大寫(xiě),單詞與單詞之間使用下劃線(xiàn)連接

常量的好處

  • 閱讀代碼時(shí),通過(guò) 常量名 見(jiàn)名之意,不需要猜測(cè)數(shù)字的含義
  • 如果需要 調(diào)整值,只需要 修改常量定義 就可以實(shí)現(xiàn) 統(tǒng)一修改

提示:Python 中并沒(méi)有真正意義的常量,只是通過(guò)命名的約定 —— 所有字母都是大寫(xiě)的就是常量,開(kāi)發(fā)時(shí)不要輕易的修改!

代碼調(diào)整

  • 在 plane_sprites.py 中增加常量定義

import pygame

# 游戲屏幕大小

SCREEN_RECT = pygame.Rect(0, 0, 480, 700)

修改 plane_main.py 中的窗口大小

self.screen = pygame.display.set_mode(SCREEN_RECT.size)

2.4 游戲循環(huán)部分

完成 start_game() 基礎(chǔ)代碼如下:

def start_game(self):

'''開(kāi)始游戲'''

print('開(kāi)始游戲...')

while True:

# 1. 設(shè)置刷新幀率

self.clock.tick(60)

# 2. 事件監(jiān)聽(tīng)

self.__event_handler()

# 3. 碰撞檢測(cè)

self.__check_collide()

# 4. 更新精靈組

self.__update_sprites()

# 5. 更新屏幕顯示

pygame.display.update()

def __event_handler(self):

'''事件監(jiān)聽(tīng)'''

for event in pygame.event.get():

if event.type == pygame.QUIT:

PlaneGame.__game_over()

def __check_collide(self):

'''碰撞檢測(cè)'''

pass

def __update_sprites(self):

'''更新精靈組'''

pass

@staticmethod

def __game_over():

'''游戲結(jié)束'''

print('游戲結(jié)束')

pygame.quit()

exit()

03. 準(zhǔn)備游戲精靈組

3.1 確定精靈組

3.2 代碼實(shí)現(xiàn)

創(chuàng)建精靈組方法

def __create_sprites(self):

'''創(chuàng)建精靈組'''

# 背景組

self.back_group = pygame.sprite.Group()

# 敵機(jī)組

self.enemy_group = pygame.sprite.Group()

# 英雄組

self.hero_group = pygame.sprite.Group()

更新精靈組方法

def __update_sprites(self):

'''更新精靈組'''

for group in [self.back_group, self.enemy_group, self.hero_group]:

group.update()

group.draw(self.screen)

著作權(quán)歸作者所有

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶(hù)發(fā)布,不代表本站觀(guān)點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多