国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

15. python從入門到精通——Pygame游戲編程

這篇具有很好參考價值的文章主要介紹了15. python從入門到精通——Pygame游戲編程。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

游戲的原理

安裝Pygame

Pygame常用模塊

Pygame的基本使用? ? ?

實例:制作一個跳躍的小球游戲,如果碰到窗口邊緣會改變小球移動方向

實現(xiàn)步驟:

?運行效果:

小球圖片:? ??

?python代碼:

開發(fā)Flappy Bird游戲

游戲簡介:

運行效果:

圖片素材

游戲分析?

以面向對象的思維方式來分析一下這個游戲可以歸納為兩個對象

小鳥:

管道:

碰撞檢測:

實現(xiàn)步驟

python代碼


游戲的原理

? ? ? ? 窗口:游戲中也有窗口的概念,游戲中的角色都需要再窗口中顯示

? ? ? ? 資源:是指游戲中的背景、角色、聲音等?

? ? ? ? 坐標:在Pygame中有橫軸和縱軸。例如在植物大戰(zhàn)僵尸中不斷修改僵尸的坐標可以實現(xiàn)動畫效果

? ? ? ? ? ? ? ? 注意:Pygame中坐標0,0在創(chuàng)建窗口的左上角,向右則X坐標越大;向下則Y坐標越大

? ? ? ? 運行流程:在python中程序是由上至下執(zhí)行的,執(zhí)行完就結束了游戲窗口隨之關閉。為了能夠讓窗口一直顯示需要設置一個死循環(huán),可以用while True 語句實現(xiàn)。當執(zhí)行地一邊的時候在窗口中添加背景圖片、角色,第二遍同樣添加背景圖片但是每次循環(huán)更新角色坐標。當頻率到至少24次每秒我們肉眼就只會感覺到畫面和角色是一直存在的從而實現(xiàn)了動畫效果

安裝Pygame

Pygame:是python中的模塊,專用于二D游戲開發(fā),要使用它需要先安裝它

安裝命令:pip install pygame

? ? ? ? 如果超時:pip ?install ?-i ?https://pypi.doubanio.com/simple/? ?--trusted-host pypi.doubanio.com pygame

Pygame常用模塊

Pygame官網

優(yōu)勢:Pygame做游戲開發(fā)的優(yōu)勢在于不需要過多考慮與底層開發(fā)相關的內容,而可 以把工作重心放在游戲邏輯上。

1. 常用模塊:

模塊名

功能

pygame.cdrom

訪問光驅

pygame.cursors

加載光標

pygame.display

訪問顯示設備

pygame.draw

繪制形狀、線和點

pygame.event

管理事件

pygame.fbnt

使用字體

pygame.image

加載和存儲圖片

pygame.joystick

使用游戲手柄或者類似的東西

pygame.key

讀取鍵盤按鍵

pygame.mixer

聲音

pygame.mouse

鼠標

pygame.movie

播放視頻

pygame.music

播放音頻

pygame.overlay

訪問高級視頻疊加

pygame.rect

管理矩形區(qū)域

pygame.sndarray

操作聲音數(shù)據(jù)

pygame.sprite

操作移動圖像

pygame.surface

管理圖像和屏幕

pygame.surfarray

管理點陣圖像數(shù)據(jù)

pygame.time

管理時間和幀信息

pygame.transform

縮放和移動圖像

2. display模塊的常用方法

方法名

功能

pygame.dispaly.init

初始化display模塊

pygame.dispaly.quit

結束display模塊

pygame.dispaly.get^init

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

pygame.dispaly.setmode

初始化一個準備顯示的界面

pygame.dispaly.get_surface

獲取當前的Surface對象

pygame.dispaly.flip

更新整個待顯示的Surface對象到屏幕上

pygame.dispaly .update

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

3. Surface對象的常用方法

方法名

功能

pygame.Surface.blit

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

pygame. Surface.convert

轉換圖像的像素格式

pygame.Surface.convert_alpha

轉化圖像的像素格式,包含alpha通道的轉換

pygame. Surface.f ill

使用顏色填充Surface

pygame. Surface.get_rect

獲取Surface的矩形區(qū)域

示例:創(chuàng)建窗口流程,也是大部分創(chuàng)建Pygame的流程


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

