15. python从入门到精通——Pygame游戏编程

这篇具有很好参考价值的文章主要介绍了15. python从入门到精通——Pygame游戏编程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

游戏的原理

安装Pygame

Pygame常用模块

Pygame的基本使用     

实例:制作一个跳跃的小球游戏,如果碰到窗口边缘会改变小球移动方向

实现步骤:

 运行效果:

小球图片:    

 python代码:

开发Flappy Bird游戏

游戏简介:

运行效果:

图片素材

游戏分析 

以面向对象的思维方式来分析一下这个游戏可以归纳为两个对象

小鸟:

管道:

碰撞检测:

实现步骤

python代码


游戏的原理

        窗口:游戏中也有窗口的概念,游戏中的角色都需要再窗口中显示

        资源:是指游戏中的背景、角色、声音等 

        坐标:在Pygame中有横轴和纵轴。例如在植物大战僵尸中不断修改僵尸的坐标可以实现动画效果

                注意:Pygame中坐标0,0在创建窗口的左上角,向右则X坐标越大;向下则Y坐标越大

        运行流程:在python中程序是由上至下执行的,执行完就结束了游戏窗口随之关闭。为了能够让窗口一直显示需要设置一个死循环,可以用while True 语句实现。当执行地一边的时候在窗口中添加背景图片、角色,第二遍同样添加背景图片但是每次循环更新角色坐标。当频率到至少24次每秒我们肉眼就只会感觉到画面和角色是一直存在的从而实现了动画效果

安装Pygame

Pygame:是python中的模块,专用于二D游戏开发,要使用它需要先安装它

安装命令:pip install pygame

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

Pygame常用模块

Pygame官网

优势:Pygame做游戏开发的优势在于不需要过多考虑与底层开发相关的内容,而可 以把工作重心放在游戏逻辑上。

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

管理矩形区域

pygame.sndarray

操作声音数据

pygame.sprite

操作移动图像

pygame.surface

管理图像和屏幕

pygame.surfarray

管理点阵图像数据

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

更新部分内容显示到屏幕上,如果没有参数,则与flip功能相同

3. Surface对象的常用方法

方法名

功能

pygame.Surface.blit

将一个图像画到另一个图像上

pygame. Surface.convert

转换图像的像素格式

pygame.Surface.convert_alpha

转化图像的像素格式,包含alpha通道的转换

pygame. Surface.f ill

使用颜色填充Surface

pygame. Surface.get_rect

获取Surface的矩形区域

示例:创建窗口流程,也是大部分创建Pygame的流程


import sys  # 导入sys模块
import pygame  # 导入pygame模块

pygame.init()  # 初始化pygame,检查游戏需要的一些硬件调用接口、系统功能接口是否有问题
size = width, height = 640, 480  # 设置窗口大小
screen = pygame.display.set_mode(size)  # 显示窗口但是执行完程序就会关闭窗口

while True:
# 获取所有的事件,例如点击窗口的时间、按下键盘的事件。由于事件的类型很多,程序不知道发生了哪一类事件所以需要不断的循环判断
    for event in pygame.event.get():
        if event.type == pygame.QUIT:  # 如果点击关闭窗口,则退出
            pygame.quit()  # 退出pygame
            sys.exit() #推出系统

Pygame的基本使用     

实例:制作一个跳跃的小球游戏,如果碰到窗口边缘会改变小球移动方向

实现步骤:

        创建窗口→添加小球→移动小球→检测碰撞   

 运行效果:

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  # 设置窗口,这是一个数组
screen = pygame.display.set_mode(size)  # 显示窗口
color = (0, 0, 0)  # 设置颜色

ball = pygame.image.load("ball.png")  # 加载图片
ballrect = ball.get_rect()  # 根据图片大小获取矩形区域

