Python的Pygame游戏框架(汇总)

这篇具有很好参考价值的文章主要介绍了Python的Pygame游戏框架(汇总)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、前言

  • 个人主页: ζ小菜鸡
  • 大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习Python的Pygame游戏框架。
  • 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)

二、初识pygame

  pygame是跨平台Python模块,专为电子游戏设置,包含图像、声音。创建在SDL(Simple Direct Medica Layer)基础上,允许实时电子游戏研发而无须被如C语言或汇编语言约束,基于这样一个设想,所有需要的游戏功能和理念都(主要是图像方面)完全简化为游戏逻辑本身,所有的资源结构都可以由Python提供。

1.安装pygame

  pygame的官方网址是www.pygame.org。在该网址中可以查找pygame的相关文档。pygame的安装非常简单,只需要如下一行命令:

pip install pygame

  运行结果如下所示:

Python的Pygame游戏框架(汇总)

  接下来,检测一下pygame是否安装成功。打开IDLE,输入如下命令:

import pygame
pygame.ver

  如果运行如下图示,则说明安装成功了。

Python的Pygame游戏框架(汇总)


2.pygame 常用模块

  用pygame做游戏开发的优势在于不需要过多地考虑底层相关的内容,而可以把工作的重心放在游戏逻辑上。例如,pygame中集成了很多和底层相关的模块,如访问显示设备、管理事件、使用字体等。pygame的常用模块如下表所示:

模块名称 功能
pygame.cdrom 访问光驱
pygame.cursors 加载光标
pygame.display 访问显示设备
pygame.draw 绘制形状、线和点
pygame.event 管理事件
pygame.font 使用字体
pygame.image 加和存储图片
pygame.joystick 使用游戏手柄或类似的东西
pygame.key 读取键盘按键
pygame.mixer 声音
pygame.mouse 鼠标
pygame.movie 播放视频
pygame.overlay 访问高级视频叠加
pygame.rect 管理矩形区域
pygame.sndarray 操作声音数据
pygame.sprite 操作移动图像
pygame.surface 管理图像和屏幕
pygame.surfarray 管理点阵图像数据
pygame.time 管理时间和帧信息
pygame.transform 缩放和移动图像

  下面,使用pygame的display模块和event模块创建一个pygame窗口,代码如下:

# -*- coding: utf-8 -*-
import sys  # 导入sys模块
import pygame  # 导入pygame模块

pygame.init()  # 初始化pygame模块
size = width, height = 320, 240  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口

# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    for event in pygame.event.get():  # 遍历所有事件
        if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出
            sys.exit()

pygame.quit()  # 退出pygame

  运行结果如下图所示:

Python的Pygame游戏框架(汇总)


二、Pygame 的基础使用

  pygame 有很多模块,每个模块又有很多方法,在此不能逐一讲解,所以,我们通过一个实例来学习pygame,然后再分解代码,讲解代码中的模块。

  示例:制作一个跳跃的兔子游戏

  创建一个游戏窗口,然后在窗口内创建一个小球。以一定的速度移动小球,当小球碰到游戏窗口的边缘时,小球弹回,继续移动。可以按照如下步骤实现该功能:

  (1)创建一个游戏窗口,宽和高设置为640*480。代码如下:

'''
csdn作者:ζ小菜鸡
'''

# _*_ coding:utf-8 _*_

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

pygame.init()  # 初始化pygame
size = width, height = 640, 480  # 设置窗口
screen = pygame.display.set_mode(size)  # 显示窗口

  上述代码中,首先导入pygame模块,然后调用init()方法初始化pygame模块。接下来,设置窗口的宽和高,最后使用display模块的常用方法如下表所示:

方法名称 功能
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功能相同

  (2)运行上述代码,会出现一个一闪而过的黑色窗口,这是因为程序执行完成后,会自动关闭。如果让窗口一直显示,需要使用while True语句让程序一直执行,此外,还需要设置关闭按钮,具体代码如下:

'''
csdn作者:ζ小菜鸡
'''

# _*_ coding:utf-8 _*_

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:  # 如果单击关闭窗口,则退出
            sys.exit()

pygame.quit()  # 退出pygame

  上述代码中,添加了轮询事件检测。pygame.event.get()方法能够获取事件队列,使用for…in语句遍历事件,然后根据type属性判断事件类型。这里事件处理方式与GUI类似,如果event.type等于pygame.QUIT,表示检测到关闭pygame窗口事件;pygame.KEYDOWN表示键盘按下事件,pygame.MOUSEBUTTONDOWN表示鼠标按下事件。


  (3)在窗口中添加小兔子。先准备好一张ball.png图片,然后加载该图片,然后加载该图片,最后将图片显示在窗口中,具体代码如下:

'''
csdn作者:ζ小菜鸡
'''

# _*_ coding:utf-8 _*_

import sys  # 导入模块sys
import pygame  # 导入模块pygame
from pygame.locals import *

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

ball = pygame.image.load("ball.png")  # 加载图片
space = pygame.transform.smoothscale(ball, (100, 100))
ballrect = space.get_rect()  # 获取矩形区域

myfont = pygame.font.Font(None, 60)
textImage = myfont.render("小兔子游戏", True, color)

# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    for event in pygame.event.get():  # 遍历所有事件
        if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出
            sys.exit()
    screen.fill(color)  # 填充颜色
    screen.blit(space, ballrect)  # 将图片画到窗口上
    pygame.display.flip()  # 更新全部窗口

pygame.quit()  # 退出pygame

  上述代码中使用image模块的load()方法加载图片,将返回值ball是一个Surface对象。Surface是用来代表图片的Pygame对象,可以对一个Surface对象进行涂画、变形、复制等各种操作。事实上,屏幕也只是一个Surface,pygame.display.set_mode就返回了一个屏幕Surface对象。如果将ball这个Surface对象画到screen Surface对象。需要使用blit()方法,最后使用display模块的flip方法更新整个待显示的Surface对象到屏幕上。 对象的常用方法如表所示:

方法名称 功能
pygame.Surface.blit 将一个图像画到另外一个图像上
pygame.Surface.convent 转换图像的像素格式
pygame.Surface.convent_alpha 转化图像的像素格式,包含alpha通道的转换
pygame.Surface.fill 使颜色填充Surface
pygame.Surface.get_rect 获取Surface的矩形区域

  运行上述代码,结果如下图所示:

Python的Pygame游戏框架(汇总)


  (4)下面该让小兔子动起来了。ball.get_rect()方法返回值ballrect是一个Rect对象,该对象有一个move()方法可以使用移动矩形。move(x,y)函数有两个参数:第一参数是x轴移动距离;第二个参数是y轴移动距离。窗口左上角坐标为(0,0),如果使用move(100,50),如图所示:

Python的Pygame游戏框架(汇总)
  为了实现小兔子不停的移动,将move()函数加到while循环中,具体代码如下:

'''
csdn作者:ζ小菜鸡
'''

# _*_ coding:utf-8 _*_

import sys  # 导入模块sys
import pygame  # 导入模块pygame
from pygame.locals import *

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

ball = pygame.image.load("ball.png")  # 加载图片
space = pygame.transform.smoothscale(ball, (100, 100))
ballrect = space.get_rect()  # 获取矩形区域

myfont = pygame.font.Font(None, 60)
textImage = myfont.render("小兔子游戏", True, color)
speed = [5, 5]  # 设置x轴,y轴

# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    for event in pygame.event.get():  # 遍历所有事件
        if event.type == pygame.QUIT:  # 如果单击关闭窗口,则退出
            sys.exit()
    ballrect = ballrect.move(speed)  # 移动小兔子
    screen.fill(color)  # 填充颜色
    screen.blit(space, ballrect)  # 将图片画到窗口上
    pygame.display.flip()  # 更新全部窗口

pygame.quit()  # 退出pygame


  (5)运行上述代码,发现小兔子在屏幕中一闪而过,此时,小兔子并没有消失,而是移动到窗口之外,此时添加碰撞检测功能。当小兔子与窗体任何一边缘发生碰撞,则更改小兔子的移动方向。具体代码如下:

'''
csdn作者:ζ小菜鸡
'''

# _*_ coding:utf-8 _*_

import sys  # 导入模块sys
import pygame  # 导入模块pygame
from pygame.locals import *

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

ball = pygame.image.load("ball.png")  # 加载图片
space = pygame.transform.smoothscale(ball, (100, 100))
ballrect = space.get_rect()  # 获取矩形区域

myfont = pygame.font.Font(None, 60)
textImage = myfont.render("小兔子游戏", True, color)
speed = [5, 5]  # 设置x轴,y轴

# 执行死循环,确保窗口一直显示
while True:
    # 检查事件
    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(space, ballrect)  # 将图片画到窗口上
    pygame.display.flip()  # 更新全部窗口

pygame.quit()  # 退出pygame

  上述代码中,添加了碰撞检测功能。如果碰撞到左右边缘,更改x轴数据为负数;如果碰撞到上下边缘,更改y轴数据为负数,则运行结果如下图:

Python的Pygame游戏框架(汇总)


  (6)运行上述代码,发现好像有多个小兔子在飞快的移动,这是因为代码事件非常短,导致肉眼观察出现错觉,因此需要添加一个“时钟”来控制运行的时间。这时需要使用pygame的time模块。使用pygame时钟之前,必须创建Clock对象的一个实例,然后在While循环中设置多长时间运行一次。具体代码如下:

'''
csdn作者:ζ小菜鸡
'''

# _*_ 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")  # 加载图片
space = pygame.transform.smoothscale(ball, (100, 100))

ballrect = space.get_rect()  # 获取矩形区域

myfont = pygame.font.Font(None, 60)
textImage = myfont.render("小兔子游戏", True, color)
speed = [5, 5]  # 设置x轴,y轴
clock = pygame.time.Clock()  # 设置时钟

# 执行死循环,确保窗口一直显示
while True:
    clock.tick(60)  # 每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(space, ballrect)  # 将图片画到窗口上
    pygame.display.flip()  # 更新全部窗口

pygame.quit()  # 退出pygame


三、手写小游戏源码下载

  1. Game53.嗷大喵快跑代码
  2. Game60.冒险岛
  3. Game71. 超级玛丽

  Python的Pygame游戏框架(汇总),到此就结束了,感谢大家阅读,如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)文章来源地址https://www.toymoban.com/news/detail-483491.html


到了这里,关于Python的Pygame游戏框架(汇总)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • html实现好看的个人介绍,个人主页模板5(附源码)

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131273315 html实现好看的个人介绍,个人主页模板5(附源码) ,第五种风格,html源码下载,响应式布局,动态展示数据效果,界面整洁,布局清晰。 代码备注详细,可在此基础上更加完善功能,打造属于自己的个人

    2024年02月09日
    浏览(84)
  • 23.实战演练--个人主页

    2024年01月19日
    浏览(54)
  • 制作github个人主页

    github创建一个项目命名为.github.io git clone一个他人的主页作为模板 按情况修改readme.md, index.html中名字,邮箱,github,google scholor 如果您创建的 .github.io 仓库的 部分与您的 GitHub 用户名不一样,您需要通过 GitHub Pages 设置来指定要使用的用户名。以下是具体的步骤: 进入 .github

    2024年01月25日
    浏览(55)
  • WEB网页设计期末作业个人主页——基于HTML+CSS制作个人简介网站

    🧑个人网页设计、🙋‍♂️个人简历制作、👨‍💼简单静态HTML个人网页作品、👨‍🏭个人介绍网站模板 、等网站的设计与制作。 ⭐个人网页设计网站模板采用DIV CSS布局制作,网页作品有多个页面,如 :个人介绍(文字页面)、我的作品(图片列表)、个人技能(图文页

    2024年02月05日
    浏览(74)
  • 微信小程序--个人主页的制作

    1. 效果图: 2.页面wxml的布局逻辑 (1)代码: 3.页面wxss的设置 (1)代码: 1. 获取登录信息 (1)Userinfo:获取用户信息 (2)avatarUrl:用户头像 (3)nickName:用户昵称 (4)zh_CN:简体中文 (5)注意:这里是获取两次用户头像,因为背景也用的到头像 (6)样式的设置: 2

    2024年02月09日
    浏览(72)
  • html网页设计小作业(个人主页)

    目录 作品介绍: 效果展示 代码部分: 简易的个人网页小作业,只用了html+css 布局制作,没啥好说的,直接上图!!! Home 页面:  About页面:    Hobbies页面: Home界面: About页面:  Hobbies页面: oKK,就这么多啦。。

    2024年02月11日
    浏览(54)
  • [Android Studio] 个人主页界面的实现

    目录 接上篇:底部导航栏的实现 1.个人主页界面的设计:fragment_blank.xml 2.个人主页功能的实现类:BlankFragment.java 3.每日签到功能的实现 4.实现效果 5.图片素材  补充说明:注意配置AndroidManifest.xml文件 自定义弹窗布局文件:pop_up_signup.xml,用于显示签到成功 累计签到的天数,采

    2024年01月19日
    浏览(95)
  • 抖音web版地址个人主页和视频地址

    https://www.douyin.com/user/MS4wLjABAAAAfLsItSD2WiJrsji1g_iZv-it6W2CcvBFkdUwMjTeSD4 MS4wLjABAAAAfLsItSD2WiJrsji1g_iZv-it6W2CcvBFkdUwMjTeSD4 是 sec_uid。 https://v.douyin.com/h17aA6H https://www.iesdouyin.com/share/user/MS4wLjABAAAAfLsItSD2WiJrsji1g_iZv-it6W2CcvBFkdUwMjTeSD4 MS4wLjABAAAAfLsItSD2WiJrsji1g_iZv-it6W2CcvBFkdUwMjTeSD4 是 sec_uid。 下面的写法

    2024年04月27日
    浏览(51)
  • 详细讲解如何在github上编辑个人主页?

     在 GitHub 上编辑个人主页可以让您展示您的项目、技能和个人信息,以及与其他开发者互动。以下是详细的步骤来在 GitHub 上编辑个人主页: 如果您还没有 GitHub 账户,首先需要注册一个。 使用您的用户名和密码登录到 GitHub。 您需要创建一个特殊的仓库,仓库名必须是 用户

    2024年02月13日
    浏览(41)
  • 【Vercel】教你部署imsyy/home个人主页

    本篇博客教你如何部署一个自己的个人主页 项目地址:https://github.com/imsyy/home 本文首发于 慕雪的寒舍 首先我们点击fork,将仓库复刻到自己的账户 随后进入vercel,点击 dashboard-add new-project 选择你复刻的仓库 然后什么都不用改,直接deploy 等待部署成功,点击domains,在这里添

    2024年02月07日
    浏览(117)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包