Skip to content

JumpX/ZZTetris

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 

Repository files navigation

ZZTetris

  • 想要的俄罗斯方块

想要的俄罗斯方块

  • 实现的俄罗斯方块

实现的俄罗斯方块

###游戏格子盘

  • 首先,定义游戏格子盘是由120x200像素的二维面板,面板又由10x10的格子组成。
  • 其次,抽出基准值为10,10x10的格子看成1x1,盘子看成12x20。
  • 绘制游戏格子盘,绘制240(12x20)个规格为1x1的的格子。
  • 第三,先绘制盘子(UIView),再用两个for循环绘制240个小格子(UIView)放置在盘子(UIView)上。

###方块类型、颜色、初始位置

  • 依据经典,得知8种基本类型,以及旋转产生的衍生类型11种,总共19种,使用一个类型枚举。
  • 每种类型方块都是由4个小格子组成,在二维上确定每种类型方块的4个格子的二维左边,然后用一个数组存储该4个坐标。
  • 方块类型随机产生,随机数为0-18,分别对应19种类型。
  • 方块颜色随机产生,随机数为0-3,有红蓝黄绿4种颜色共随机,但该方块的4个格子颜色一致。
  • 方块初始位置随机,根据盘子(12x20)的x轴的0-12来随机。

###方块存储

  • 首先,预生成方块,即下一个将要下落的方块,数组A存储。有两个作用:
    • 提示用户下个方块类型
    • 直接提取给数组B使用
  • 其次,生成方块,即当前正在下落的方块,数组B存储。直接从数组A拿取方块。
  • 第三,所有已停止下落的方块,用数组C存储。当数组B中的方块下落停靠时,将数组B中的方块移动到数组C中,同时将数组A中的方块移动到数组B:
    • B(当前下落方块) -> C(所有停靠方块);
    • A(将要下落方块) -> B(当前下落方块);
    • [方块 new] -> A(将要下落方块)

###方块移动

  • 正常下落。游戏开始,定时器设定当前下落方块,下落1格/0.1s。当判断下一格(x = x,y = y+1)在数组C中,则停止下落;同时生成新的方块,继续定时下落。

  • 左移、右移。若判断左一个(x=x-1,y=y)或右一个(x=x+1,y=y)在数组C中,则停止左右移动。

  • 加速下落。生成一个数字,比如5,则让该方块在0.1s进行五次正常下落。

  • 旋转。旋转会产生类型变化以及方块的重心偏移:

    • 使用变化后的类型方块
    • 依据旧方块位置,修改新方块的整体偏移位置
    • 计算出新方块的4个格子的二维坐标
    • 判断新方块是否会与数组C相交,若相交,停止旋转操作。
    • 若不相交,则用新方块代替旧方块,同时数组B更替,UI也更替。
  • 因以上五种移动操作,都是对当前方块UI操作,因为需要添加锁进行保护。

###方块消层

  • 在方块停靠时,for循环判断y轴从19-0层,数组C中的格子能否填满该层,能则移除这一层。同时计算消层之后,需要下落的高度。以及计算该次消层的总层数x100 = 分数,累计后得出总分数并显示。

###其它

  • 游戏速度选项
  • 游戏结束提醒
  • 再玩一次提醒
  • 再玩一次按钮选项
  • 整体布局调整,向经典看齐
  • 整体颜色调整,让眼睛舒服

About

iOS UIKit实现俄罗斯方块

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published