2018-09-04pygame

01-recode

  • 1.json数据
    标准格式:a.只能是一个数据 b.数据必须是json支持的类型
    数据类型:对象(字典),数组(列表),字符串(双引号),数字,布尔(true,false),null
    json数据和python之间的转换关系
    python模块中的方法:load,loads,dump,dumps
  • 2.异常捕获
    try - except - finally
  • 3.第三方库导入
    import 模块
    from 模块 import 内容

02-pygame操作

import pygame

if __name__ == '__main__':
    # 1.初始化游戏模块
    pygame.init()
    # 2.创建游戏窗口
    '''
    display.set_mode(窗口大小):创建一个窗口并且返回
    窗口大小:是一个元组,并且表示宽度和高度(单位是像素)
    '''
    window = pygame.display.set_mode((500,600))

    # 3.让游戏一直运行,直到点关闭按钮结束
    flag = True
    while flag:
        window.fill((255,255,255))
        # 获取游戏过程中产生的所有事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                # exit()   # 退出程序
                flag = False

03-显示图片

  • 给窗口填充颜色
    颜色:计算机的三原色(红,绿,蓝),颜色对应的范围分别是0-255,可以通过改变三原色的值,调配出不同的颜色
    颜色值:是一个元组,元组中有三个元素,分别是红绿蓝(rgb)
    红色(255,0,0),绿色(0,255,0),蓝色(0,0,255)
    黑色(0,0,0),白色(255,255,255)
    window.fill((255,255,255))
  • 显示图片
    image.load(图片路径):获取本地的一张图片,返回图片对象
  • a.获取图片,创建图片对象
    image = pygame.image.load('./files/gjl.jpg')
    get_size():获取大小,返回值是一个元组,分别是宽和高
    image_width,image_height =image.get_size()
  • b.渲染图片(将图片画在纸上)
    blit(渲染对象,位置)
    位置:坐标(x,y),值的类型是元组,元组有两个对应的元素,分别是x,y的坐标
# window.blit(image,(600-int(image_width),400-int(image_height)))将图片放到右下角
    window.blit(image,(0,0))
    # c.展示内容(将纸贴在画框上)
    pygame.display.flip()

04-形变

a.缩放
transform.scale(缩放对象,目标大小):将指定的对象缩放到指定的大小,会返回缩放后的对象
new_image = pygame.transform.scale(image())
b.旋转缩放(指定缩放比例)
rotozoom(Surface,angle,scale)
Surface:旋转对象
angle:旋转角度
scale:缩放比例
new_image = pygame.transform.rotozoom(image,90,0.8)
c.旋转
rotate(Surface,angle)
Surface:旋转对象
angle:旋转角度
new_image = pygame.transform.rotate(image, 270)

05-显示文字

  • 1.创建字体对象
    a.创建系统的字体对象
    SysFont(name,size,bold = False,italic = False)
    name:字体名(系统支持的字体名)
    size:字体大小
    bold:是否加粗
    italic:是否倾斜
    b.创建自定义的字体对象
    Font(字体文件路径,字体大小)
    字体文件路径:ttf文件
 # a.创建系统字体
    # font = pygame.font.SysFont('Times',30)

    # b.创建自定义字体
    font = pygame.font.Font('./files/aa.ttf',50)
  • 2.根据字体去创建文字对象
    render(text,antialias,color,background = None)
    text:需要显示的文字(字符串)
    antialias:是否平滑(布尔)
    color:颜色
    background:背景颜色
text = font.render('Hello,高渐离 !',True,(255,80,200))
    print(text.get_size())

06-显示图形

1.画直线
def line(Surface,color,star_pos,end_pos,width=1)
Surface:画在哪
color:颜色
star_pos:起点
end_pos:终点
width:线宽

# 画一条水平线
    # pygame.draw.line(window,(255,0,0),(50,100),(200,100))
    # pygame.draw.line(window, (255, 100, 200), (0, 0), (100, 100),10)

