通過pygame框架實現製作一個跳躍的跳跳龍游戲

緊接着上回對於pygame的安裝與實踐,我們再根據我們瞭解的python基礎語法進行實施開發。這一次我們來做一個跳躍的跳跳龍的遊戲。

一、創建遊戲窗口

創建遊戲窗口的同時,我們在窗口內部創建一個跳跳龍。要求要以一定速度移動跳跳龍,當跳跳龍碰到了遊戲窗口的邊緣的時候就會彈回。然後繼續移動。接下來讓我們按照以下的步驟進行實現這個功能。

import sys                # 導入sys模塊
import pygame             # 導入pygame模塊

pygame.init()            # 初始化pygame
size=width,height=640,480        # 設置窗口
FRAME_PER_SECONDS = 27  # 每秒最大幀數
screen=pygame.display.set_mode(size)        # 顯示窗口

在我們上面創建遊戲窗口的代碼中,要首先進行導入相應的pygame模塊,然後可以使用init()方法來初始化pygame模塊。接下來就可以設置窗口的高和寬了,最後使用display模塊顯示窗體就可以了,針對display模塊的常用的方法如下表所示。

diaplay模塊的常用的方法以及功能
方法名 功能
pygame.display.init 初始化display功能
pygame.display.quit 結束display模塊
pygame.display.get_init

如果display模塊已經被初始化,則返回True

pygame.display.set_mode 初始化一個準備顯示的對象
pygame.display.get_surface 獲取當前的surface對象
pygame.display.flip 更新整個待顯示的surface對象到屏幕上
pygame.display.update

更新部分的內容顯示到屏幕上,如果沒有參數則與flip功能相同

二、關閉當前遊戲窗口

運行上面的代碼之後,窗口出現之後,我們看到了一個一閃而過的黑色窗口,這是因爲程序在運行的時候,因爲程序已經執行完畢,就會自動關閉。如果我們想讓窗口一直執行下去就要使用while True語句讓程序一直執行。此外還要有一個關閉按鈕讓當前的遊戲窗口在關閉的時候同樣退出sys模塊以及退出pygame模塊。

import sys                                # 導入sys模塊
import pygame                             # 導入pygame模塊 

pygame.init()                             # 初始化pygame
size = width,height=640,480               # 設置窗口 
FRAME_PER_SECONDS = 27  # 每秒最大幀數
screen = pygame.display.set_mode(size)    # 顯示窗口

# 執行死循環,確保窗口一直顯示
while True:
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.get():
            if event.type == pygame.QUIT:    # 如果單擊關閉窗口,則進行退出
                sys.exit()

pygame.quit()                                # 退出pygame

在上面的代碼中我們加入了輪詢事件檢測。pygame.event.get()方法可以獲取到當前事件的隊列,使用for……in語句可以進行遍歷事件,然後我們根據type屬性來判斷當前的事件屬性。這裏的事件處理的方式和GUI相似,QUIT:關閉pygame窗口事件,KEYDOWN:鍵盤按下事件,MOUSEBUTTONDOWN:鼠標按下事件。

三、加入跳跳龍

import sys                               # 導入sys模塊
import pygame                            # 導入pygame模塊

pygame.init()                            # 初始化pygame
size = width,height = 640,480            # 設置窗口
FRAME_PER_SECONDS = 27  # 每秒最大幀數
screen =pygame.display.set_mode(size)    # 顯示窗口
color = (0,0,0)                          # 設置顏色

dragon= pygame.image.load("dragon.png")   # 加載圖片
dragonrect = dragon.get_rect()            # 獲取矩形區域

# 執行死循環,確保窗口一直顯示
while True:
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:    # 如果單擊關閉窗口,則退出
            sys.exit()

    screen.fill(color)                   # 填充顏色
    screen.blit(dragon,dragonrect)       # 將圖片畫到窗口上
    pygame.display.flip()                # 更新全部顯示

pygame.quit()

這裏使用的image模塊的load()方法進行加載圖片,返回值dragon是Surface對象。Surface代表了圖片的pygame對象。同樣的遊戲屏幕也是一個Surface對象,我們使用pygame.Surface.blit方法可以將一個圖像畫到另一個圖像上。

Surface對象的方法及功能
方法名 功能
pygame.Surface.blit

將一個圖像畫到另一個圖像上

