中文字幕精品无码一区二区,成全视频在线播放观看方法,大伊人青草狠狠久久,亚洲一区影音先锋色资源

小學Python系列少兒編程課程《第11章 一起來創作——Flappy Bird》課件(共48張PPT)

資源下載
  1. 二一教育資源

小學Python系列少兒編程課程《第11章 一起來創作——Flappy Bird》課件(共48張PPT)

資源簡介

(共48張PPT)
Python少兒編程
第十一章 一起來創作——Flappy Bird
目錄
1.1
需求分析
1.2
模塊設計
1.2
功能實現
PART 01
需求分析
需求分析
1
小舞和小藍在游戲城中參與了多個游戲,最后他們的賬戶中分別都有了7枚徽章。他們覺得這樣獲得徽章的速度太慢,于是找到游戲城的主人,想給他開發一個新游戲——Flappy Bird。主人非常樂意,并承諾如果游戲測試成功將給他們6枚徽章,這樣他們就可以離開Python編程世界了。游戲功能如下。
使用鼠標控制小鳥通過上下管道的間隙,如果小鳥碰到管道或窗口則游戲結束,實時顯示得分(即小鳥通過的管道數),詳細需求如下。
(1)單擊鼠標開始游戲和控制小鳥飛行。
(2)隨機生成管道位置,實現上下管道間隙的大小不同。
(3)移動地面和管道模擬小鳥向前飛行。
(4)小鳥和管道的碰撞檢測。
(5)小鳥飛行、碰撞和得分時添加音效。
(6)顯示游戲得分。
PART 02
模塊設計
模塊設計
2
根據Flappy Bird游戲需求,可將程序分為5大模塊,分別是資源文件夾模塊、配置文件模塊、類包模塊、游戲包模塊和主模塊,如圖11-1所示。
圖11-1 Flappy Bird程序模塊設計
模塊設計
2
(1)資源文件夾模塊用于保存圖片、聲音和字體等資源文件。
(2)配置文件模塊用于保存常量和資源路徑。
(3)類包模塊包含管道類模塊和小鳥類模塊,實現管道和小鳥的初始化和更新等功能。
(4)游戲包模塊包含游戲開始模塊、游戲進行模塊和游戲結束模塊,實現顯示游戲開始界面、操作游戲和顯示游戲結束界面等功能。
(5)主模塊實現初始化游戲、加載資源、顯示得分和控制游戲流程等功能,然后循環控制游戲流程。
PART 03
功能實現
創建資源文件夾
3.1
游戲需要加載圖片、添加音效和顯示得分,因此,須在當前工作目錄的resources文件夾下創建3個文件夾保存相關資源文件。
(1)創建名為images的文件夾保存圖片,包括背景、開始游戲、結束游戲、管道、小鳥、地面等圖片。其中,小鳥圖片又包括翅膀處于上、中和下3種形態的圖片,用于模擬小鳥的飛行。
(2)創建名為audios的文件夾保存聲音,包括小鳥飛行、死亡、碰撞管道和通過管道得分時的音效。
(3)創建名為fonts的文件夾保存字體文件,用于顯示得分。
創建配置文件
3.2
創建配置文件cfg.py,保存常量和資源路徑,實現代碼如下。
FPS = 60 #定義FPS
SCREENWIDTH = 300 #定義窗口寬
SCREENHEIGHT = 500 #定義窗口高
PIPE_GAP_SIZE = 100 #定義上下管道間隙大小
#定義字典,保存小鳥3種形態圖片路徑
BIRD_IMAGE_PATHS = {
'up': 'resources/images/bird_up.png',
'mid': 'resources/images/bird_mid.png',
'down': 'resources/images/bird_down.png'
}
創建配置文件
3.2
#定義背景圖片路徑
BACKGROUND_IMAGE_PATHS = 'resources/images/background.png'
#定義管道圖片路徑
PIPE_IMAGE_PATHS = 'resources/images/pipe.png'
#定義字典,保存游戲開始、游戲結束、地面圖片路徑
OTHER_IMAGE_PATHS = {
'gamestart': 'resources/images/gamestart.png',
'gameover': 'resources/images/gameover.png',
'base': 'resources/images/base.png'
}
創建配置文件
3.2
#定義字典,保存音效文件路徑
AUDIO_PATHS = {
'die': 'resources/audios/die.wav',
'hit': 'resources/audios/hit.wav',
'point': 'resources/audios/point.wav',
'wing': 'resources/audios/wing.wav'
}
#定義字體文件路徑
FONT_PATHS = 'resources/fonts/simkai.ttf'
創建類包
3.3
(1)定義管道類Piple繼承pygame.sprite.Sprite類,在有參構造方法中調用父類的構造方法,然后使用傳遞的參數初始化圖片和得分標志等相關變量,實現代碼如下。
1.創建管道類
import random
import pygame
'''定義Pipe類,繼承pygame.sprite.Sprite類'''
class Pipe(pygame.sprite.Sprite):
def __init__(self, image, position, **kwargs):
pygame.sprite.Sprite.__init__(self) #調用父類構造方法
self.image = image #初始化管道圖片
self.rect = self.image.get_rect() #獲取圖片的rect
#將圖片x和y坐標賦給圖片的左側和頂部位置
self.rect.left, self.rect.top = position
self.used_for_score = False #得分標志賦為False
創建類包
3.3
(2)在Pipe類中定義靜態方法randomPipe()生成上下管道初始位置并返回,其中y方向位置隨機生成,實現代碼如下。
1.創建管道類
'''隨機生成管道初始位置'''
@staticmethod
def randomPipe(cfg, image):
base_y = 0.79 * cfg.SCREENHEIGHT #定義基準位置
#定義y方向位置取值范圍的最大值
up_y = int(base_y * 0.6 - cfg.PIPE_GAP_SIZE)
#隨機生成y方向位置
y = int(base_y * 0.2) + random.randrange(0, up_y)
#返回一組上下管道的位置,top表示上管道,bottom表示下管道
return {'top': (cfg.SCREENWIDTH + 10, y - image.get_height()),
'bottom': (cfg.SCREENWIDTH + 10, y + cfg.PIPE_GAP_SIZE)}
創建類包
3.3
(1)定義小鳥類Bird繼承pygame.sprite.Sprite類,在有參構造方法中調用父類構造方法,然后使用傳遞的參數初始化圖片、y方向運動變量、切換小鳥形態變量等,實現代碼如下。
2.創建小鳥類
import pygame
import itertools
'''定義Bird類,繼承pygame.sprite.Sprite類'''
class Bird(pygame.sprite.Sprite):
def __init__(self, images, id, position, **kwargs):
pygame.sprite.Sprite.__init__(self) #調用父類構造方法
self.images = images #初始化小鳥圖片字典
#將小鳥圖片字典的值轉換為列表,并獲取索引為id的圖片
self.image = list(images.values())[id]
self.rect = self.image.get_rect() #獲取當前圖片的rect
創建類包
3.3
2.創建小鳥類
#將圖片x和y坐標賦給圖片的左側和頂部位置
self.rect.left, self.rect.top = position
#定義y方向運動變量,包括飛行標志、上升速度和下落速度
self.is_flapped = False
self.up_speed = 9
self.down_speed = 0
#切換小鳥形態變量,包括圖片索引及其迭代器、索引計數
#迭代器包含一個小鳥飛行周期內圖片索引取值
self.bird_id = id
self.bird_id_cycle = itertools.cycle([0, 1, 2, 1])
self.bird_id_change_count = 0
創建類包
3.3
(2)在Bird類中定義update()方法,更新小鳥位置和形態,參數為上下邊界位置和時間間隔(時鐘的間隔時間/1000,用于計算上升和下落速度),返回死亡狀態。該方法實現判斷小鳥飛行狀態(上升或下落),是否碰撞上下邊界而死亡,并模擬小鳥扇動翅膀。
2.創建小鳥類
'''更新小鳥位置和形態'''
def update(self, boundary, time_passed):
if self.is_flapped: #如果飛行標志為True即上升
self.up_speed -= 60 * time_passed #計算上升速度
self.rect.top -= self.up_speed #計算圖片的頂部位置
if self.up_speed <= 0: #如果上升速度小于0
self.is_flapped = False #設置飛行標志為False即下落
self.up_speed = 9 #設置上升速度為9
self.down_speed = 0 #設置下落速度為0
創建類包
3.3
2.創建小鳥類
else:
self.down_speed += 40 * time_passed #計算下落速度
self.rect.bottom += self.down_speed #計算圖片底部位置
'''判斷小鳥是否碰撞上下邊界'''
is_dead = False #定義死亡標志,賦初值為False
#如果圖片底部位置大于下邊界,死亡標志賦為True
#圖片底部值賦為下邊界,保證小鳥停在下邊界位置,不繼續下落
if self.rect.bottom > boundary[1]:
is_dead = True
self.rect.bottom = boundary[1]
#如果圖片頂部位置小于上邊界,死亡標志賦為True
#圖片頂部值賦為上邊界,保證小鳥停在上邊界位置,不繼續上升
if self.rect.top < boundary[0]:
is_dead = True
self.rect.top = boundary[0]
創建類包
3.3
2.創建小鳥類
'''切換小鳥形態模擬扇動翅膀'''
self.bird_id_change_count += 1 #索引計數加1
#如果圖片索引計數是5的倍數,表示循環5次切換一次小鳥形態
if self.bird_id_change_count % 5 == 0:
#將迭代器的下一個值賦給圖片索引
self.bird_id = next(self.bird_id_cycle)
#獲取索引對應的圖片
self.image = list(self.images.values())[self.bird_id]
self.bird_id_change_count = 0 #索引計數賦為0
return is_dead #返回死亡標志
創建類包
3.3
(3)在Bird類中定義setFlapped()方法設置小鳥的飛行模式,在游戲中單擊鼠標時調用,實現代碼如下。
2.創建小鳥類
'''設置為飛行模式'''
def setFlapped(self):
if self.is_flapped: #如果飛行標志為True,重新設置上升速度
self.up_speed = max(12, self.up_speed+1)
else: #如果飛行標志為False,則設置為True
self.is_flapped = True
(4)在Bird類中定義draw()方法繪制小鳥,實現代碼如下。
'''繪制小鳥'''
def draw(self, screen):
screen.blit(self.image, self.rect) #繪制圖片
創建游戲包
3.4
1.創建游戲開始模塊
在game_package包中創建游戲開始模塊start_game.py,在其中定義startGame()函數顯示開始界面,包括背景、開始圖片、向左移動的地面和在指定范圍內飛行的小鳥,并實現單擊開始游戲。首先計算地面圖片和開始圖片位置,定義小鳥相關變量,創建時鐘對象,然后開始無限循環。
循環中,首先,解析資源元組(即加載資源的返回值),將元素分別賦給對應的變量;其次,獲取事件并遍歷,如果為退出事件,則關閉窗口,如果為單擊事件,則返回小鳥位置和索引、地面位置,并退出循環;接著,播放飛行音效,每循環5次通過iterator(迭代器)的next()方法切換小鳥圖片,并模擬小鳥在指定范圍內上下飛行;然后,重新計算小鳥和地面位置,并繪制背景、開始圖片、地面和小鳥;最后,刷新繪圖,以及設置時鐘的時間間隔。實現代碼如下。
創建游戲包
3.4
1.創建游戲開始模塊
import pygame, sys
import itertools
import cfg
'''顯示開始界面'''
def startGame(screen, resource):
'''將resource的元素分別賦給sounds、bird_images、
other_images、backgroud_image'''
sounds = resource[0]
bird_images = resource[2]
other_images = resource[3]
backgroud_image = resource[4]
base_pos = [0, cfg.SCREENHEIGHT*0.93] #計算地面位置
創建游戲包
3.4
1.創建游戲開始模塊
#計算地面和背景的寬度差
base_diff_bg = (other_images['base'].get_width()
- backgroud_image.get_width())
#計算開始圖片位置
x = (cfg.SCREENWIDTH - other_images['gamestart'].get_width()) / 2
y = cfg.SCREENHEIGHT * 0.12
msg_pos = [x, y]
bird_id = 0 #定義小鳥圖片索引
bird_id_change_count = 0 #定義切換小鳥形態計數
#定義迭代器,包含一個小鳥飛行周期內圖片索引取值
bird_id_cycle = itertools.cycle([0, 1, 2, 1])
創建游戲包
3.4
1.創建游戲開始模塊
#計算小鳥位置
x = cfg.SCREENWIDTH * 0.2
y=(cfg.SCREENHEIGHT-list(bird_images.values())[0].get_height())/2
bird_pos = [x, y]
bird_y_shift_count = 0 #定義y坐標偏移計數
bird_y_shift_max = 16 #定義y坐標最大偏移計數
shift = 1 #定義y坐標偏移量
clock = pygame.time.Clock() #創建時鐘
創建游戲包
3.4
1.創建游戲開始模塊
while True: #無限循環
for event in pygame.event.get(): #獲取事件并遍歷
if event.type == pygame.QUIT: #如果為退出事件
pygame.quit() #退出pygame
sys.exit() #退出系統
#如果為單擊事件
elif event.type == pygame.MOUSEBUTTONDOWN:
#返回小鳥位置、地面位置和小鳥圖片索引
return {'bird_pos':bird_pos,'base_pos':base_pos,
'bird_id': bird_id}
sounds['wing'].play() #播放小鳥飛行音效
bird_id_change_count += 1 #切換形態計數加1
創建游戲包
3.4
1.創建游戲開始模塊
#如果切換形態計數是5的倍數,切換小鳥圖片
if bird_id_change_count % 5 == 0:
bird_id = next(bird_id_cycle)
bird_y_shift_count += 1 #y坐標偏移計數加1
#如果y坐標偏移計數等于最大值
if bird_y_shift_count == bird_y_shift_max:
shift = -1 * shift #y坐標偏移取反
bird_y_shift_count = 0 #y坐標偏移計數賦0
#計算地面x坐標,左移4像素
#除以base_diff_bg求余為了保證地面圖片的連續
base_pos[0] = -((-base_pos[0] + 4) % base_diff_bg)
bird_pos[1] = bird_pos[1] + shift #計算小鳥y坐標
screen.blit(backgroud_image, (0, 0)) #繪制背景圖片
創建游戲包
3.4
1.創建游戲開始模塊
#繪制小鳥圖片
screen.blit(list(bird_images.values())[bird_id], bird_pos)
#繪制開始圖片
screen.blit(other_images['gamestart'], msg_pos)
#繪制地面圖片
screen.blit(other_images['base'], base_pos)
pygame.display.update() #刷新繪圖
clock.tick(cfg.FPS) #設置時鐘的時間間隔
創建游戲包
3.4
2.創建游戲進行模塊
在game_package包中創建游戲進行模塊run_game.py,在其中定義runGame()函數實現游戲中的操作。首先,創建管道精靈組,循環兩次,計算每組上下管道的初始位置,并添加到組中,以及創建小鳥精靈;然后,進入循環,循環標志為True;最后,調用函數顯示結束界面。循環中執行如下操作。
(1)解析資源元組,將元素分別賦給對應的變量。
(2)獲取事件并遍歷,如果為退出事件,則關閉窗口;如果為單擊事件,則調用Bird的setFlapped()方法,并播放飛行音效。
(3)將小鳥精靈和管道精靈組進行碰撞檢測,如果碰撞,則設置循環標志為False,并播放碰撞音效。
創建游戲包
3.4
2.創建游戲進行模塊
(4)更新小鳥,判斷小鳥是否碰撞上下界限而死亡,如果死亡,則設置循環標志為False,并播放碰撞音效。
(5)向左移動管道和地面模擬小鳥向前飛(確保兩者移動速度一致),如果管道右側位置小于小鳥右側位置,且得分標志為False,得分加0.5(由于管道分為上、下兩個管道,通過一組管道會判斷兩次,所以兩次得分相加為1),并將得分標志設為True;如果管道左側位置小于5大于0,且添加管道標志為True,則在管道精靈組中添加一個管道;如果管道右側位置小于0,則從管道精靈組中移除管道。
(6)繪制圖形,刷新繪圖,設置時鐘的時間間隔。
創建游戲包
3.4
2.創建游戲進行模塊
#導入模塊
from class_package.pipe import Pipe
from class_package.bird import Bird
import cfg
import pygame, sys
'''進入游戲'''
def runGame(screen, resource, game_start_info, showScore):
'''將resource的元素分別賦給sounds、pipe_images、bird_images、
other_images、backgroud_image'''
sounds = resource[0]
pipe_images = resource[1]
bird_images = resource[2]
other_images = resource[3]
backgroud_image = resource[4]
score = 0 #定義得分,初值賦為0
創建游戲包
3.4
2.創建游戲進行模塊
#獲取游戲開始界面的信息,包括小鳥位置、地面位置和小鳥圖片索引
bird_pos,base_pos,bird_id=list(game_start_info.values())
base_diff_bg = (other_images['base'].get_width()
- backgroud_image.get_width())
clock = pygame.time.Clock() #創建時鐘
pipe_sprites = pygame.sprite.Group() #創建管道精靈組
for i in range(2): #循環兩次
pipe_pos = Pipe.randomPipe(cfg, pipe_images.get('top')) #隨機生成管道位置
#計算上管道位置,并將管道對象添加到精靈組中
pipe_pos_top = (cfg.SCREENWIDTH + i * cfg.SCREENWIDTH / 2,
pipe_pos.get('top')[1])
pipe_sprites.add(Pipe(pipe_images.get('top'),pipe_pos_top))
#計算下管道位置,并將管道對象添加到精靈組中
pipe_pos_bottom=(cfg.SCREENWIDTH + i * cfg.SCREENWIDTH / 2,
pipe_pos.get('bottom')[1])
pipe_sprites.add(Pipe(pipe_images.get('bottom'),pipe_pos_bottom))
創建游戲包
3.4
2.創建游戲進行模塊
#創建小鳥精靈
bird = Bird(bird_images, bird_id, bird_pos)
is_add_pipe = True #定義添加管道標志,賦初值為True
is_game_running = True #定義游戲進行標志,賦初值為True
while is_game_running: #循環,直到游戲標志為False
for event in pygame.event.get(): #獲取事件并遍歷
if event.type == pygame.QUIT: #如果為退出事件
pygame.quit() #退出pygame
sys.exit() #退出系統
#如果為單擊事件
elif event.type == pygame.MOUSEBUTTONDOWN:
bird.setFlapped() #調用Bird的setFlapped()方法
sounds['wing'].play() #播放飛行音效
創建游戲包
3.4
2.創建游戲進行模塊
'''碰撞檢測'''
for pipe in pipe_sprites: #遍歷管道精靈組
#如果小鳥精靈和管道精靈組的任一精靈碰撞
if pygame.sprite.collide_mask(bird, pipe):
is_game_running = False #游戲進行標志設為False
sounds['hit'].play() #播放碰撞音效
return score, bird, pipe_sprites, base_pos
'''更新小鳥,判斷小鳥是否死亡'''
boundary = [0, base_pos[1]] #定義上下界限
#更新小鳥位置和狀態,返回死亡標志
is_dead=bird.update(boundary,float(clock.tick(cfg.FPS))/1000)
if is_dead: #如果小鳥死亡
is_game_running = False #游戲進行標志設為False
sounds['hit'].play() #播放碰撞音效
return score, bird, pipe_sprites, base_pos
創建游戲包
3.4
2.創建游戲進行模塊
#計算地面x坐標
base_pos[0] = -((-base_pos[0] + 4) % base_diff_bg)
'''移動管道,模擬小鳥向前飛,并判斷是否從管道精靈組添加和移除管道、
以及計算得分'''
for pipe in pipe_sprites:
pipe.rect.left -= 4 #管道左移4像素
#如果管道右側位置小于小鳥右側位置(穿過管道),且得分標志為False
if (pipe.rect.right < bird.rect.right
and not pipe.used_for_score):
pipe.used_for_score = True #得分標志設為True
score += 0.5 #統計得分
sounds['point'].play() #播放得分音效
創建游戲包
3.4
2.創建游戲進行模塊
#如果管道左側位置小于5大于0,且添加管道標志為True
if (pipe.rect.left < 5 and pipe.rect.left > 0
and is_add_pipe):
#隨機生成管道位置,且將上下管道添加到精靈組中
pipe_pos = Pipe.randomPipe(cfg, pipe_images.get('top'))
pipe_sprites.add(Pipe(pipe_images.get('top'),
pipe_pos.get('top')))
pipe_sprites.add(Pipe(pipe_images.get('bottom'),
pipe_pos.get('bottom')))
is_add_pipe = False #添加管道標志設為False
elif pipe.rect.right < 0: #如果管道右側位置小于0
pipe_sprites.remove(pipe) #從管道精靈組中移除管道
is_add_pipe = True #添加管道標志設為True
創建游戲包
3.4
2.創建游戲進行模塊
screen.blit(backgroud_image, (0, 0)) #繪制背景
pipe_sprites.draw(screen) #繪制管道
screen.blit(other_images['base'], base_pos) #繪制地面
showScore(screen, score) #顯示得分
bird.draw(screen) #繪制小鳥
pygame.display.update() #刷新繪圖
clock.tick(cfg.FPS) #設置時鐘的時間間隔
創建游戲包
3.4
3.創建游戲結束模塊
在game_package包中創建游戲結束模塊end_game.py,在其中定義endGame()函數顯示結束界面,包括背景、結束圖片、地面和下落到地面的小鳥,并實現單擊返回開始界面。首先播放死亡音效和創建時鐘對象,然后開始循環。
在循環中,首先,解析資源元組,將元素分別賦給對應的變量;其次,獲取事件并遍歷,如果為退出事件,則關閉窗口,如果為單擊事件,則退出循環;然后,重新繪制背景、地面、管道,調用showScore()方法顯示得分,并設置小鳥飛行的上下界限,調用Bird類的update()和draw()方法更新和繪制小鳥;最后,刷新繪圖,以及設置時鐘的時間間隔。實現代碼如下。
創建游戲包
3.4
3.創建游戲結束模塊
import pygame, sys
import cfg
'''顯示游戲結束界面'''
def endGame(screen,resource,showScore,score,bird,pipe_sprites,base_pos):
'''將resource的元素分別賦給sounds、other_images、
backgroud_image'''
sounds = resource[0]
other_images = resource[3]
backgroud_image = resource[4]
sounds['die'].play() #播放死亡音效
clock = pygame.time.Clock() #創建時鐘
創建游戲包
3.4
3.創建游戲結束模塊
while True:
for event in pygame.event.get(): #獲取事件并遍歷
if event.type == pygame.QUIT: #如果為退出事件
pygame.quit() #退出pygame
sys.exit() #退出系統
#如果為單擊事件
elif event.type == pygame.MOUSEBUTTONDOWN:
return #返回None,退出循環
screen.blit(backgroud_image, (0, 0)) #繪制背景
pipe_sprites.draw(screen) #繪制管道
screen.blit(other_images['base'], base_pos) #繪制地面
創建游戲包
3.4
3.創建游戲結束模塊
#計算結束圖片位置
x=(cfg.SCREENWIDTH-other_images['gamestart'].get_width())/2
y = cfg.SCREENHEIGHT * 0.4
msg_pos = [x, y]
#繪制結束圖片
screen.blit(other_images['gameover'], msg_pos)
showScore(screen, score) #顯示得分
boundary = [0, base_pos[1]] #定義上下界限
#更新小鳥
bird.update(boundary,float(clock.tick(cfg.FPS))/1000)
bird.draw(screen) #繪制小鳥
pygame.display.update() #刷新繪圖
clock.tick(cfg.FPS) #設置時鐘的時間間隔
創建主模塊
3.5
1.導入模塊
主模塊中會調用其他模塊中的類和函數,因此,須首先導入相關模塊。
#導入模塊
from game_package.run_game import *
from game_package.start_game import *
from game_package.end_game import *
import pygame
創建主模塊
3.5
2.定義初始化游戲函數
定義initGame()函數初始化pygame和pygame.mixer,設置窗口大小和標題,并返回窗口對象,實現代碼如下。
'''游戲初始化'''
def initGame():
pygame.init() #初始化pygame
pygame.mixer.init() #初始化pygame.mixer
#設置窗口大小
screen=pygame.display.set_mode((cfg.SCREENWIDTH,cfg.SCREENHEIGHT))
pygame.display.set_caption('Flappy Bird') #設置窗口標題
return screen #返回screen
創建主模塊
3.5
3.定義加載資源函數
定義loadResource()函數加載圖片和聲音資源,將聲音、管道、小鳥和其他圖片保存在字典中,背景圖片保存在變量中,并返回字典和變量,實現代碼如下。
'''加載游戲資源'''
def loadResource():
sounds = dict() #定義聲音字典
#遍歷聲音路徑字典,加載聲音,并保存在聲音字典中
for key, value in cfg.AUDIO_PATHS.items():
sounds[key] = pygame.mixer.Sound(value)
pipe_images = dict() #定義管道圖片字典
#加載下管道圖片并添加到字典中
pipe_images['bottom'] = pygame.image.load(cfg.PIPE_IMAGE_PATHS)
創建主模塊
3.5
3.定義加載資源函數
#將下管道圖片旋轉180度作為上管道圖片,并添加到字典中
pipe_images['top'] = pygame.transform.rotate(
pipe_images['bottom'], 180)
bird_images = dict() #定義小鳥圖片字典
#遍歷小鳥圖片路徑字典,加載小鳥圖片,并保存在小鳥圖片字典中
for key, value in cfg.BIRD_IMAGE_PATHS.items():
bird_images[key] = pygame.image.load(value)
#加載背景圖片,并保存到變量中
backgroud_image = pygame.image.load(cfg.BACKGROUND_IMAGE_PATHS)
other_images = dict() #定義其他圖片字典,保存開始、結束、地面圖片
#遍歷其他圖片路徑字典,加載其他圖片,并保存在其他圖片字典中
for key, value in cfg.OTHER_IMAGE_PATHS.items():
other_images[key] = pygame.image.load(value)
#返回字典和變量
return sounds,pipe_images,bird_images,other_images,backgroud_image
創建主模塊
3.5
4.定義顯示得分函數
定義showScore()函數顯示得分,在該函數中首先加載字體文件,然后配置顯示的文字,最后獲取文字對象的rect,并設置對象的中心坐標后,繪制文字,實現代碼如下。
'''顯示得分'''
def showScore(screen, score):
#通過字體文件獲得字體對象
font = pygame.font.Font(cfg.FONT_PATHS, 25)
#配置顯示的文字
textSurface=font.render('得分:{}'.format(int(score)),True,(255,0,0))
textRect = textSurface.get_rect() #獲取文字對象的rect
#設置文字對象的中心坐標
textRect.center = (screen.get_width()/2, 20)
screen.blit(textSurface, textRect) #繪制文字
創建主模塊
3.5
5.定義主函數
定義main()函數,在其中調用初始化游戲、加載資源、顯示開始界面、進行游戲和顯示結束界面等函數,完成一次游戲,實現代碼如下。
'''主函數'''
def main():
screen = initGame() #初始化游戲
#加載游戲資源,并將返回值賦給resource
resource = loadResource()
#顯示游戲開始界面
game_start_info = startGame(screen, resource)
#進行游戲
score, bird, pipe_sprites, base_pos = runGame(screen, resource, game_start_info, showScore)
#顯示游戲結束界面
endGame(screen, resource, showScore, score, bird, pipe_sprites, base_pos)
創建主模塊
3.5
6.運行程序
循環調用主函數運行程序,實現代碼如下。
while True:
main()
游戲開始界面、運行界面和結束界面如圖11-2所示。
圖11-2 Flappy Bird游戲界面
感謝觀看

展開更多......

收起↑

資源預覽

<pre id="tfb94"><li id="tfb94"></li></pre>

<bdo id="tfb94"><rt id="tfb94"></rt></bdo>
  • <menu id="tfb94"><dl id="tfb94"></dl></menu><i id="tfb94"><acronym id="tfb94"><sub id="tfb94"></sub></acronym></i>

    1. 主站蜘蛛池模板: 马龙县| 永安市| 凌源市| 汪清县| 德庆县| 金坛市| 高邮市| 乐平市| 松桃| 贺州市| 长丰县| 中江县| 遂昌县| 凭祥市| 木里| 政和县| 皋兰县| 昌江| 淳安县| 新宁县| 天全县| 宁南县| 琼结县| 鹤山市| 云浮市| 公安县| 西和县| 宁明县| 虞城县| 英超| 阳春市| 永春县| 清徐县| 汤阴县| 高台县| 镶黄旗| 辉县市| 广丰县| 平度市| 长岛县| 玉环县|