2.画线段(折线)
def lines(Surface,color,close,pointlist,width=1)
Surface:画在那
color:颜色
close:是否闭合(是否连接起点和终点)
pointlist:点对应的列表
width:线的宽度
pygame.draw.lines(window,(255,100,200),True,[(0,0),(100,0),(100,100),(200,100),(200,200)],10)
3.画圆
def circle(Surface,color,pos,radius,width=1)
Surface:画在那
color:颜色
pos:圆心坐标
radius:半径
width:0-->填充
pygame.draw.circle(window,(255,255,0),(200,300),100,0)
4.画矩形
def rect(Surface,color,Rect,width=0)
Surface:画在那
color:颜色
Rect:范围(元组,元组中有4个元素,分别是x,y,width,height)
pygame.draw.rect(window,(200, 150, 200), (200, 200, 250, 300),20)
5.画多边形
polygon(Surface,color,pointlist,width=0)
pointlist:多边形各点坐标,组成一个元组
6.画椭圆
def ellipse(Surface,color,Rect,width=0)
pygame.draw.ellipse(window, (200, 150, 200), (200, 200, 250, 300), 20)
7.画弧线
def arc(Surface,color,Rect,start_angle,stop_angle,width=1)
import math pygame.draw.arc(window,(255,0,0),(100, 100, 100, 100),math.pi,math.pi/2,10)

07-事件

所有的事件处理的入口就是这个for循环

  • for循环中的代码只有游戏事件发生后才会执行
    a.事件的type:
    QUIT:关闭按钮被点击事件
    鼠标事件:
    MOUSEBUTTONDOWN:鼠标按下事件
    MOUSEBUTTONUP:鼠标弹起
    MOUSEMOTION:鼠标移动
    键盘事件:
    KEYDOWN:键盘按下
    KEYUP:键盘弹起

    b.事件的pos--鼠标事件发生的位置(坐标)

    c.事件的key--键盘事件被按的键对应的编码值

        for event in pygame.event.get():
            # 不同的事件发生后,对应的type值不一样
            if event.type == pygame.QUIT:
                print('点击关闭')
                exit()
            elif event.type == pygame.MOUSEBUTTONDOWN:
                # 鼠标按下要做的事情
                print(event.pos)
                print('鼠标按下')
                # 鼠标按下一次画一个球
                pygame.draw.circle(window,(random.randint(0,255),random.randint(0,255),random.randint(0,255)),event.pos,20)
                pygame.display.flip()
            elif event.type == pygame.MOUSEBUTTONUP:
                print('鼠标弹起')
            elif event.type == pygame.MOUSEMOTION:
                print('鼠标正在移动',event.pos)
            elif event.type == pygame.KEYDOWN:
                print('键盘按下',event.key,chr(event.key))
            elif event.type == pygame.KEYUP:
                print('键盘弹起')

08-动画效果

 # c.展示内容(将纸贴在画框上)
    pygame.display.flip()

    # 圆心坐标
    x = 100
    y = 100
    r = 50
    add = 4
    m = 2
    n = 1
    # 游戏循环
    while True:

        pygame.time.delay(5)
        # 将之前window上的内容覆盖了
        window.fill((255,255,255))

        # 不断的画圆
        pygame.draw.circle(window,(randint(0,255),randint(0,255),randint(0,255)),(x,y),r)
        pygame.display.update()

        # 改变y值让圆在垂直方向移动
        y += m
        x += n
        # r += add
        # if r >=600 or r <= 20 :
        #     add *= -1
        if y >= 600 - r or y <= 50:
            m *= -1
        elif x >= 400-r or x <= 50:
            n *= -1
        # 事件检测
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

09-按住不放原理

import pygame
if __name__ == '__main__':
    # 初始化,创建窗口
    pygame.init()
    window = pygame.display.set_mode((400,600))
    window.fill((255,255,255))

    image = pygame.image.load('./files/gjl.jpg')
    # 缩放
    image = pygame.transform.rotozoom(image,0,0.5)
    window.blit(image,(100,100))
    # 获取图片的宽度、高度
    image_w,image_h = image.get_size()

    # c.展示内容(将纸贴在画框上)
    pygame.display.flip()

    # 用来存储图片是否移动
    flag = False

    # 保存图片的坐标
    image_x,image_y = 100,100
    # 游戏循环
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                exit()

            # 鼠标按下
            if event.type == pygame.MOUSEBUTTONDOWN:
                # 判断鼠标的范围是否在图片上
                m_x,m_y = event.pos
                if image_x<=m_x<=image_x+image_w and image_y<=m_y<=image_y+image_h:
                    flag = True
            elif event.type == pygame.MOUSEBUTTONUP:
                flag = False
            # 鼠标移动事件
            # 鼠标在移动,并且flag为True
            if event.type == pygame.MOUSEMOTION and flag:
                # 填充背景色
                window.fill((255,255,255))

                # 在鼠标移动的位置渲染图片
                # window.blit(image,event.pos
                center_x,center_y = event.pos
                image_x, image_y = center_x - image_w/2,center_y - image_h/2
                window.blit(image,(image_x, image_y))
                # 更新屏幕显示
                pygame.display.update()

你可能感兴趣的:(2018-09-04pygame)