pygame.init()  # 初始化pygame,檢查游戲需要的一些硬件調用接口、系統(tǒng)功能接口是否有問題
size = width, height = 640, 480  # 設置窗口大小
screen = pygame.display.set_mode(size)  # 顯示窗口但是執(zhí)行完程序就會關閉窗口

while True:
# 獲取所有的事件,例如點擊窗口的時間、按下鍵盤的事件。由于事件的類型很多,程序不知道發(fā)生了哪一類事件所以需要不斷的循環(huán)判斷
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果點擊關閉窗口,則退出
            pygame.quit()  # 退出pygame
            sys.exit() #推出系統(tǒng)

Pygame的基本使用? ? ?

實例:制作一個跳躍的小球游戲,如果碰到窗口邊緣會改變小球移動方向

實現(xiàn)步驟:

? ? ? ? 創(chuàng)建窗口→添加小球→移動小球→檢測碰撞? ?

?運行效果:

python pygame,pygame,游戲,python

小球圖片:? ??

python pygame,pygame,游戲,python

?python代碼:

# -*- coding:utf-8 -*-
import sys  # 導入sys模塊
import pygame  # 導入pygame模塊

pygame.init()  # 初始化pygame
size = width, height = 640, 480  # 設置窗口,這是一個數(shù)組
screen = pygame.display.set_mode(size)  # 顯示窗口
color = (0, 0, 0)  # 設置顏色

ball = pygame.image.load("ball.png")  # 加載圖片
ballrect = ball.get_rect()  # 根據(jù)圖片大小獲取矩形區(qū)域

speed = [5, 5]  # 設置移動的X軸、Y軸距離
clock = pygame.time.Clock()  # 創(chuàng)建時鐘對象
# 執(zhí)行死循環(huán),確保窗口一直顯示
while True:
    clock.tick(240)  # 每秒執(zhí)行60次
    # 檢查事件
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果點擊關閉窗口,則退出
            pygame.quit()  # 退出pygame
            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)  # 此函數(shù)是將圖片推送到窗口上,第一個參數(shù)為圖片第二個參數(shù)為圖片位置
    pygame.display.flip()  # 更新全部顯示


開發(fā)Flappy Bird游戲

游戲簡介:

當點擊屏幕的時候小鳥就往上飛,再次點擊小鳥再次往上飛,當不點擊時小鳥會以更快速度降落。我們需要控制小鳥

我們需要控制小鳥通過各種各樣的管道,當我們穿過一組管道時就會得一分,如果在飛行過程中碰到了管道那么小鳥狀態(tài)變?yōu)榛疑粼诘厣?,游戲結束并且顯示一個總的分數(shù)

運行效果:

python pygame,pygame,游戲,python

圖片素材

python pygame,pygame,游戲,python

python pygame,pygame,游戲,python

python pygame,pygame,游戲,python

python pygame,pygame,游戲,python

python pygame,pygame,游戲,python

python pygame,pygame,游戲,python

python pygame,pygame,游戲,python

游戲分析?

以面向對象的思維方式來分析一下這個游戲可以歸納為兩個對象

小鳥:

? ? ? ? 屬性:

????????????????小鳥的生命狀態(tài)

? ? ? ? ? ? ? ? ????????活著:顏色為黃色

? ? ? ? ? ? ? ? ????????死亡:顏色為灰色

? ? ? ? ? ? ? ? 坐標位置

? ? ? ? ? ? ? ? ? ? ? ? X軸坐標

? ? ? ? ? ? ? ? ? ? ? ? Y軸坐標(變化)

? ? ? ? ? ? ? ? 是否跳躍

? ? ? ? ? ? ? ? ? ? ? ? 上升高度

? ? ? ? ? ? ? ? ? ? ? ? 墜落高度

? ? ? ? 方法

? ? ? ? ? ? ? ? 跳躍

? ? ? ? ? ? ? ? 墜落

管道:

? ? ? ? 方法:向左移動

碰撞檢測:

? ? ? ? 小鳥碰到上下管道

? ? ? ? 小鳥碰到上下邊界

實現(xiàn)步驟

搭建主框架

創(chuàng)建小鳥類

創(chuàng)建管道類