speed = [5, 5]  # 设置移动的X轴、Y轴距离
clock = pygame.time.Clock()  # 创建时钟对象
# 执行死循环,确保窗口一直显示
while True:
    clock.tick(240)  # 每秒执行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)  # 此函数是将图片推送到窗口上,第一个参数为图片第二个参数为图片位置
    pygame.display.flip()  # 更新全部显示


开发Flappy Bird游戏

游戏简介:

当点击屏幕的时候小鸟就往上飞,再次点击小鸟再次往上飞,当不点击时小鸟会以更快速度降落。我们需要控制小鸟

我们需要控制小鸟通过各种各样的管道,当我们穿过一组管道时就会得一分,如果在飞行过程中碰到了管道那么小鸟状态变为灰色掉在地上,游戏结束并且显示一个总的分数

运行效果:

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

游戏分析 

以面向对象的思维方式来分析一下这个游戏可以归纳为两个对象

小鸟:

        属性:

                小鸟的生命状态

                        活着:颜色为黄色

                        死亡:颜色为灰色

                坐标位置

                        X轴坐标

                        Y轴坐标(变化)

                是否跳跃

                        上升高度

                        坠落高度

        方法

                跳跃

                坠落

管道:

        方法:向左移动

碰撞检测:

        小鸟碰到上下管道

        小鸟碰到上下边界

实现步骤

搭建主框架

创建小鸟类

创建管道类

计算得分

碰撞检测文章来源地址https://www.toymoban.com/news/detail-662106.html

python代码

import pygame
import sys
import random


class Bird(object):
    """定义一个鸟类"""

    def __init__(self):
        """定义初始化方法"""
        # 鸟的矩形有四个参数:前两个是小鸟矩形左上角的坐标点,后两个是矩形的长宽
        self.birdRect = pygame.Rect(65, 50, 50, 50)
        # 定义鸟的3种状态图片列表:向上飞、向下坠、死亡
        self.birdStatus = [pygame.image.load("assets/1.png"),
                           pygame.image.load("assets/2.png"),
                           pygame.image.load("assets/dead.png")]
        self.status = 0  # 默认飞行状态
        self.birdX = 120  # 鸟所在X轴坐标,即是向右飞行的速度
        self.birdY = 350  # 鸟所在Y轴坐标,即上下飞行高度
        self.jump = False  # 默认情况小鸟自动降落
        self.jumpSpeed = 10  # 跳跃高度
        self.gravity = 5  # 重力
        self.dead = False  # 默认小鸟生命状态为活着

    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轴坐标递减,即管道向左移动
        # 当管道运行到一定位置,即小鸟飞越管道,分数加1,并且重置管道
        if self.wallx < -80: #管道宽度为94,当管道快移除屏幕时重置管道位置
            global score #设置得分加1并声明为全局变量
            score += 1
            self.wallx = 400


def createMap():
    """定义创建地图的方法"""
    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:  # 撞管道状态
        Bird.status = 2
    elif Bird.jump:  # 起飞状态
        Bird.status = 1
    screen.blit(Bird.birdStatus[Bird.status], (Bird.birdX, Bird.birdY))  # 设置小鸟的坐标
    Bird.birdUpdate()  # 鸟移动

    # 显示分数
     #font.render()用于显示字体有三个参数:字符串、是否平滑、颜色
    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)  # 每秒执行60次
        # 轮询事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
            # 如果触发键盘和鼠标事件并且小鸟状态不是死亡则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():  # 检测小鸟生命状态
            getResutl()  # 如果小鸟死亡,显示游戏总分数
        else:
            createMap()  # 创建地图


