新版俄罗斯方块

程序本体

如何有序管理游戏界面

通过定义窗口宽度(g_settings.width)、窗口高度(g_settings.height)和单元格的边长(g_settings.cube_width)来将屏幕分割成(g_settings.gird_width_num)列和(g_settings.gird_height_num)行, 同时建立列表变量screen_color_matrix用于储存各个方格中的方块信息, 以方便进行各个方格的编辑和管理。

如何显示游戏过程中的界面

在函数draw_matrix中,我们通过遍历screen_color_matrix变量, 来获取当前各个单元格的存在与否与颜色等信息。再根据此利用pygame模块中draw.rect的功能在各个单元格进行绘制。

如何生成不同形状的俄罗斯方块

建立Cube类用于生成新的方块, 将俄罗斯方块中不同形状的方块, 及其旋转后的形状以坐标的形式存入live_cube.SHAPES_WITH_DIRECTION字典中, 并利用random.randint函数随机在字典中选出方块的形状和方向。

如何进行方块的旋转

首先我们在存储方块形状的坐标顺序时,是依照顺序进行录入的,因此在我们定义的up函数中,如需要旋转方块,仅需通过将表示随机生成方块的方向(live_cube.direction)的数值+1, 则可以获得旋转后的方块的坐标,从而达到旋转方块的效果。

如何在操作时判断方块是否越界(或不符合逻辑)

通过建立conflict函数, 进行两方面的检查, 一方面是检查get_all_girdpos函数中储存的坐标是否超出了当前窗口的界限(即超出屏幕), 另一方面针对当前的表示当前方块位置的函数(get_all_gridpos)与screen_color_matrix所储存的数据进行对比, 若get_all_gridpos函数所储存的坐标在screen_color_matrix中已经拥有数据(即当前方块所在位置已经有其他方块存在了, 出现冲突), 则返回True(有冲突)
在进行操作的过程中, 每一块方块在进行下一次变换前都会运用conflict函数进行检验, 若出现冲突, 则操作无效, 方块保持不变, 若未出现冲突, 方块才会进行移动或者旋转。

如何加快游戏速度(提高游戏难度)

我们创建了一个连续快速匀速增加的counter变量,并设置固定的游戏的帧率(FPS变量)和能够跟随分数的增长而增加的表述难度的函数(level), 在程序进行运行的过程中, 我们将游戏荧幕刷新的时机定为「if gameover is False and counter % (FPS // level) == 0:」, 即当counter能够整除FPS // level 时进行窗口的刷新, 当level值变大时, FPS // level 的值将变小, 此时游戏的窗口刷新频率变高, 方块掉落速度变快, 达到了提高难度的目的。

你可能感兴趣的:(新版俄罗斯方块)