俄罗斯方块转弯算法实现

关于俄罗斯方块程序对战程序中实现方块转弯的算法描述。

为了方便描述算法的原理,以方块的左上角为基准,简化问题为一个1*1的小方块,在row*col的矩阵中可以最终移动到哪个位置。

现在来看看位置(x y)是否可以移动到(即使是临时的)。
如果它可以被移动到,那么它从哪个位置移动过来。也很简单。
首先,如果上面位置(x-1 y)可以被移动到,那么(x y)也是可以的。
其次,如果左边(x y-1)或右边(x y+1)的位置可以被移动到,那么(x y)也是可以的。

那么评估位置是否可以移动到(即使是临时的)的算法,就可以这么描述:

1.定义一个二维数组,表示某个格是否移动到(即使是临时的),默认为false不可以。
2.初始化第一行的状态,如果方块在(0 i)可放置(和当前矩阵没冲突)则设置state[0][i]为true。
3.从第二行开始遍历,针对每一行i进行以下处理
3.1.对当前行的列j进行遍历,如果当前位置可放置,且同一列上一行的位置可移动到,则state[i][j]为true
3.2.对当前行的列j进行遍历,如果当前位置state[i][j]为true,则往左边(右边)一直检查
3.3.如果左边位置k可放置,则state[
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值