計算得分

碰撞檢測文章來源地址http://www.zghlxwxcb.cn/news/detail-662106.html

python代碼

import pygame
import sys
import random


class Bird(object):
    """定義一個鳥類"""

    def __init__(self):
        """定義初始化方法"""
        # 鳥的矩形有四個參數(shù):前兩個是小鳥矩形左上角的坐標點,后兩個是矩形的長寬
        self.birdRect = pygame.Rect(65, 50, 50, 50)
        # 定義鳥的3種狀態(tài)圖片列表:向上飛、向下墜、死亡
        self.birdStatus = [pygame.image.load("assets/1.png"),
                           pygame.image.load("assets/2.png"),
                           pygame.image.load("assets/dead.png")]
        self.status = 0  # 默認飛行狀態(tài)
        self.birdX = 120  # 鳥所在X軸坐標,即是向右飛行的速度
        self.birdY = 350  # 鳥所在Y軸坐標,即上下飛行高度
        self.jump = False  # 默認情況小鳥自動降落
        self.jumpSpeed = 10  # 跳躍高度
        self.gravity = 5  # 重力
        self.dead = False  # 默認小鳥生命狀態(tài)為活著

    def birdUpdate(self):
        if self.jump:
            # 小鳥跳躍
            self.jumpSpeed -= 1  # 速度遞減,上升越來越慢
            self.birdY -= self.jumpSpeed  # 鳥Y軸坐標減小,小鳥上升
        else:
            # 小鳥墜落
            self.gravity += 0.2  # 重力遞增,下降越來越快
            self.birdY += self.gravity  # 鳥Y軸坐標增加,小鳥下降
        self.birdRect[1] = self.birdY  # 更改Y軸位置


class Pipeline(object):
    """定義一個管道類"""

    def __init__(self):
        """定義初始化方法"""
        self.wallx = 400;  # 管道所在X軸坐標,最右邊位置
        self.pineUp = pygame.image.load("assets/top.png") #加載上管道圖片
        self.pineDown = pygame.image.load("assets/bottom.png") #加載管道圖片

    def updatePipeline(self):
        """"管道移動方法"""
        self.wallx -= 5  # 管道X軸坐標遞減,即管道向左移動
        # 當管道運行到一定位置,即小鳥飛越管道,分數(shù)加1,并且重置管道
        if self.wallx < -80: #管道寬度為94,當管道快移除屏幕時重置管道位置
            global score #設置得分加1并聲明為全局變量
            score += 1
            self.wallx = 400


def createMap():
    """定義創(chuàng)建地圖的方法"""
    screen.fill((255, 255, 255))  # 填充顏色
    screen.blit(background, (0, 0))  # 填入到背景

    # 顯示管道
    #因為管道長度為495幾乎占滿屏幕了,為了讓管道小一點設置為屏幕外的上下方
    screen.blit(Pipeline.pineUp, (Pipeline.wallx, -300));  # 上管道坐標位置
    screen.blit(Pipeline.pineDown, (Pipeline.wallx, 500));  # 下管道坐標位置
    Pipeline.updatePipeline()  # 管道移動

    # 顯示小鳥
    if Bird.dead:  # 撞管道狀態(tài)
        Bird.status = 2
    elif Bird.jump:  # 起飛狀態(tài)
        Bird.status = 1
    screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY))  # 設置小鳥的坐標
    Bird.birdUpdate()  # 鳥移動

    # 顯示分數(shù)
     #font.render()用于顯示字體有三個參數(shù):字符串、是否平滑、顏色
    screen.blit(font.render(str(score), -1, (255, 255, 255)), (200, 50))  # 設置顏色及坐標位置
    pygame.display.update()  # 更新顯示


def checkDead():
    # 上方管子的矩形位置
    upRect = pygame.Rect(Pipeline.wallx, -300,
                         Pipeline.pineUp.get_width() - 10,
                         Pipeline.pineUp.get_height())

    # 下方管子的矩形位置
    downRect = pygame.Rect(Pipeline.wallx, 500,
                           Pipeline.pineDown.get_width() - 10,
                           Pipeline.pineDown.get_height())
    # 檢測小鳥與上下方管子是否碰撞
    if upRect.colliderect(Bird.birdRect) or downRect.colliderect(Bird.birdRect):
        Bird.dead = True
    # 檢測小鳥是否飛出上下邊界
    if not 0 < Bird.birdRect[1] < height:
        Bird.dead = True
        return True
    else:
        return False


