pygame模块介绍

pygame模块介绍

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

模块作用
cdrom管理cdrom设备和音频播放
cursors加载光标图像,包括标准光标
display控制显示窗口或屏幕
draw在surface上画简单形状
event管理事件和事件队列
font创建并呈现Truetype字体
image保存和加载图像
joystick管理控制杆装置
key管理键盘
mouse管理鼠标
moviempeg电影播放
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()

  • 17
    点赞
  • 134
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值