学习 2 天 lua 后开发俄罗斯方块的一些心得(耗时3天)

499 阅读2分钟

前言

以前没接触过 lua,用 lua 开发俄罗斯方块主要是新公司的入职培训,自学了两天,然后基于 unity 引擎用了3天时间开发,主数据用一个二维数组代表示对应行列,有格子则 >1 ,否则为0,主要实现功能:旋转、移动、消行、落点、死亡

旋转

每一类俄罗斯都用一个二维数组存放,二维数组内的值分别为每个方向格子摆放,用一个变量记录当前方向,当检测到玩家操作旋转时,先判断是否可旋转,若可旋转则方向变量自增,用方向去二维数组内获取对应的格子摆放,然后更新主界面的格子位置。

local L_block = {
    {
        {0,1,0,0},
        {1,1,1,0},
        {0,0,0,0},
        {0,0,0,0}
    },
    {
        {0,1,0,0},
        {0,1,1,0},
        {0,1,0,0},
        {0,0,0,0}
    },
    {
        {0,0,0,0},
        {1,1,1,0},
        {0,1,0,0},
        {0,0,0,0}
    },
    {
        {0,1,0,0},
        {1,1,0,0},
        {0,1,0,0},
        {0,0,0,0}
    }
}

移动、落点

在一个持续更新的函数内执行,每次移动前用当前俄罗斯的每个小格子(一般都是 4 个)行数 +1 、列(注意:左右移动则行不变、列 +1 或 -1)、与主数据的对应行列对比,若主数据该位置已存在格子,则判定不能移动,等下次触发移动时直接判定该俄罗斯在此落点,在下次移动期间玩家还是可以进行短暂的移动,落点后更新该俄罗斯数据到主数据内,在主界面对应行、列更新每个小格子,检测消行

消行

遍历主数据每一行,若出现某一行全部值 > 0,则判定当行可消除,移除主数据当行数据,在主数据开头插入一行相同数量且为0的数据,保持整个行列数目不变,消除后更新主界面所有小方块位置,当行直接放进对象池或销毁,在开头同样插入一行数据,数据处理后中断当前循环(注意:这里我每次只处理一行,多行的话用递归处理),用一个变量表示当前是否是有消行操作,若有则继续递归,重复以上操作,直至没有课消除的行,然后在主界面上方随机生成一个新的俄罗斯,继续移动

死亡

在前面讲的主数据开头多插入 4 行数据,每次落点后会把数据更新至主数据,当主数据前四行出现 > 0 时,则判定死亡