def getResutl():
    final_text1 = "Game Over"
    final_text2 = "Your final score is:  " + str(score)
    ft1_font = pygame.font.SysFont("Arial", 70)  # 設置第一行文字字體
    ft1_surf = font.render(final_text1, 1, (242, 3, 36))  # 設置第一行文字顏色
    ft2_font = pygame.font.SysFont("Arial", 50)  # 設置第二行文字字體
    ft2_surf = font.render(final_text2, 1, (253, 177, 6))  # 設置第二行文字顏色
    screen.blit(ft1_surf, [screen.get_width() / 2 - ft1_surf.get_width() / 2, 100])  # 設置第一行文字顯示位置
    screen.blit(ft2_surf, [screen.get_width() / 2 - ft2_surf.get_width() / 2, 200])  # 設置第二行文字顯示位置
    pygame.display.flip()  # 更新整個待顯示的Surface對象到屏幕上


if __name__ == '__main__':
    """主程序"""
    pygame.init()  # 初始化pygame
    pygame.font.init()  # 初始化字體
    font = pygame.font.SysFont("Arial", 50)  # 設置字體和大小
    size = width, height = 400, 680  # 設置窗口
    screen = pygame.display.set_mode(size)  # 顯示窗口
    clock = pygame.time.Clock()  # 設置時鐘
    Pipeline = Pipeline()  # 實例化管道類
    Bird = Bird()  # 實例化鳥類
    score = 0
    while True:
        clock.tick(60)  # 每秒執(zhí)行60次
        # 輪詢事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            # 如果觸發(fā)鍵盤和鼠標事件并且小鳥狀態(tài)不是死亡則Bird.jump值為True并且初始化跳躍跟墜落速度
            if (event.type == pygame.KEYDOWN or event.type == pygame.MOUSEBUTTONDOWN) and not Bird.dead:
                Bird.jump = True  # 跳躍
                Bird.gravity = 5  # 重力
                Bird.jumpSpeed = 10  # 跳躍速度

        background = pygame.image.load("assets/background.png")  # 加載背景圖片
        if checkDead():  # 檢測小鳥生命狀態(tài)
            getResutl()  # 如果小鳥死亡,顯示游戲總分數(shù)
        else:
            createMap()  # 創(chuàng)建地圖


到了這里,關于15. python從入門到精通——Pygame游戲編程的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

