前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Easy Games With Python and Pygame(一)- Pygame Quickstart

Easy Games With Python and Pygame(一)- Pygame Quickstart

作者头像
RiemannHypothesis
发布2022-09-26 16:08:07
1.2K0
发布2022-09-26 16:08:07
举报
文章被收录于专栏:Elixir

我正在参加掘金社区游戏创意投稿大赛个人赛,详情请看:游戏创意投稿大赛

一、Pygame Introduce

Pygame is a set of Python modules designed for writing video games. Pygame adds functionality on top of the excellent SDL library. This allows you to create fully featured games and multimedia programs in the python language.

Pygame 是一个可以用于编写游戏的Python第三方模块,可以使用Pygame在基于Python语言的基础上开发出功能齐全的多媒体程序或者游戏。

Pygame is free. Released under the LGPL licence, you can create open source, freeware, shareware, and commercial games with it. See the licence for full details.

Pygame 是开源免费的,基于LGPL协议,可以使用该模块创建开源的软件或者游戏

更多关于 Pygame 的介绍可以参考 Pygame Wiki

Install Pygame

安装 Pygame 推荐使用 pip 工具进行安装,可以在创建的虚拟环境中安装,也可以在存在多个Python版本的情况下指定Python版本安装

代码语言:javascript
复制
pip3 install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple

或者

代码语言:javascript
复制
python3 -m pip install pygame -i https://pypi.tuna.tsinghua.edu.cn/simple

这里使用了清华的镜像,安装速度更快。安装完成后可以通过在Terminal中输入以下该命令检查 Pygame 是否正确安装

代码语言:javascript
复制
python3 -m pygame.examples.aliens
pygame.gif
pygame.gif

更多Examples请查看 pygame.examples

也可以使用 pip3 list 查看安装的第三方包是否包含了 Pygame

二、Pygame Quickstart

Quickstart

普通的python程序是通过控制台进行输入和输出,而pygame是通过图形和文本绘制一个单独的窗口,在窗口中显示内容,可以对窗口大小颜色自定义,可以在窗口中绘制任何图形,通过调用pygame中的事件event,既键盘和鼠标的输入来对窗口内容进行操作

使用 Pygame 绘制图形需要以下几步

  1. 导入Pygame模块
  2. Pygame初始化
  3. 定义窗口显示的内容
  4. 定义窗口
  5. 创建并将内容填充到窗口中
  6. 刷新显示 创建pygame_quickstart.py脚本
代码语言:javascript
复制
import pygame
from pygame.locals import *

pygame.init()

# 这里使用了自定义的中文字体,需要将该字体放入脚本同级目录下
cust_font = pygame.font.Font('GongFanNuFangTi.ttf', 60)
# RGB表示颜色,这里是一个元组
font_color = (255, 255, 255)
bg_color = (120, 120, 255)
text_bg = cust_font.render('上海加油,早日战胜疫情', True, font_color)

cust_window = pygame.display.set_mode((600, 500))

cust_window.fill(bg_color)
cust_window.blit(text_bg, (150, 200))

pygame.display.update()

运行这段程序,控制台没有任何报错,但是也没有图形界面显示

image.png
image.png

这是因为代码执行结束后窗口会快速关闭,所以可以通过加入while循环来保持程序运行一段时间,并且通过监听键盘事件来终止程序

代码语言:javascript
复制
import sys

# 中间代码保持不变

while True:
    for event in pygame.event.get():
        # Q键、删除键、ESC键终止程序
        if event.type in (QUIT, KEYDOWN, K_ESCAPE):
            sys.exit()

    cust_window.fill(bg_color)
    cust_window.blit(text_bg, (100, 100))
    pygame.display.update()

再次运行

image.png
image.png

会出现一个自定义的窗口以及自定义的文字

三、Font 类

实例化 Font 对象

普通Python程序中输出的字体是以系统字体为准,当然你可以从IDE中设置控制台字体样式,但是在pygame中存在pygame.font.Font对象,通过两个参数既可以实例化一个Font对象,这两个参数分别为字体样式和大小