到了这里,关于15. python从入门到精通——Pygame游戏编程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python游戏入门 武装飞船1-创建Pygame窗口

    C++入门练习1 运行结果-这是C++编程 //非常基础的练习,用于熟悉编程用语#include iostreamusing namespace std;int main(){ co   C++入门练习2 运行结果-a+b=c //非常基础的练习,用于熟悉编程用语#include iostreamusing namespace std; int main(){ i   绿盟一面-Java 面试其实也就一面,前两天刚面完,两个

    2024年02月01日
    浏览(47)
  • 强化学习Agent系列(一)——PyGame游戏编程,Python 贪吃蛇制作实战教学

    大家好,未来的开发者们请上座 随着人工智能的发展,强化学习基本会再次来到人们眼前,遂想制作一下相关的教程。强化学习第一步基本离不开虚拟环境的搭建,下面用大家耳熟能详的贪吃蛇游戏为基础,制作一个Agent,完成对这个游戏的绝杀。 万里长城第一步:用pytho

    2024年01月21日
    浏览(51)
  • Pygame事件处理机制简介-慕课的python游戏开发入门02

    目录 首先解释几个问题: 1、事件处理需求主要有以下几个方面: 2、Pygame事件队列 3、Pygame事件 4、事件类型及属性  5、事件处理的重要函数  6、键盘事件 7、鼠标事件 8、处理事件函数 9、操作事件队列 10、生成事件 其次给出代码段,有利于大家对其进行学习和分析 最后进

    2024年02月06日
    浏览(67)
  • PyGame游戏编程

    Python非常受欢迎的一个原因是它的应用领域非常广泛,其中就包括游戏开发。而是用Python进行游戏开发的首选模块就是PyGame。 PyGame是跨平台Python模块,专为电子游戏设计,包含图像、声音等,创建在SDL(Simple DirectMedia Layer)基础上,允许实时电子游戏研发而不会被低级语言,

    2024年02月08日
    浏览(34)
  • 打地鼠游戏编程代码,pygame打地鼠游戏代码

    大家好,小编来为大家解答以下问题,打地鼠游戏编程代码,pygame打地鼠游戏代码,今天让我们一起来看看吧! 文章目录 0 项目简介 1 游戏介绍 2 实现效果 3 开发工具 3.1 环境配置 3.2 Pygame介绍 4 具体实现 4.1 实现游戏精灵类 4.2 实现游戏主循环 4.3 制作简易的游戏开始和结束

    2024年01月25日
    浏览(33)
  • 【pygame入门】pygame游戏实例入门级教程,如有不懂欢迎随时补充留言。

    pycharm+anconda3; 第三方库: pygame;(从标题看这句略显多余) 方法一:直接在pycharm里面安装。 files-seting-project-python Interpreter 在左侧界面的最左侧边栏上面有个加号,点击后在弹出页面搜索需要的第三方库,然后直接安装。 方法二:pip安装。 因为用的是anconda所以需要在终端里面

    2024年02月04日
    浏览(40)
  • 很合适新手入门使用的Python游戏开发包pygame实例教程-01[开发环境配置与第一个界面]

    我们假定你已经安装好了我们开发python程序的sublime text,如果不知道怎么安装的可以参照我前面的博文。这里只需要解决的是配置好Pygame的问题。本篇博文主要解决开发环境配置以及第一个游戏界面的显示问题。 文章原出处: https://blog.csdn.net/haigear/article/details/130173836 没有

    2024年01月25日
    浏览(84)
  • Python游戏篇:pygame

    pygame专门用于多媒体(如电子游戏开发),其中包含对图像、声音、视频、事件、碰撞等支持, 如果想开发3D游戏,pygame就显得力不从心了,可以看看panda3d。 pygame中的draw模块可以在窗口上绘图如线条、矩形、多边形、圆、椭圆、圆弧等。 pygame中的image模块用来加载图片。

    2024年02月13日
    浏览(39)
  • 【Python】pygame弹球游戏实现

    游戏源码: pygame_os库:

    2024年02月12日
    浏览(55)
  • Python 游戏开发与 Pygame

    第一章. Python 简介 Python 简介和历史 Python 特点和优势 安装 Python 第二章. 变量和数据类型 变量和标识符 基本数据类型:数字、字符串、布尔值等 字符串操作 列表、元组和字典 第三章. 控制语句和函数 分支结构:if/else 语句 循环结构:for 和 while 循环 函数 参数传递与返回值

    2024年04月17日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包