溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何利用pygame模塊制作跳躍小球小游戲

發(fā)布時間:2021-08-17 17:34:24 來源:億速云 閱讀:245 作者:chen 欄目:開發(fā)技術

本篇內容主要講解“如何利用pygame模塊制作跳躍小球小游戲”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“如何利用pygame模塊制作跳躍小球小游戲”吧!

前言

pygame是用來開發(fā)游戲的一套基于SDL的模板,它可以是python創(chuàng)建完全界面化的游戲和多媒體程序,而且它基本上可以在任何系統(tǒng)上運行。本文將詳細介紹你利用pygame模塊制作跳躍小球小游戲的相關內容,下面來一起看看吧

實現方法

首先創(chuàng)建一個游戲窗口,然后再窗口內創(chuàng)建一個小球。以一定的速度移動小球,當小球碰到游戲窗口的邊緣時,小球彈回,繼續(xù)移動??梢园凑杖缦虏襟E實現該功能。

(1)首先來創(chuàng)建一個游戲窗口,寬和高設置為640×480.代碼如下:

import sys                               #導入sys模塊
import pygame                            #導入pygame模塊
pygame.init()                            #初始化pygame
size=with,height=640,480                 #設置窗口大小
screen=pygame.display.set_model(size)    #顯示窗口

上述代碼中,首先導入pygame模塊,該模塊在上一篇文章中介紹過,直接用pip命令安裝即可。然后調用init()方法初始化pygame模塊。接下來,設置窗口的寬和高,最后使用display模塊顯示窗體。display模塊的常用方法如下: 

方法名功能
pygame.display.init初始化init模塊
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功能相同

(2)當我們運行上述代碼時,會出現一個一閃而過的窗口,這是因為程序執(zhí)行完畢后會自動關閉。如果讓窗口一直顯示,需要使用while true循環(huán)讓程序一直執(zhí)行,此外,還需要設置關閉按鈕。如果不設置關閉按鈕,雖然在界面會顯示紅叉關閉按鈕,但點擊后就會出現程序無響應的錯誤,然后強制關閉了程序。

在pycharm演示如下

代碼:

如何利用pygame模塊制作跳躍小球小游戲

運行:

如何利用pygame模塊制作跳躍小球小游戲

點擊紅叉就會關閉窗口。

上述代碼中,添加了輪詢時間監(jiān)測。pygame.event.get()能夠獲取事件隊列,使用for  in遍歷事件,然后根據type屬性判斷事件類型。這里的事件處理方式與GUI類似,如event.type等于pygame.QUIT表示檢測到關閉pygame窗口事件,pygame.KEYDOWN表示鍵盤按下事件,pygame.MOUSEBUTTONDOWN表示鼠標按下事件等。

(3)在窗口中添加小球。我們先準備一張ball.png圖片,然后加載圖片,最后將圖片顯示在窗口中,在pycharm中演示如下。

代碼:

如何利用pygame模塊制作跳躍小球小游戲

如何利用pygame模塊制作跳躍小球小游戲

運行:

如何利用pygame模塊制作跳躍小球小游戲

上述代碼中,使用image模塊的load方法加載圖片,返回值ball是一個surface對象。surface是用來代表圖片的pygame對象,可以對一個surface對象進行涂畫、變形、復制等各種操作。事實上,屏幕也只是一個surface,pygame.display.set_mode就返回了一個屏幕surface對象。如果將ball這個surface對象畫到screen surface對象,需要使用blit()方法,最后使用display方法更新整個待顯示的surface對象到屏幕上。surface對象常用方法如下:

方法名功能
pygame.Surface.blit將一個圖像畫到另一個圖像上
pygame.Surface.convert轉換圖像的像素格式
pygame.Surface.convert_alpha轉換圖像的像素格式,包含alpha通道的轉換
pygame.Surface.fill使用顏色填充surface
pygame.Surface.get_rect獲取surface的矩形區(qū)域

 (4)上面的小球是靜止的,下面我們該讓小球動起來了。ball.get_rect()方法返回值ballrect是一個rec對象,該對象有一個move()方法可以用于移動矩形。move(x,y)函數有兩個參數,第一個參數是x軸移動的距離,第二個參數是y軸移動的距離。窗體左上角坐標為(0,0)。

為了實現小球不停地移動,將move()函數添加到while循環(huán)內,具體代碼如下:

如何利用pygame模塊制作跳躍小球小游戲

我們在原代碼的基礎上加上了這兩行代碼。運行后卻發(fā)現小球一閃而過,但小球并沒有真正的笑死,而是移動到窗體之外,此時需要添加碰撞監(jiān)測的功能。當小球與窗體的任意邊緣發(fā)生碰撞,則更改小球的移動方向。

代碼如下:

如何利用pygame模塊制作跳躍小球小游戲

在原有代碼中添加上面的碰撞判斷代碼,運行如下

如何利用pygame模塊制作跳躍小球小游戲

小球在界面飛速運動。然后我們需要控制小球移動的速度。首先介紹一下上面的代碼,上面代碼中,添加了碰撞監(jiān)測功能。如果碰到左右邊緣,這則更改x軸數據為負數;如果碰到上下邊緣,則更改y軸數據為負數。

那么我們怎樣控制小球移動的速度呢?這時我們需要添加一個“時鐘”來控制程序運行的時間。這時就需要使用pygame的time模塊。使用pygame時鐘之前,必須先創(chuàng)建clock對象的一個實例,然后再while循環(huán)中設置多長時間運行一次。代碼如下【也就是最終代碼,由于運動效果無法展示,各位還是自行運行查看效果^_^】:

# -*- coding:utf-8 -*-
import sys  # 導入sys模塊
import pygame  # 導入pygame模塊
 
pygame.init()  # 初始化pygame
size = width, height = 640, 480  # 設置窗口
screen = pygame.display.set_mode(size)  # 顯示窗口
color = (0, 0, 0)  # 設置顏色
 
ball = pygame.image.load("ball.png")  # 加載圖片
ballrect = ball.get_rect()  # 獲取矩形區(qū)域
 
speed = [5, 5]  # 設置移動的X軸、Y軸距離
clock = pygame.time.Clock()  # 設置時鐘
# 執(zhí)行死循環(huán),確保窗口一直顯示
while True:
    clock.tick(60)  # 每秒執(zhí)行60次
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果點擊關閉窗口,則退出
            sys.exit()
 
    ballrect = ballrect.move(speed)  # 移動小球
    # 碰到左右邊緣
    if ballrect.left < 0 or ballrect.right > width:
        speed[0] = -speed[0]
    # 碰到上下邊緣
    if ballrect.top < 0 or ballrect.bottom > height:
        speed[1] = -speed[1]
 
    screen.fill(color)  # 填充顏色
    screen.blit(ball, ballrect)  # 將圖片畫到窗口上
    pygame.display.flip()  # 更新全部顯示
 
pygame.quit()  # 退出pygame

上述代碼中在上面代碼中添加了:

clock=pygame.time.Clock()      #設置時鐘

以及循環(huán)中的

clock.tick(60)           #每秒執(zhí)行60次

這樣我們再次運行就會出現小球緩慢移動并碰撞邊緣改變方向的效果了。

到此,相信大家對“如何利用pygame模塊制作跳躍小球小游戲”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI