pygame模块介绍

2023-11-07

pygame模块介绍

在python中开发游戏,通常会用到pygame这个模块,pygame模块总览:

模块 作用
cdrom 管理cdrom设备和音频播放
cursors 加载光标图像,包括标准光标
display 控制显示窗口或屏幕
draw 在surface上画简单形状
event 管理事件和事件队列
font 创建并呈现Truetype字体
image 保存和加载图像
joystick 管理控制杆装置
key 管理键盘
mouse 管理鼠标
movie mpeg电影播放
sndarray 数字处理声音
surfarray 数字处理图像
time 控制时间
transform 缩放、旋转和翻转图像

转载自:Pygame 模块简单整理

打开一个游戏窗口
  • 导入pygame:
import pygame
  • 初始化pygame:
pygame.init()
  • 创建窗口:
# set_mode((width, height)),单位是像素
screen = pygame.display.set_mode((1200, 800))
  • 设置填充颜色:

颜色值(是由计算机的三原色组成–>红、绿、蓝),简称RGB。我们能使用的所有的颜色都可以通过RGB值来表示。
RGB值的表示方式:
a. (red值, green值, blue值)值都是数字:0-255。(255, 0, 0)–>红色;(255, 255, 255)–>白色
b.十六进制的RGB值。#ff0000 --> 红色;#000000 -->黑色;#00ff00 --> 绿色

# 设置填充颜色为灰色
screen.fill((230, 230, 230))
  • 将前面的内容渲染到屏幕:

一般在游戏开发时,会把这句放到最后,以节省CPU内存。

pygame.display.flip()
  • 让窗口可以一直显示在屏幕上,直到点关闭按钮:

让窗口一直显示在桌面,需要用到循环,即让游戏循环播放在桌面上。

while Truefor event in pygame.event.get():
        if event.type == pygame.QUIT:
            exit()

进行鼠标键盘与窗口的互动
  • 打开窗口的固定格式:
import pygame

def main():
    # 初始化
    pygame.int=it()
    #创建窗口
    screen = pygame.display.set_mode((600, 400))
    
    pygame.display.flip()
  • 与键盘鼠标相关的操作:

所有与键盘鼠标相关的操作都一定要放到循环中

while True:
    # 获取事件
    for event in pygame.event.get():
        # 1.点关闭按钮对应的事件
        if event.type == pygame.QUIT:
            exit()

        # 2.鼠标按下对应的事件
        if event.type == pygame.MOUSEBUTTONDOWN:
            # 获取鼠标按下的坐标
            print(event.pos)
            print('鼠标按下')

        if event.type == pygame.MOUSEBUTTONUP:
            # 获取鼠标按下后弹起的坐标
            print(event.pos)
            print('鼠标按下弹起')

        if event.type == pygame.MOUSEMOTION:
            # 鼠标移动过程中对应的点的坐标
            # print(event.pos)
            # print('鼠标移动')
            pass

        # 3.键盘相关的事件
        if event.type == pygame.KEYDOWN:
            print(chr(event.key))
            print('键盘按钮按下')
            if chr(event.key) == 'ē':
                print('右')

        if event.type == pygame.KEYUP:
            print(chr(event.key))
            print('键盘按钮按下弹起来')

#这句话与模块首的main函数相对应,是用来测试这个模块是否被调用的。专业程序员一般都会写这个函数,用于对模块进行规范。
if __name__ == '__main__':
    main()

显示图片
  • 显示图片的固定格式:
import pygame
# 初始化
pygame.init()

# 创建窗口
screen = pygame.display.set_mode((600, 400))
print(type(screen))
screen.fill((255, 255, 255))
  • 创建一个图片对象(surface):

与后面语句配套

image = pygame.image.load('images/ship.bmp')
  • 获取图片大小:

格式:(width, height) = 图片对象.get_size()

size = image.get_size()
print(size)
  • 对图片进行缩放:

将指定的图片,变成指定大小,返回一个新的图片对象。
格式:pygame.transform.scale(图片对象, (wigth, height))

image1 = pygame.transform.scale(image, (600, 400))
  • 对图片进行旋转:

格式:pygame.transform.rotate(图片对象, 旋转角度)
角度:0-360的度数值

image2 = pygame.transform.rotate(image, 180)
  • 对图片进行旋转缩放:

格式:pygame.transform.rotozoom(图片对象, 旋转角度, 缩放倍数)

image3 = pygame.transform.rotozoom(image, 0, 2)
  • 将图片对象添加到窗口对象中:

格式:screen.blit(图片对象, 坐标)
坐标可以是图片对象的外接矩形

screen.blit(image3, (0, 0))
  • 显示在屏幕上:
# 不再是 pygame.display.flip()
pygame.display.update()

显示文字
  • 创建文字对象:

pygame.font.SysFont(系统字体名, 字体大小)
pygame.font.Font(字体文件路径, 字体大小)

font1 = pygame.font.SysFont('Times', 20)
font2 = pygame.font.Font('files/aa.ttf', 40)
  • 根据字体创建文字对象:

格式:font.render(文字, 是否平滑, 文字颜色)

title = '根据字体创建文字对象'
text = font.render(title, True, (255, 0, 0))
  • 将文字对象添加到窗口上
screen.blit(text, (100, 0))

显示图形
  • 画线:

第一种:pygame.draw.line(外观对象, 线颜色, 起点, 终点, 线宽)
第二种:pygame.draw.lines(外观对象, 线颜色, 是否闭合, 点的列表, 线宽)
第三个参数:False --> 不闭合;True --> 闭合

pygame.draw.lines(screen, (255, 0, 0), True, [(300, 50), (150, 180), (200, 120), (330, 200)], 3)
  • 画矩形:

格式:pygame.draw.rect(外观对象, color, Rect, width)
Rect:位置及大小 --> (x, y, width, height)
width:为0就会填充矩形

pygame.draw.rect(screen, (0, 255, 0), (10, 10, 200, 150), 0)
  • 画弧线:

格式:pygame.draw.arc(外观对象, 颜色, 范围, 起始角度, 终止角度, 线宽)

from math import pi
pygame.draw.arc(screen, (255, 255, 0), (10, 200, 200, 200), pi/2, pi, 3)

显示动态效果
import pygame

    def main():
        # 游戏初始化
        pygame.init()
        screen = pygame.display.set_mode((600, 400))
        screen.fill((255, 255, 255))
        pygame.display.flip()


        x = 100
        y = 100

        names = ['张三', '李四', '王五', '骆昊', '王海飞', '肖世荣']
        index = 0

        # 游戏循环
        while True:
            # 事件获取
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()


            pygame.time.delay(100)
            # screen.fill((255, 255, 255))
            pygame.draw.rect(screen, (255, 255, 0),(200, 200, 100, 50))
            # 获取文字
            font = pygame.font.Font('./files/aa.ttf', 30)
            text = font.render(names[index], True, (0, 0, 0))
            screen.blit(text, (200, 200))
            pygame.display.flip()

            # 获取下一个文字下标
            index += 1
            if index >= len(names):
                index = 0

    if __name__ == '__main__':
        main()
# 延迟操作
# delay(时间) ,时间单位是毫秒
pygame.time.delay(100)
# 覆盖之前画的内容
screen.fill((255, 255, 255))
# 画圆
pygame.draw.circle(screen, (0, 255, 0), (x, y), 50)
x += 5
y += 5
pygame.display.flip()

制作一个按钮
import pygame

    def creat_button(screen, bg_color, text_color):
        # 清空前面画的
        pygame.draw.rect(screen, (255, 255, 255), (100, 100, 150, 70))
        # 画矩形
        pygame.draw.rect(screen, bg_color,(100, 100, 150, 70))

        # 画文字
        font = pygame.font.Font('./files/aa.ttf', 30)
        text = font.render('开 始', True, text_color)
        screen.blit(text, (140, 120))

        pygame.display.flip()

    def main():
        # 游戏界面初始化
        pygame.init()
        screen = pygame.display.set_mode((600, 400))
        screen.fill((255, 255, 255))

        # 显示一个按钮
        creat_button(screen, (0, 255, 0), (100, 100, 100))

        pygame.display.flip()

        while True:
            # 获取事件
            for event in pygame.event.get():
                # 1.点关闭按钮对应的事件
                if event.type == pygame.QUIT:
                    exit()

                # 2.鼠标按下对应的事件(确定反应范围)
                if event.type == pygame.MOUSEBUTTONDOWN:
                    x, y = event.pos
                    if 100<x<100+150 and 100<y<100+70:
                        creat_button(screen, (0, 150, 0), (255, 0, 0))

                if event.type == pygame.MOUSEBUTTONUP:
                    creat_button(screen, (0, 255, 0), (100, 100, 100))

                if event.type == pygame.MOUSEMOTION:
                    # 鼠标移动过程中对应的点的坐标
                    # print(event.pos)
                    # print('鼠标移动')
                    pass


    if __name__ == '__main__':
        main()

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

pygame模块介绍 的相关文章

