俄罗斯方块思考

版权声明:就是码字也不容易啊 https://blog.csdn.net/qq_40946921/article/details/84576942

要想设计一个小游戏,先想办法去“描述“这个游戏,就拿这个游戏来说,不考虑那些花里胡哨的东西,俄罗斯方块的核心特征该怎么描述,描述的角度、方式不同,写的代码也就不同。
怎么"描述"这个游戏呢
一、面板
     也就是俄罗斯方块中方块的运行界面,该怎么描述呢,考虑到后面的方块运动,可能有人想用坐标系来描述这个面板,当然这个方法可取,但用坐标来描述这个面板就有点大材小用了,为什么呢?因为俄罗斯方块的每次运动并不是平滑的,每次运动都是移动一“格”,所以只需用一个二维的零矩阵足以描述这个面板

二、方块
        俄罗斯方块这么经典的小游戏,相信大家都清楚,游戏中的所有方块都是由四个小格子构成,那么这个又该怎么描述呢?我说一下我的思路
思考:1、有四种形态的方块,每次随机出现一种
           2、可以旋转,每次出现的初始状况也不同
           3、每次都要向下运动,碰到方格或者面板地板停止运动
           4、可以左右移动,或者加速
实现:
    1+2、都是由4个相连的格子的构成,且都能旋转(把田也当作能旋转),所有分四种情况(模板),可以向上抽象,涉及到旋转,就要找旋转点,而有些方块的旋转点是不唯一的,这样起来旋转就很麻烦,这个时候别忘了面板是矩阵,所以只需要在小范围内的矩阵中,将方块进行转置即可,但需要确定边界就需要自己特别小心了。
     综上,我觉得会用到的属性:方格格子坐标集,多态实现转置,方格底部格子坐标集(用于底部触“底”判断),方格横向跨域(用于随机初始位置)
    3、向下运动,方格格子坐标集中的坐标都往下移动一个格子,停止运动可以自己写碰撞函数(利用方格底部格子坐标集)
    4、左右移动,方格格子坐标集中的坐标进行移动,注意,这个移动的帧率比下落的帧率要快许多
三、随机的问题
      俄罗斯方块中有很多随机事件
    1、随机出现一种形态的方块:这个很简单,1-4的随机数就能解决
    2、随机初始状态:我们一开始的模板只需要定一个状态就行了,随机状态无法就是随机的旋转了多少次(注意旋转的时候修改方格横向跨域)
    3、随机初始位置:同样,一开始直接把位置定在矩阵的左上角,随机位置无非就是利用面板宽度和方块横向跨域进行左右随机移动
  综上,其实就是在左上角(4格高度)生成模板,先进行随机旋转,再随机横移,就完成了俄罗斯方块的随机事件,而矩阵最上方4格高度不显示给别人看。

猜你喜欢

转载自blog.csdn.net/qq_40946921/article/details/84576942