pygame模块介绍

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()

你可能感兴趣的:(#,Python小知识)