美文网首页会Python就够了
俄罗斯方块之二——在游戏区域内活动小方格

俄罗斯方块之二——在游戏区域内活动小方格

作者: 藕丝空间 | 来源:发表于2019-08-12 16:49 被阅读0次

    根据动画的原理,如果要让一个小方格移动起来,就是让背景网格中的小方格按照运动规律以此呈现出来即可。按照这个思路,我们组织本章节的内容。

    1、构建保存小方格 Rect 对象的矩阵

    按照上一节的定义,我们将游戏区域分解成了 N 个小方格大小的网格,其实就是一个保存有各个小方格左上角坐标的矩阵(或曰二维数组)。

    那么根据 Rect 类的特性,为了优化代码,我们将二维数组内保存的小方格左上角坐标,改为保存各个小方格的 Rect 对象。

    def matrix():
        ''' 功能:以游戏区域为基础,画出用于呈现小方格的 Rect 对象的矩阵。
        '''
        # 下面一行列表推导的代码用于构造小方格的 Rect 对象的二维列表
        box_coordinate_list = [[pygame.Rect((coordinate[0] + x*edge + 2),
                                (coordinate[1] + y*edge + 2), edge, edge)
                                for x in range(box_col)] for y in range(box_row)]
    
        return box_coordinate_list
    

    上面的代码就是将列表推导中的 ((coordinate[0] + x*edge + 2), (coordinate[1] + y*edge + 2)) 内容修改为 pygame.Rect((coordinate[0] + x*edge + 2), (coordinate[1] + y*edge + 2), edge, edge),按照 pygame.Rect 类的语法结构,加上小方格的边长。

    同时,我们将背景中的网格进行了隐藏处理,相关代码也进行了精简。

    2、修改小方格的呈现方法

    为了能够适应游戏区域的矩阵所保存的对象,我们需要修改一下 box 函数,将原来的参数由坐标改为 Rect 对象。

    def box(rect:"该参数为一个pygame.Rect对象"):
        ''' 功能:画出用于组成图形的单个正方形
        '''
        pygame.Surface.fill(screen, yellow, rect) # 填充方格内的颜色
        pygame.draw.rect(screen, white, rect, 1)  # 画出方格的线条
        return rect
    

    3、让小方格动起来

    为了能让事件驱动小方格,我使用向左键和向右键两个键来控制小方格的左右移动。我们可以在主函数中修改为如下代码:

    if __name__ == "__main__":
        pygame.init()  # 使用 pygame 之前先进行初始化
        screen = pygame.display.set_mode((s_width, s_height), pygame.RESIZABLE, 32)
        pygame.display.set_caption("俄罗斯方块") # 设置窗体名称
    
        m = matrix()    # 矩阵在主函数中调用一次即可,没有必要放到 while 循环中。
        row, col = inital_pos # 小方格的初始化位置,inital_pos 需要定义一个全局变量。
    
        while True:
            pygame.time.delay(100) # 设置动作的延迟时间为 100 毫秒
            screen.fill(bgcolor)  # 表示填充背景颜色。
            for event in pygame.event.get():
                if event.type == pygame.QUIT: # 检测退出动作
                    exit()
            area()
    
            keys = pygame.key.get_pressed()  # 检测键盘动作
            if keys[pygame.K_LEFT]:         # 使用向左键来控制小方格向左移动
                if col > 0:
                    col -= 1
            if keys[pygame.K_RIGHT]:        # 使用向左键来控制小方格向右移动
                if col < box_col-1:
                    col += 1
    
            box(m[row][col]) # 将小方格的呈现放到键盘的控制之后,可以及时接受到变量。
            pygame.display.update()
    

    动图演示如下:

    运动的小方格

    如果想让小方格自动向下,那么只需要在 while 循环的内部,最好是在 box(m[row][col]) 这行代码之上加入这一行代码:

    row += 1
    

    该行代码的功能就是在每个循环中让 row 加一,也就是选择当前小方格下一行的方格。

    相关文章

      网友评论

        本文标题:俄罗斯方块之二——在游戏区域内活动小方格

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