美文网首页
12总 pygame知识

12总 pygame知识

作者: 大黄蜂人工智能 | 来源:发表于2018-09-04 21:34 被阅读0次

    复习:

    1.json数据
    标准格式:a.只能是一个数据 b.数据必须是json支持的数据类型
    数据类型:对象(字典),数组(列表),字符串(双引号),数字,布尔(true,false),null
    json数据和python之间的转换关系
    python模块中的方法:load,loads, dump,dumps

    2.异常捕获
    try-except-finally

    3.第三方库的导入

    1.pygame的基本操作:

    import pygame
    
    if __name__ =='__main__':
        1.初始化游戏模块
        pygame.init()
    
        2.创建游戏窗口
       
        display.set_mode(窗口大小):创建一个窗口并且返回
        窗口大小:是一个元祖,并且元祖中需要两个值分别表示宽度和高度(单位是像素)
    
        window = pygame.display.set_mode((400,600))
    
        3.让游戏一直运行,直到点关系按钮才结束
        while True:
            获取游戏过程中产生的所有事件
            for event in pygame.event.get():
                 if event.type == pygame.QUIT:#type来判断事件的类型
                    exit()#退出程序
    

    2.显示图片:

    import pygame
    
    if __name__ == '__main__':
        #1.初始化游戏模块
        pygame.init()
    
        2.创建窗口
        window = pygame.display.set_mode((600,400))
    
    
        给窗口填充颜色
       
        fill(颜色)
        颜色:计算机三原色(红、绿、蓝),每个颜色对应值的范围是0~255.通过改变三原色的值可以调配不同的颜色
        颜色值:是一个元祖,元祖中三元素,分别代表红绿蓝(rgb)
        (255,0,0)--->红色
        (0,255,0)---->绿色
        (0,0,255)---->黑色
        (255,255,255) ---> 白色
        
    
        window.fill((255,255,255))
        a.获取图片,创建图片对象
    
        image.load(图片路径):获取本地的一张图片,返回图片对象
          image = pygame.image.load('./files/jiaoyu.jpg')
    
    
        get_size():获取大小,返回值是一个元祖,有两个元素,分别是宽和高
        
        """
        image_width,image_height = image.get_size()
    
    
        b.渲染图片(将图片画在纸上)
        """
        blit(渲染对象,位置)
        位置:坐标(x,y),值的类型是元祖,元祖有两个元素分别对应x坐标和y坐标
        
        """
        window.blit(image,(0,100))
        window.blit(image,((600-image_width,400-image_height)))
    
    
        c.展示内容(将纸贴画在画框上)
    
        pygame.display.flip()
    
    
        3.游戏循环
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    3.型变:

    import pygame
    
    if __name__ == '__main__':
        初始化和创建窗口
        pygame.init()
        window = pygame.display.set_mode((400,600))
        window.fill((255,255,255))#填充窗口的颜色
    
        图片相关
        1.加载图片(选图)
        image = pygame.image.load('./files/jiaoyu.jpg')
    
    
        a.缩放(指定大小)
        transform.scale(缩放对象,目标大小):将指定的对象缩放到指定的大小,会返回缩放后的对象
    
    
    
       b.旋转缩放(指定缩放比例)
        rotozoom(Surface,angle,scale)
        Surface:旋转缩放对象
        angle:旋转的角度(0~360)
        scale:缩放比例,大于1放大,小于1缩小
    
        new_image = pygame.transform.rotozoom(image,45,0.8)
    
        c.旋转
        rotate(Surface,angle)
        Surface:旋转对象
        angle:旋转角度
    
        new_image = pygame.transform.rotate(image,270)
    
        2.渲染图片
        window.blit(new_image,(0,0))
    
        3.展示内容
    
        pygame.display.flip()
    
    
    
    
        游戏循环
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    4.显示文字:

    import pygame

    if name =='main':
    初始化游戏和创建窗口
    pygame.init()
    window = pygame.display.set_mode((400,600))
    window.fill((255,255,255))

    显示文字
    1.创建字体对象

    a.创建系统的文字对象
    SysFont(name,size,bold=False,italic=False)
    name:字体名(系统支持的字体名)
    size:字体大小
    bold:是否加粗
    italic:是否倾斜

    b.创建自定义的字体对象
    Font(字体文件路径,字体大小)
    字体文件路径:ttf文件

    a.创建系统文字
    b.创建自定义字体

        font = pygame.font.Font('./files/aa.ttf',30)
    
    2.根据字体取创建文字对象
    
    
    render(text,antialias,color,background=None)
    text:需要显示的文字(字符串)
    antialisas:是否平滑(布尔)
    color:颜色
    background:背景颜色
    
        text = font.render('你好,pygame',True,(0,0,255),(255,255,0))
    
        print(text.get_size())
    

    3.渲染文件

    window.blit(text,(50,50))
    

    `4.展示内容

        pygame.display.flip()
    
    游戏结束
    
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    5.显示图形:

    import pygame
    from math import pi
    if __name__ == '__main__':
    

    初始化,创建窗口

     pygame.init()
     window =pygame.display.set_mode((400,600))
     window.fill((255,255,255))
    

    1.画线段
    def line(Surface,color,start_pos,end_pos,width=1)
    Surface:画在哪儿
    color:线的颜色
    start_pos:起点
    end_pos:终点
    width:线宽

    画一条水平线

       pygame.draw.line(window,(255,0,0),(50,100),(200,100))
    

    画一条垂直线

        pygame.draw.line(window,(0,255,0),(50,100),(50,200),2)
    

    2.画线段(折线)
    def lines(Suface,color,closed,pointlist,width=1)
    Surface:画在哪儿
    color:线的颜色
    closed:是否闭合(是否连接起点和终点)
    pointlist:点对应的列表

     pygame.draw.lines(window,(0,0,255),True,[(100,200),(150,120),(140,300)])
    

    3.画圆
    def circle(Surface,color,pos,radius,width=0)
    Surface:画在哪儿
    color:颜色
    pos:圆心坐标
    redius:半径
    width:线宽,0->填充

        pygame.draw.circle(window,(255,255,0),(200,300),100,0)
    

    4.画矩形:
    def rect(Surface,color,Rect,width=0)
    Surface:画在哪儿
    color:颜色
    Rect:范围(元祖,元祖中有四个元素,分别是x,y,width,height)

        pygame.draw.rect(window,(0,255,0),(10,100,50,100))
    

    5.画多边型

    polygon(Surface,color,Rect,width=0)

    
            pygame.draw.polygon(window,(0,255,255),[(300,50),(250,40),(100,50),(200,150)])
    

    6.画椭圆
    def ellipse(Surface,color,Rect,width=0)

        pygame.draw.ellipse(window,(123,200,210),(10,200,150,60))
    
    

    7.画弧线
    def arc(Surface,color,Rect,start_angle,stop_angle,width=1)
    start_angle:0~2pi
    stop_angle:
    pi---180度 1度----pi/180
    59度 = pi/180*59

        pygame.draw.arc(window,(255,0,0),(200,400,100,100),pi/4+pi,pi*3/4+pi,3)
    

    展示内容:

        pygame.display.flip()
    

    游戏结束

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

    6.事件:

    import pygame
    from random import randint
    
    if __name__ =='__main__':
    

    游戏初始化

        pygame.init()
        window = pygame.display.set_mode((400,600))
        window.fill((255,255,255))
    

    游戏循环

        while True:
    

    所有的事件处理的入口就是这个for循环
    for 循环中的代码只有游戏事件发生后才会执行

    a.事件的type---决定发生的是什么事件
    QUIT:关闭按钮被点击的事件

    鼠标事件:
    MOUSEBUTTONDOWN:鼠标按下事件
    MOUSEBUTTONUP:鼠标按下松开时对应的事件
    MOUSEOTION:鼠标移动事件

    键盘事件:
    KEYBOWN:键盘按下
    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,(randint(0,255),randint(0,255),\
                # randint(0,255)),event.pos,randint(20,50))
                elif event.type == pygame.MOUSEBUTTONUP:
                    print('鼠标弹起',event.pos)
                elif event.type == pygame.MOUSEMOTION:
                # 鼠标按下一次画一个球
                    pygame.draw.circle(window,(randint(0,255),randint(0,255),\
                                           randint(0,255)),event.pos,20)
                    pygame.display.flip()
                # print('鼠标正在移动',event.pos)
    
                elif event.type == pygame.KEYDOWN:
                    print('键盘按下',event.key,chr(event.key))
                elif event.type == pygame.KEYUP:
                    print('键盘弹起)
    

    8.动画原理:

    import pygame
    
    if __name__ == '__main__':
        \\初始化
        pygame.init()
        window = pygame .display.set_mode((400,600))
        window.fill((255,255,255))
        pygame.display.flip()
       \\ 球心圆的坐标
        x = 100
        y = 100
        r = 50
        add = 4
        y_speed = 2
       \\ 游戏循环
        while True:
            \\ 延迟
           \\ pygame,time,delay(10)
            \\将之前纸上的内容给覆盖
            window.fill((255,255,255))
           \\ 不断的画圆
            pygame.draw.circle(window,(255,0,0),(x,y),r)
            pygame.display.update()
            \\改变y值让圆在垂直方向移动
            y += y_speed
           \\ r += add
           \\if r >=120 or r <=20:
           \\ add *= -1
         \\边界检测
            if y > 600-r:
                y = 600-r
                y_speed = -2
            elif y < 50:
                y = 50
                y_speed = 2
            \\时间检测
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    9.按住不放原理:

    import pygame
    
    if __name__ == '__main__':
       \\游戏初始化
        pygame.init()
        window = pygame.display.set_mode((400,600))
        window.fill((255,255,255))
       \\ pygame.display.flip
    
      \\1.显示一张照片
        image =pygame.image.load('./files/luffy4.jpg')
      \\缩放
        image = pygame.transform.rotozoom(image,0,0.5)
        window.blit(image,(100,100))
       \\获取图片的宽度和高度
        image_w,image_h = image.get_size()
    
        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 = False
                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))
                    \\g更新屏幕的显示
                    pygame.display.update()
    

    相关文章

      网友评论

          本文标题:12总 pygame知识

          本文链接:https://www.haomeiwen.com/subject/xrhnwftx.html