本文來自互聯(lián)網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Python游戲入門 武裝飛船1-創(chuàng)建Pygame窗口

    Python游戲入門 武裝飛船1-創(chuàng)建Pygame窗口

    C++入門練習1 運行結果-這是C++編程 //非常基礎的練習,用于熟悉編程用語#include iostreamusing namespace std;int main(){ co ? C++入門練習2 運行結果-a+b=c //非?;A的練習,用于熟悉編程用語#include iostreamusing namespace std; int main(){ i ? 綠盟一面-Java 面試其實也就一面,前兩天剛面完,兩個

    2024年02月01日
    瀏覽(29)
  • 強化學習Agent系列(一)——PyGame游戲編程,Python 貪吃蛇制作實戰(zhàn)教學

    強化學習Agent系列(一)——PyGame游戲編程,Python 貪吃蛇制作實戰(zhàn)教學

    大家好,未來的開發(fā)者們請上座 隨著人工智能的發(fā)展,強化學習基本會再次來到人們眼前,遂想制作一下相關的教程。強化學習第一步基本離不開虛擬環(huán)境的搭建,下面用大家耳熟能詳?shù)呢澇陨哂螒驗榛A,制作一個Agent,完成對這個游戲的絕殺。 萬里長城第一步:用pytho

    2024年01月21日
    瀏覽(29)
  • Pygame事件處理機制簡介-慕課的python游戲開發(fā)入門02

    Pygame事件處理機制簡介-慕課的python游戲開發(fā)入門02

    目錄 首先解釋幾個問題: 1、事件處理需求主要有以下幾個方面: 2、Pygame事件隊列 3、Pygame事件 4、事件類型及屬性 ?5、事件處理的重要函數(shù) ?6、鍵盤事件 7、鼠標事件 8、處理事件函數(shù) 9、操作事件隊列 10、生成事件 其次給出代碼段,有利于大家對其進行學習和分析 最后進

    2024年02月06日
    瀏覽(35)
  • PyGame游戲編程

    PyGame游戲編程

    Python非常受歡迎的一個原因是它的應用領域非常廣泛,其中就包括游戲開發(fā)。而是用Python進行游戲開發(fā)的首選模塊就是PyGame。 PyGame是跨平臺Python模塊,專為電子游戲設計,包含圖像、聲音等,創(chuàng)建在SDL(Simple DirectMedia Layer)基礎上,允許實時電子游戲研發(fā)而不會被低級語言,

    2024年02月08日
    瀏覽(23)
  • 打地鼠游戲編程代碼,pygame打地鼠游戲代碼

    打地鼠游戲編程代碼,pygame打地鼠游戲代碼

    大家好,小編來為大家解答以下問題,打地鼠游戲編程代碼,pygame打地鼠游戲代碼,今天讓我們一起來看看吧! 文章目錄 0 項目簡介 1 游戲介紹 2 實現(xiàn)效果 3 開發(fā)工具 3.1 環(huán)境配置 3.2 Pygame介紹 4 具體實現(xiàn) 4.1 實現(xiàn)游戲精靈類 4.2 實現(xiàn)游戲主循環(huán) 4.3 制作簡易的游戲開始和結束

    2024年01月25日
    瀏覽(28)
  • 【pygame入門】pygame游戲實例入門級教程,如有不懂歡迎隨時補充留言。

    【pygame入門】pygame游戲實例入門級教程,如有不懂歡迎隨時補充留言。

    pycharm+anconda3; 第三方庫: pygame;(從標題看這句略顯多余) 方法一:直接在pycharm里面安裝。 files-seting-project-python Interpreter 在左側界面的最左側邊欄上面有個加號,點擊后在彈出頁面搜索需要的第三方庫,然后直接安裝。 方法二:pip安裝。 因為用的是anconda所以需要在終端里面

    2024年02月04日
    瀏覽(53)
  • 很合適新手入門使用的Python游戲開發(fā)包pygame實例教程-01[開發(fā)環(huán)境配置與第一個界面]

    很合適新手入門使用的Python游戲開發(fā)包pygame實例教程-01[開發(fā)環(huán)境配置與第一個界面]

    我們假定你已經安裝好了我們開發(fā)python程序的sublime text,如果不知道怎么安裝的可以參照我前面的博文。這里只需要解決的是配置好Pygame的問題。本篇博文主要解決開發(fā)環(huán)境配置以及第一個游戲界面的顯示問題。 文章原出處: https://blog.csdn.net/haigear/article/details/130173836 沒有

    2024年01月25日
    瀏覽(35)
  • Python游戲篇:pygame

    Python游戲篇:pygame

    pygame專門用于多媒體(如電子游戲開發(fā)),其中包含對圖像、聲音、視頻、事件、碰撞等支持, 如果想開發(fā)3D游戲,pygame就顯得力不從心了,可以看看panda3d。 pygame中的draw模塊可以在窗口上繪圖如線條、矩形、多邊形、圓、橢圓、圓弧等。 pygame中的image模塊用來加載圖片。

    2024年02月13日
    瀏覽(33)
  • Python 游戲開發(fā)與 Pygame

    第一章. Python 簡介 Python 簡介和歷史 Python 特點和優(yōu)勢 安裝 Python 第二章. 變量和數(shù)據(jù)類型 變量和標識符 基本數(shù)據(jù)類型:數(shù)字、字符串、布爾值等 字符串操作 列表、元組和字典 第三章. 控制語句和函數(shù) 分支結構:if/else 語句 循環(huán)結構:for 和 while 循環(huán) 函數(shù) 參數(shù)傳遞與返回值

    2024年04月17日
    瀏覽(25)
  • 【Python】pygame彈球游戲實現(xiàn)

    游戲源碼: pygame_os庫:

    2024年02月12日
    瀏覽(34)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包