資源簡介 (共30張PPT)4.4綜合問題的解決第 4 單元學習目標4.4綜合問題的解決★ 學會使用pygame模塊。★ 基于需求,分解任務。★ 組裝程序,測試運行pygame模塊什么是pygame模塊?Pygame 是一個專門用來開發游戲的 Python 模塊,主要為開發、設計 2D 電子游戲而生,具有免費、開源,支持多種操作系統,具有良好的跨平臺性等優點。它提供了諸多操作模塊,比如圖像模塊(image)、聲音模塊(mixer)、輸入/輸出(鼠標、鍵盤、顯示屏)模塊等。簡單來說,如果你使用pygame,理論上可以開發設計市面上所有的2d類型游戲(僅僅是理論上)。pygame模塊pygame模塊的安裝使用pip接口進行安裝代碼:pygame模塊pygame庫基本函數使用1. pygame.init() 初始化,調用pygame的任何函數之前都要調用這個函數。代碼:pygame模塊pygame庫基本函數使用2. pygame.display.set_mode((xxx,xxx)) 創建窗口,傳入寬和高代碼:pygame模塊pygame庫基本函數使用3. pygame.display.set_caption("xxxx") 設置窗口頂部標題名稱代碼:pygame模塊pygame庫基本函數使用運行上面代碼會發現左上角出現一個窗口,然后一閃即過,這是正常的。這里就要思考python代碼的運行,通過執行上述代碼,你創建了一個黑色窗口,但是當代碼執行完會發生什么,當然是python自動退出了。所以要使用一定的方法不讓代碼結束運行,這就要添加“死循環”讓程序一遍又一遍的運行里面的代碼而不退出。pygame模塊pygame的操作1. screen.fill() 對顏色進行填充代碼:pygame模塊pygame的操作2. 圖片插入pygame.image.load('xxx.png')代碼:3. screen.blit(xx,(0,0))##寫入到背景pygame模塊pygame的操作4. pygame.display.flip() 更新全部顯示5.pygame.quit() #退出pygamepygame模塊實例用pygame制作簡易版《flappy bird》游戲游戲規則:1.按下空格鍵開啟游戲2.按下空格鍵控制小鳥向上飛,不按,小鳥掉落下來3.小鳥碰到上下管道或者超出窗口上下高度,游戲失敗pygame模塊實例用pygame制作簡易版《flappy bird》游戲一、游戲框架import pygame as pyimport random as rimport syspy.init() # 初始化py.mixer.init() # 初始化聲音模塊py.display.set_caption("flappy bird") # 設置標題WIDTH,HEIGHT = 288,512 # 常量,游戲窗口寬和高screen = py.display.set_mode((WIDTH,HEIGHT)) # 屏幕對象while True:for event in py.event.get(): # 獲取事件if event.type == py.QUIT:py.quit()sys.exit()py.display.update()pygame模塊實例用pygame制作簡易版《flappy bird》游戲二、設置變量2.1、加載背景圖片對象和設置幀速率clock = py.time.Clock()bg = py.image.load("img/bg_day.png") # 背景圖片對象2.2、加載小鳥圖片對象'''小鳥的設置'''bird = py.image.load("img/bird0_0.png") # 小鳥對象bird_rect = bird.get_rect()speed = 7 # 小鳥的速度bird_rect.left = 50 # 小鳥的x坐標bird_rect.top = 300 # 小鳥的y坐標pygame模塊實例用pygame制作簡易版《flappy bird》游戲二、設置變量2.3、加載管道圖片對象pipe_up = py.image.load("img/pipe_up.png") # 口沖上的管道 下pipe_down = py.image.load("img/pipe_down.png") # 口沖下的管道 上pipe = [WIDTH, r.randint(-200,0)]# 管道坐標:[x坐標,y坐標]space = r.randint(100,200)# 上下管道間隔x = 5# 管道移動速度pygame模塊實例用pygame制作簡易版《flappy bird》游戲二、設置變量2.4、字體 —— 分數、最高分、開始界面和游戲結束h_score = t_score = 0 # 最高分和當前分數score_img = [py.image.load("img/font_0{}.png".format(i)) for i in range(48,58)] # 分數圖片font36 = py.font.SysFont('Arial', 28) # 字體對象msg = font36.render('Press SPACE to Start', True, (0,0,0)) # 屏幕上的開始文本h_score_font = font36.render("High Score: " + str(h_score),True,(0,0,0)) # 渲染最高分game_over = py.image.load("img/game_over.png") # 獲取失敗圖片對象pygame模塊實例用pygame制作簡易版《flappy bird》游戲二、設置變量2.5、聲音模塊'''聲音'''sounds = (py.mixer.Sound("audio/wing.wav"),py.mixer.Sound("audio/hit.wav"),py.mixer.Sound("audio/point.wav"))pygame模塊實例用pygame制作簡易版《flappy bird》游戲二、設置變量2.5、聲音模塊'''聲音'''sounds = (py.mixer.Sound("audio/wing.wav"),py.mixer.Sound("audio/hit.wav"),py.mixer.Sound("audio/point.wav"))2.6、是否按下空格鍵start = False # 開始狀態,空格鍵沒有按下pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.1、設置幀速率、加載背景圖片while True:clock.tick(60) # 設置幀速率screen.blit(bg,(0,0)) # 加載背景圖片【省略代碼】pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.2、按下空格鍵while True:clock.tick(60) # 設置幀速率screen.blit(bg,(0,0)) # 加載背景圖片for event in py.event.get(): # 獲取事件if event.type == py.QUIT:py.quit()sys.exit()pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.2、按下空格鍵# 按空格時開始游戲,或者重新初始化速度if event.type == py.KEYDOWN:if event.key == py.K_SPACE: # 按下空格鍵sounds[0].play() # 播放音效if start == False:bird_rect.top , start = 300,Truespeed = 7 # 重新初始化速度py.display.update()pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.3、開始游戲每次管道在窗口的最右邊出現,向左移動上管道的top屬性的取值范圍是(-200,0),即上管道在窗口中顯示出來的長度范圍為(120,320)space為上下兩個管道口的間距,設置為了一個隨機數下管道的top屬性的取值范圍可以通過計算得到,為上管道在窗口上顯示的長度 + space,即 pipe[1] + space + 320管道到達窗口左邊之后,需要重新生成管道的y坐標pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.3、開始游戲if start: # 開始游戲screen.blit(bird,(bird_rect.left,bird_rect.top)) # 加載小鳥角色bird_rect.top -= speed # 向上或向下飛speed -= 0.5'''管道'''screen.blit(pipe_down,(pipe[0],pipe[1])) # 加載上面的管道screen.blit(pipe_up,(pipe[0],pipe[1] + space + 320)) # 加載下面的管道pipe[0] -= x # 管道x坐標減少,向左移動shouScore(t_score) ## 顯示得分pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.3、開始游戲# 出現新的管道,隨機y坐標if pipe[0] < -50:pipe = [WIDTH,r.randint(-200,0)]space = r.randint(100,200)t_score += 1 # 增加得分sounds[2].play() # 成功通過管道,播放音效h_score = max(h_score,t_score) # 更新最高分pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.3、開始游戲# 開始和結束時顯示的畫面else:h_score_font = font36.render("High Score: " + str(h_score), True, (0, 0, 0)) # 渲染最高分screen.blit(msg,(0,200)) # 顯示提示信息screen.blit(h_score_font,(0,300)) # 顯示最高分pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.4、游戲失敗小鳥的y坐標(即top)超過窗口的上下高度小鳥撞到管道pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環3.4、游戲失敗# 失敗條件if bird_rect.top >= HEIGHT - 48 or bird_rect.top < 0 or \(50 < pipe[0] < 98) and (bird_rect.top < pipe[1] + 320 or \bird_rect.top > pipe[1] + space + 320):start, t_score, pipe[0],msg = False, 0, 720,game_over # 游戲失敗,顯示gameoverbird_rect.top = 300x = 5sounds[1].play() # 播放音效pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環四、處理顯示分數的函數 —— shouScore(t_score)分數顯示在屏幕中央分數采用的是0-9的圖片來顯示需要計算分數所占的寬度pygame模塊實例用pygame制作簡易版《flappy bird》游戲三、游戲主循環四、處理顯示分數的函數 —— shouScore(t_score)def shouScore(score):'''分數顯示在屏幕中央'''score_lst = [int(i) for i in list(str(score))] # 獲取分數totalWidth = 0 # 所要顯示數字的總寬度for i in score_lst:totalWidth += score_img[i].get_width()Xpos = (WIDTH - totalWidth) / 2for i in score_lst:screen.blit(score_img[i],(Xpos,HEIGHT * 0.1))Xpos += score_img[i].get_width()謝謝聆聽 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