美文网首页
2018-09-04Pygame(day12)

2018-09-04Pygame(day12)

作者: naruto711 | 来源:发表于2018-09-04 23:06 被阅读0次

    一、pygame基本操作

    1.导入pygame模块

    import pygame
    

    2.初始化游戏模块

    pygame.init()
    

    3.创建游戏窗口

    • display.set_mode(窗口大小):创建一个窗口并且返回
    • 窗口大小:是一个元祖,并且元祖中需要两个值分别表示宽度和高度(单位是像素)
    pygame.display.set_mode((600,400))
    

    4.让游戏一直运行,知道点击关闭按钮才结束

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

    二、显示图片

    创建窗口
    1. 给窗口填色

    window.fill((255,255,255))
    

    a.颜色:计算机三原色(红,绿,蓝),每个颜色对应的值范围是0~255,通过改变三原色的值可以调配出不同的颜色
    b.颜色值:是一个元祖,元祖中三个元素,分别代表红绿蓝(RGB)

    颜色
    红色 (255,0,0)
    l绿色 (0,255,0)
    蓝色 (0,0,255)
    黑色 (0,0,0)
    白色 (255,255,255)

    2.显示图片

    • image.load(图片路径):获取本地的一种图片,返回图片对象
    • 获取图片,创建图片对象
    image = pygame.image.load('./picture/kobe.jpg')
    
    • get_size():获取大小,返回值是一个元祖,有两个元素,分别是宽和高
    image_width,image_height = image.get_size()
    
    • b.渲染图片(将图片画在纸上)
      '''
      blit(渲染对象,位置)
      位置:坐标(x,y),值的类型是元祖,元祖有两个元素分别是对应X坐标和Y坐标
    window.blit(image,(75,40))
    

    3.展示内容

    pygame.display.flip()
    
    import pygame
    if __name__ == '__main__':
        #1.初始化游戏模块
        pygame.init()
    
        #2.创建窗口
        window = pygame.display.set_mode((660,400))
    
        # 给窗口填充颜色
        '''
        fill(颜色)
        颜色:计算机三原色(红、绿、蓝),每个颜色对应的值的范围是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('./picture/kobe.jpg')
        '''
        get_size():获取大小,返回值是一个元祖,有两个元素,分别是宽和高
        '''
        image_width,image_height = image.get_size()
        # b.渲染图片(将图片画在纸上)
        '''
        blit(渲染对象,位置)
        位置:坐标(x,y),值的类型是元祖,元祖有两个元素分别是对应X坐标和Y坐标
        '''
        window.blit(image,(75,40))
        # c.展示内容(将纸贴在画框上)
        pygame.display.flip()
        #3.游戏循环
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    三、形变

    a.缩放为指定大小
    transform.scale(缩放对象,目标大小):将指定的对象缩放到指定的大小,会返回缩放后的对象

    new_image = pygame.transform.scale(image,(500,350))
    

    b.缩放指定比例
    transform.rotozoom(Surface,angle,scale),rotate(Surface,angle)

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

    四、显示文字

    1.创建字体对象
    a.创建系统的字体对象

    • SysFont(name, size, bold=False, italic=False)
    • name:字体名(系统支持的字体名)
    • size:字体大小
    • bold:是否加粗
    • italic:是否倾斜
    font = pygame.font.SysFont('Times',30)
    

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

    font = pygame.font.Font('./picture/aa.ttf',30)
    

    2.根据字体去创建文字对象

    • render(self, text, antialias, color,background=None)
    • text:需要显示的文字(字符串)
    • antialias:是否平滑(布尔)
    • color:颜色
    • background:(背景色)
    text = font.render('你好,李涵',True,(0,0,255),(200,200,200))
    
    import pygame
    if __name__ == '__main__':
        # 初始化游戏
        pygame.init()
        window = pygame.display.set_mode((600,400))
        window.fill((255,255,255))
    
        # 显示文字
        # 1.创建字体对象
        '''
        a.创建系统的字体对象
        SysFont(name, size, bold=False, italic=False)
        name:字体名(系统支持的字体名)
        size:字体大小
        bold:是否加粗
        italic:是否倾斜
        
        b.创建自定义的字体对象
        Font(字体文件路径,字体大小)
        '''
        #a.创建系统字体
        # font = pygame.font.SysFont('Times',30)
    
        #b.创建自定义字体
        font = pygame.font.Font('./picture/aa.ttf',30)
    
        #2.根据字体去创建文字对象
        '''
        render(self, text, antialias, color,background=None)
        text:需要显示的文字(字符串)
        antialias:是否平滑(布尔)
        color:颜色
        background:
        
        '''
        text = font.render('你好,李涵',True,(0,0,255),(200,200,200))
    
        #3.渲染文字
        window.blit(text,(100,100))
    
        #4.展示内容
        pygame.display.flip()
    
        # 游戏循环
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    五、显示图形

    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),20)
    

    2.画线段(折线)

    • def lines(Surface,color,closed,pointlist,width=1)
    • Surface:画在哪里
    • color:线的颜色
    • closed:是否闭合(是否连接起点和终点)
    • pointlist:点对于的列表
    pygame.draw.lines(window,(0,255,0),True,[(100,200),(150,200),(200,300),200])
    

    3.画圆

    • def circle(Surface, color, pos, radius, width=0)
    • Surface:画在哪里
    • color:线的颜色
    • pos:圆心坐标
    • radius:半径
    • width:线宽 0 -->填充
    pygame.draw.circle(window,(225,215,21),(400,200),100,20)
    

    4.矩形

    • def rect(Surface, color, Rect, width=0)
    • Surface:画在哪里
    • color:线的颜色
    • Rect:范围(元祖,元祖中有四个元素,分别是x,y,width,height)
    pygame.draw.rect(window,(255, 0, 0),(500, 300, 50, 100),1)
    

    5.画多边形

    • def polygon(Surface, color, pointlist, width=0)
    • Surface:画在哪里
    • color:线的颜色
    • pointlist:点对于的列表
    pygame.draw.polygon(window,(0,255,0),[(321,50),(143,100),(240,150),(210,200),(330,250),4])
    
    import pygame
    if __name__ == '__main__':
        pygame.init()
        window = pygame.display.set_mode((600,400))
        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),20)
        '''
        2.画线段(折线)
        def lines(Surface,color,closed,pointlist,width=1)
        Surface:画在哪里
        color:线的颜色
        closed:是否闭合(是否连接起点和终点)
        pointlist:点对于的列表
        '''
        pygame.draw.lines(window,(0,255,0),True,[(100,200),(150,200),(200,300),200])
    
        #3.画圆
        '''
        def circle(Surface, color, pos, radius, width=0)
        Surface:画在哪里
        color:线的颜色
        pos:圆心坐标
        radius:半径
        width:线宽 0 -->填充
        
        '''
        pygame.draw.circle(window,(225,215,21),(400,200),100,20)
        '''
        4.矩形
        def rect(Surface, color, Rect, width=0)
        Surface:画在哪里
        color:线的颜色
        Rect:范围(元祖,元祖中有四个元素,分别是x,y,width,height)
        '''
        pygame.draw.rect(window,(255, 0, 0),(500, 300, 50, 100),1)
        '''
        5.画多边形
        def polygon(Surface, color, pointlist, width=0)
        Surface:画在哪里
        color:线的颜色
        pointlist:点对于的列表
        '''
        pygame.draw.polygon(window,(0,255,0),[(321,50),(143,100),(240,150),(210,200),(330,250),4])
    
        #展示内容
        pygame.display.flip()
    
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    

    六、事件

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

    • QUIT: 关闭按钮被点击事件
    • MOUSEBUTTONDOWN:按下鼠标
    • MOUSEBUTTONUP:松开鼠标
    • MOUSEMOTION:移动鼠标

    键盘事件:

    • KEYDOWN:键盘按下
    • KEYUP:键盘弹起

    3.事件的pos --- 鼠标事件发生的位置(坐标)
    4.事件的key值 --- 键盘事件被按的键相对应的编码值

    import pygame
    from random import randint
    if __name__ == '__main__':
        pygame.init()
        window = pygame.display.set_mode((600, 400))
        window.fill((255, 255, 255))
    
        pygame.display.flip()
    
        while True:
            # 所有的事件处理的入口就是这个for循环
            # for循环中代码只有游戏事件发生后才会执行
            '''
            事件的type:
            QUIT: 关闭按钮被点击事件
            MOUSEBUTTONDOWN:按下鼠标
            MOUSEBUTTONUP:松开鼠标
            MOUSEMOTION:移动鼠标
            
            键盘事件:
            KEYDOWN:键盘按下
            KEYUP:键盘弹起
            
            b.事件的pos --- 鼠标事件发生的位置(坐标)
            c.事件的key值 --- 键盘事件被按的键相对应的编码值
            '''
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    print('点击关闭按钮')
                    exit()
                elif event.type == pygame.MOUSEBUTTONDOWN:
                    #鼠标按下做的事情
                    pygame.draw.circle(window, (randint(0, 255), randint(0, 255), randint(0, 255)), event.pos, 20)
                    pygame.display.flip()
                    print(event.pos)
                    print('按下鼠标')
                elif event.type == pygame.MOUSEBUTTONUP:
                    pygame.draw.circle(window, (randint(0, 255), randint(0, 255),randint(0,255)), event.pos, randint(20, 50)                                            )
    
                    pygame.display.flip()
    
                    print('鼠标弹起')
                elif event.type == pygame.MOUSEMOTION:
                    print('鼠标正在移动')
                elif event.type == pygame.KEYDOWN:
                    print(event.key)
                    print('键盘按下')
                elif event.type == pygame.KEYUP:
                    print('键盘弹起')
    

    七、动画原理

    不断生成一个新的图形让他移动,并且用背景色把之前的图案覆盖,产生动画的效果

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

    八、按住图案移动的原理

    显示一张图片,获取图片的长度和宽度并保存图片的坐标,判定鼠标是否在图片的的坐标和长宽度上面,按下鼠标让图片移动

    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('./11.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 = 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(day12)

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