随机推荐

  • 使用vim编写并编译运行C++程序并添加代码补全等功能

    听说使用vim写程序效率非常高 今天满怀一腔热血准备把vim整利索了 写篇笔记记录一下防止以后忘了 vim功能很多 我也只能是解决我现在的需求 以后遇到更多的需求再扩充 如果读者有什么建议和问题欢迎留言讨论 vim 编写一个C 程序并保存
  • Java中实现文件上传下载的三种解决方案(推荐)

    前言 文件上传是一个老生常谈的话题了 在文件相对比较小的情况下 可以直接把文件转化为字节流上传到服务器 但在文件比较大的情况下 用普通的方式进行上传 这可不是一个好的办法 毕竟很少有人会忍受 当文件上传到一半中断后 继续上传却只能重头开始上
  • 我的 2020 总结:跌宕起伏

    文章目录 复盘与展望 复盘与展望 2020总结 2021计划 个人 生理健康 55kg前半年熬夜较多眼睛干涩 眼睑有障碍 经常热敷毛巾 蒸汽眼罩滴眼药水 坚持锻炼 俯卧撑 开合跳 心理健康 6月份左右申请过劳动仲裁 迟迟拿不到钱比较着急 找
  • 初步学习MapReduce编程——编程实现文件合并和去重操作

    对于两个输入文件 即文件A和文件B 编写MapReduce程序 对两个文件进行合并 并剔除其中重复的内容 得到一个新的输出文件C 数据放TXT文件时 不能多出数据外的空行光标 不然运行程序时会显示错误 For input string 直接
  • From System Services Freezing to System Server Shutdown in Android: All You Need ....阅读报告

    From System Services Freezing to System Server Shutdown in Android All You Need Is a Loop in an App 阅读笔记 概述 这篇文章从安卓系统进程S
  • angular指令和管道_Angular单元测试开发人员指南—第2部分(服务,管道,指令)

    angular指令和管道 Explore how to write test cases for shared services Http services pipes and attribute directives in Angular
  • SpringBoot常用注解

    实体类常用注解 Data 注在类上 提供类的get set equals hashCode canEqual toString方法 AllArgsConstructor 注在类上 提供类的全参构造 NoArgsConstructor 注在类
  • Linux基础命令-date设置时间

    Linux基础命令 history历史记录 文章目录 前言 一 date命令的介绍 二 语法及参数 2 1 用help或man查看语法 2 2 常用参数 三 参考实例 3 1 以默认格式输出系统当前的时间和日期 3 2 按照 年 月 日 的
  • 深入理解Java中的自增

    引言 i 和 i的区别在学习程序设计的时候应该就已经学过 一个是用完再加 一个是加完再用 那么考虑一下下面的代码 int i 0 for int j 0 j lt 100 j i i 这个运行完 i的值应该是多少呢 深入理解自增 上面的代码
  • Java基础语法教学视频,MySql知识体系总结(SQL优化篇

    备注 因为mysql优化器的缘故 与索引顺序不一致 也会触发索引 但实际项目中尽量顺序一致 5 联合索引 但其中一个条件是 gt 6 联合索引 order by where和order by一起使用时 不要跨索引列使用 三 单表sql优化
  • LDO低压差线性稳压器

    LDO 转自 http baike baidu com view 1042146 htm 百科名片 LDO是low dropout regulator 意为低压差线性稳压器 是相对于传统的线性稳压器来说的 传统的线性稳压器 如78xx系列的
  • 元宇宙产业委一届二次全会召开 同步举办共享大会和全球元宇宙大会

    2022全球元宇宙大会 上海站将于8月18 19日在沪召开 央链直播快讯 2022年8月18 19日 由中国移动通信联合会主办 上海市通信管理局联合主办 众视Tech 中移联会展部 中国移动通信联合会元宇宙产业委员会承办 BIC EURON
  • Aop反射机制实现某个参数值 修改

    项目中使用敏感字段的加解密 但是有的是直接在url中拼接的 所以我就想根据一个自定义注解的方式做匹配 修改值 利用反射的机制实现值的修改 以下是具体的代码 依赖aop
  • VSCode顶端文件名多行显示

    VScode默认顶端一行显示所有打开的文件名 1 直接在设置中搜索 多行 在 Workbench Editor Wrap Tabs 前选中即可 2 也可用快捷键 Ctrl P 查看最近浏览文件记录
  • 2023华为od机试 Python 实现【德州扑克】

    前言 本题使用Python解答 如果需要Java代码 请参考 链接 题目 我们可以选择五张牌 它们的范围是 每张牌的大小在2 10之间 或者字母J Q K A 牌花色为红桃 黑桃 梅花 方块四种花色之一 现在一共有6种牌型 牌型1 同花顺
  • 运维体系框架标准化模型简介

    为什么要做标准化 标准化的过程实际上就是对运维对象的识别和建模过程 形成统一的对象模型后 各方在统一的认识下展开有效协作 然后针对不同的运维对象 再抽取出它们所对应的运维场景 接下来才是运维场景的自动化实现 这有点像我们学的面向对象编程的思
  • Fabric.js

    Fabric js是什么 Fabric js 是一个简化HTML5 Canvas开发的Javascript库 Fabric js提供了HTML5 Canvas本身缺失的对象模型 交互层 SVG解析器以及其他一整套工具 它是一个完全开源的项目
  • C中的预编译宏定义

    C中的预编译宏定义 作者 infobillows 发表日期 2007 09 15 21 34 点击数 1507 在将一个C源程序转换为可执行程序的过程中 编译预处理是最初的步骤 这一步骤是由预处理器 preprocessor 来完成的 在源
  • 根据文字长度,设置文字滚动的速度

    div class tips box span class scroll text span div 根据文字长度设置中文滚动时间 const animateTextlength this conference importantInfo
  • pygame模块介绍

    pygame模块介绍 在python中开发游戏 通常会用到pygame这个模块 pygame模块总览 模块 作用 cdrom 管理cdrom设备和音频播放 cursors 加载光标图像 包括标准光标 display 控制显示窗口或屏幕 dr