本项目为基于Objective-C和UIKit的俄罗斯方块App,本项目使用代码布局,具有如下特点:
- 功能完整:包含俄罗斯方块游戏中8种基本方块的旋转、左右移动操作,额外提供游戏的暂停和重置功能。
- 界面美观:模拟真实游戏机外表
- 操作真实:按钮点击提供音效反馈
- 玩法扩展:手动选择不同速度,挑战不同游戏难度
规定构成BoardView的最小单位是20 x 20大小的灰色Grid。以Grid为单位,构建width为10 Grid,height为20Grid的BorderView。
规定构成Bricks的最小单位是20 x 20大小的黑色BrickView。使用单例BrickManager,记录每一类型的Bricks四个方块的坐标
在绘制的时候需要通过gridToFrame函数将相对大小转换为真实的大小。
定义三个数组
@property (nonatomic,strong) NSMutableArray<BrickView*>* curBricks;
@property (nonatomic,strong) NSMutableArray<BrickView*>* existBricks;
@property (nonatomic,strong) NSMutableArray<BrickView*>* nextBricks;
curBricks:当前正在下降的方块
existBricks:固定在borderView上的,静止不动的方块
nextBricks:下一个降落的方块
nextBricks随机生成,curBricks从nextBricks中获得最新的方块
- 方块移动
判断移动后的方块是否会越界或发生碰撞,若不会,则更新方块的frame
- 旋转
利用BrickManager生成旋转后的方块,判断旋转后的方块是否会越界或发生碰撞,若不会,则根据方块的中心点,计算偏移量。根据偏移量将新方块更新到界面上。
根据existBricks,从下到上判断BrickView是否铺满一整行,若铺满则消除并使消除的数量加一。若未铺满,则根据消除数量向下移动方块。
更新玩家分数为消除数量*100分。
更为详细的文档,可以查看
https://bytedancecampus1.feishu.cn/docx/doxcnPXfDaNa78GtZDEMs2uhuyf