美文网首页Python学习笔记
2021年4月11日Python的pygame

2021年4月11日Python的pygame

作者: 爱生活的越仔 | 来源:发表于2021-04-11 22:38 被阅读0次

    2.1 设计流程步骤:

    • 引入pygame和sys

    • 初始化init()及设置

    • 获取事件并响应

    • 刷新屏幕

    sys模块介绍:

    sys是Python的标准库,提供Python运行时环境变量的操控。

    引入模块的概念:python3模块(菜鸟教程)

    廖雪峰官方教程-模块(链接)

    Hello World程序

    import pygame,sys
    
    pygame.init()#对Pygame内部各功能模块进行初始化创建及变量设置,默认调用
    #初始化显示窗口,第一个参数size是一个二值元组,分别表示窗口的宽度和高度
    screen = pygame.display.set_mode((600, 400))
    #设置显示窗口的标题内容,参数title是一个字符串类型
    pygame.display.set_caption("Pygame游戏之旅")
    
    while True:
        for event in pygame.event.get():#从Pygame的事件队列中取出事件,并从队列中删除该事件
            #获得事件类型,并逐类响应
            if event.type == pygame.QUIT:
                sys.exit()
        #对显示窗口进行更新,默认窗口全部重绘
        pygame.display.update()
    

    壁球小游戏(展示型)与图像的基本使用

    2.3.1从需求到实现的三个关键要素:

    • (1) 壁球:游戏需要一个壁球,通过图片引入

    • (2) 壁球运动:壁球要能够上下左右运动

    使图片每次向右及向下移动1个像素

    • (3) 壁球反弹:壁球要能够在上下左右边缘反弹

    遇到左右两侧,横向速度取反;

    遇到上下两侧,纵向速度取反。

    Rect对象

    Rect对象有一些重要属性,例如:

    top,bottom,left,right 表示上下左右

    width,height 表示宽度、高度

    screen.fill(color)

    显示窗口背景填充为color颜色,采用RGB色彩体系。

    由于壁球不断运动,运动后原有位置将默认填充白色,因此需要不断刷新背景色

    screen.blit(src, dest)

    将一个图像绘制在另一个图像上,即将src绘制到dest位置上。通过Rect对象引导对壁球

    的绘制。

    import pygame,sys
    
    pygame.init()
    size = width, height = 600, 400
    speed = [1,1]
    BLACK = 0, 0, 0
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("Pygame壁球")
    #将filename路径下的图像载入游戏
    ball = pygame.image.load("PYG02-ball.gif")
    
    #Pygame使用内部定义的Surface对象表示所有载入的图像
    #.get_rect()方法返回一个覆盖图像的矩形Rect对象
    ballrect = ball.get_rect()
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        
        #ballrect.move(x,y)
    #矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
        ballrect = ballrect.move(speed[0], speed[1])
        if ballrect.left < 0 or ballrect.right > width:
            #图片每次碰撞到边缘,速度取反
            speed[0] = - speed[0]
        if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = - speed[1]
        
        #显示窗口背景填充为color颜色
        screen.fill(BLACK)
        #将一个图像绘制在另一个图像上
        screen.blit(ball, ballrect)
        pygame.display.update()
    

    壁球小游戏(节奏型)与屏幕的帧率设置

    2.4.1需求:

    壁球可以按照一定速度运动

    从需求到实现的关键要素:

    壁球速度:如何控制壁球的运动速度呢?

    • 每次循环壁球运动一步

    • 控制循环间隔即可控制速度

    • (展示型)在尽最大能力运动

    pygame.time.Clock()

    创建一个Clock对象,用于操作时间

    clock.tick(framerate)

    获取事件并逐类响应控制帧速度,即窗口刷新速度,例如:刷新屏幕

    clock.tick(100)表示每秒钟100次帧刷新,视频中每次展示的静态图像称为帧

    import pygame, sys
    
    pygame.init()
    size = width, height = 600, 400
    speed = [1, 1]
    BLACK = 0, 0, 0
    
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("Pygame壁球")
    # 将filename路径下的图像载入游戏
    ball = pygame.image.load("PYG02-ball.gif")
    
    # Pygame使用内部定义的Surface对象表示所有载入的图像
    # .get_rect()方法返回一个覆盖图像的矩形Rect对象
    ballrect = ball.get_rect()
    fps = 300
    fclock = pygame.time.Clock()
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
        # ballrect.move(x,y)
        # 矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
        ballrect = ballrect.move(speed[0], speed[1])
        if ballrect.left < 0 or ballrect.right > width:
            # 图片每次碰撞到边缘,速度取反
            speed[0] = - speed[0]
        if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = - speed[1]
    
        # 显示窗口背景填充为color颜色
        screen.fill(BLACK)
        # 将一个图像绘制在另一个图像上
        screen.blit(ball, ballrect)
        pygame.display.update()
        fclock.tick(fps)
    

    壁球小游戏(操控型)与键盘的基本使用

    2.5.1 从需求到实现的关键要素:

    键盘使用:如何获取键盘的操作事件

    速度调节:根据对应按键调节壁球运动速度

    键盘使用
    • Pygame采用事件来对应键盘操作

    • 获取事件将得到键盘输入

    • 不同按键编写操作函数即可

    pygame.KEYDOWN

    Pygame对键盘敲击的事件定义,键盘每个键对应一个具体定义

    [图片上传失败...(image-14b9b4-1618151886786)]

    import pygame,sys
    
    pygame.init()
    size = width, height = 600, 400
    speed = [1,1]
    BLACK = 0, 0, 0
    screen = pygame.display.set_mode(size)
    pygame.display.set_caption("Pygame壁球")
    ball = pygame.image.load("PYG02-ball.gif")
    ballrect = ball.get_rect()
    fps = 300
    fclock = pygame.time.Clock()
    
    while True:
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                sys.exit()
            elif event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    speed[0] = speed[0] if speed[0] == 0 else (abs(speed[0]) - 1)*int(speed[0]/abs(speed[0]))
                elif event.key == pygame.K_RIGHT:
                    speed[0] = speed[0] + 1 if speed[0] > 0 else speed[0] - 1
                elif event.key == pygame.K_UP:
                    speed[1] = speed[1] + 1 if speed[1] > 0 else speed[1] - 1
                elif event.key == pygame.K_DOWN:
                    speed[1] = speed[1] if speed[1] == 0 else (abs(speed[1]) - 1)*int(speed[1]/abs(speed[1]))
    
        ballrect = ballrect.move(speed)
        # ballrect.move(x,y)
        # 矩形移动一个偏移量(x,y),即在横轴方向移动x像素,纵轴方向移动y像素,xy为整数
        if ballrect.left < 0 or ballrect.right > width:
            speed[0] = - speed[0]
        if ballrect.top < 0 or ballrect.bottom > height:
            speed[1] = - speed[1]
    
        screen.fill(BLACK)
        screen.blit(ball, ballrect)
        pygame.display.update()
        fclock.tick(fps)
    

    相关文章

      网友评论

        本文标题:2021年4月11日Python的pygame

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