pygame.Surface.convert 轉換圖像的像素格式
pygame.Surface.convert_alpha 轉化圖像的像素格式,包含alpha通道的轉換
pygame.Surface.fill 使用顏色填充Surface
pygame.Surface.get.rect 獲取Surface的矩形區域

運行上面的代碼。

四、讓跳跳龍跳起來

使用dragon.get_rect()方法返回值dragonrect事伊哥Rect對象,該對象有move()方法可以用於移動矩形。

import sys                               # 導入sys模塊
import pygame                            # 導入pygame模塊

pygame.init()                            # 初始化pygame
size = width,height = 640,480            # 設置窗口
FRAME_PER_SECONDS = 27  # 每秒最大幀數
screen =pygame.display.set_mode(size)    # 顯示窗口
color = (0,0,0)                          # 設置顏色

dragon= pygame.image.load("dragon.png")   # 加載圖片
dragonrect = dragon.get_rect()            # 獲取矩形區域

speed = [5,5]
# 執行死循環,確保窗口一直顯示
while True:
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:    # 如果單擊關閉窗口,則退出
            sys.exit()

    dragonrect = dragonrect.move(speed)  # 移動跳跳龍
    screen.fill(color)                   # 填充顏色
    screen.blit(dragon,dragonrect)       # 將圖片畫到窗口上
    pygame.display.flip()                # 更新全部顯示

pygame.quit()

可以看到一閃而過的跳跳龍……因爲我們沒有加入碰撞檢測的功能。如果你發現跳跳龍出現飛速移動的情況,這是根據程序中默認的運行代碼的時間算的,這裏我們設置每秒執行100次的運行速率。讓程序運行while循環的速率得到控制。

import sys                               # 導入sys模塊
import pygame                            # 導入pygame模塊

pygame.init()                            # 初始化pygame
size = width,height = 640,480            # 設置窗口
FRAME_PER_SECONDS = 27  # 每秒最大幀數
screen =pygame.display.set_mode(size)    # 顯示窗口
color = (0,0,0)                          # 設置顏色

dragon= pygame.image.load("dragon.jpg")   # 加載圖片
dragonrect = dragon.get_rect()            # 獲取矩形區域

speed = [5,5]
clock = pygame.time.Clock()               # 設置時鐘 
# 執行死循環,確保窗口一直顯示
while True:
    clock.tick(100)                       # 每秒執行100次
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:    # 如果單擊關閉窗口,則退出
            sys.exit()

    dragonrect = dragonrect.move(speed)  # 移動跳跳龍
    if dragonrect.left < 0 or dragonrect.right > width:
        speed[0] = -speed[0]
    if dragonrect.top < 0 or dragonrect.bottom > height:
        speed[1] = -speed[1]
    screen.fill(color)                   # 填充顏色
    screen.blit(dragon,dragonrect)       # 將圖片畫到窗口上
    pygame.display.flip()                # 更新全部顯示

pygame.quit()

最後:

五、加入活動背景

最後的最後:可以加入跳跳龍的活動背景。

bg = pygame.image.load('bg.jpg')

這樣跳跳龍就有了活動背景。快去試一試吧!

import sys                               # 導入sys模塊
import pygame                            # 導入pygame模塊

pygame.init()                            # 初始化pygame
size = width,height = 640,480            # 設置窗口
screen =pygame.display.set_mode(size)    # 顯示窗口
color = (0,0,0)                          # 設置顏色

def redrawGamescreen():
    screen.blit(bg, (0, 0))

dragon= pygame.image.load("dragon.jpg")   # 加載圖片
dragonrect = dragon.get_rect()            # 獲取矩形區域
bg = pygame.image.load('bg.jpg')
speed = [5,5]
clock = pygame.time.Clock()               # 設置時鐘
# 執行死循環,確保窗口一直顯示
while True:
    clock.tick(100)                        # 每秒執行100次
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:    # 如果單擊關閉窗口,則退出
            sys.exit()

    dragonrect = dragonrect.move(speed)  # 移動跳跳龍


    if dragonrect.left < 0 or dragonrect.right > width:
        speed[0] = -speed[0]
    if dragonrect.top < 0 or dragonrect.bottom > height:
        speed[1] = -speed[1]
    pygame.display.update()
    screen.fill(color)                   # 填充顏色
    screen.blit(dragon,dragonrect)       # 將圖片畫到窗口上
    pygame.display.flip()                # 更新全部顯示

    redrawGamescreen()
pygame.quit()

 

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