代码语言:javascript
复制
import pygame
from pygame.locals import *

pygame.init()

cust_font = pygame.font.Font('GongFanNuFangTi.ttf', 60)
print('cust_font的变量的类型是:{}'.format(type(cust_font)))
image.png
image.png

想要自定义字体样式需要,将字体下载到本地,Font实例化第一个参数填入自定义字体样式的地址即可

render() 方法渲染一个 Font 对象

Font对象中包含了render()方法,该方法包含了四个参数,其中三个必填参数,一个可选参数

代码语言:javascript
复制
text_bg = cust_font.render('上海加油,早日战胜疫情', True, font_color)
image.png
image.png

text:要渲染的文本内容,str类型 antialias:是否抗锯齿,布尔类型 color:字体颜色,元组类型 background:背景,可选参数,默认为None

antialias抗锯齿会使得文本看上去更加平滑一些,修改antialias参数为False,执行pygame_quickstart程序

image.png
image.png

render()方法返回一个Surface类,这个Surface类就是承载文本内容的窗口

四、Surface 类

set_mode()函数返回一个pygame.Surface对象,Surface对象就是显示内容的窗口,相当于把Python程序的输出目的地从控制台变为Surface窗口。

代码语言:javascript
复制
cust_window = pygame.display.set_mode((1000, 500))
print('cust_window变量的类型是:{}'.format(type(cust_window)))

while True:
    for event in pygame.event.get():
        # print("所有event的类型", event.type)
        # Q键、删除键、ESC键终止程序
        if event.type in (QUIT, KEYDOWN, K_ESCAPE):
            sys.exit()

    cust_window.fill(bg_color)
    cust_window.blit(text_bg, (150, 200))
    pygame.display.update()
image.png
image.png

Surface对象可以调用fill()方法既清除屏幕填充颜色,bilt()方法既进行绘制图形,只不过在上述的代码中是显示一个文本,该方法返回一个Rect类,还可以调用bilts()绘制多个图形,返回Rect类列表。

需要了解的是Pygame库中存在多个Surface类

image.png
image.png

并且pygame.Surface和pygame.SurfaceType类是相等的,fill()、bilt()等方法的注释可以在SurfaceType类中看到

image.png
image.png

五、Rect 类

在pygame下的draw模块是用来绘制图形的,比如矩形、圆形、椭圆、线条等

image.png
image.png

所有这些方法都会返回Rect类,并且这些方法都需要输入一个Surface对象作为参数还有其他一些参数比如位置、坐标、颜色等。

Rect 类表示特定大小和位置的矩形区域,使用该类可以设置窗口中对象的位置

image.png
image.png

Surface对象的get_rect()方法可以返回一个Rect类

绘制线条

绘制线条需要调用pygame.draw.line()函数,该函数要求传入五个参数,其中线条的宽度默认为1

image.png
image.png
代码语言:javascript
复制
# module name pygame_draw_line
import sys
import pygame
from pygame.locals import *

# 初始化
pygame.init()
# 创建窗口
win_size = (1000, 500)
win = pygame.display.set_mode(win_size)
# 设置窗口标题
pygame.display.set_caption('线条的绘制')
bg_color = (120, 120, 255)

while True:
    # 设置关闭窗口条件
    for event in pygame.event.get():
        if event.type in (QUIT, KEYDOWN):
            sys.exit()

    win.fill(bg_color)

    '''开始绘制线条'''
    # 线条颜色
    color = (100, 255, 200)
    # 线条宽度
    width = 5
    # 起点坐标
    start = (400, 100)
    # 终点坐标
    end = (600, 400)
    # 绘制线条
    line_type = pygame.draw.line(win, color, start, end, width)
    print(type(line_type))
    '''结束绘制线条'''

    # 刷新显示
    pygame.display.update()
image.png
image.png
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-04-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Pygame Introduce
    • Install Pygame
    • 二、Pygame Quickstart
      • Quickstart
      • 三、Font 类
        • 实例化 Font 对象
          • render() 方法渲染一个 Font 对象
          • 四、Surface 类
          • 五、Rect 类
            • 绘制线条
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档