本项目是用于 Swift 初学者的一个教学练习项目,我们最终的目的是基于 Swift 做出下面这样的一个贪吃蛇小游戏。
完整 Demo 地址:RickeyBoy/SnakeGame
我的笔记文章合集地址:RickeyBoy/Rickey-iOS-Notes
如果大家感兴趣,欢迎点赞收藏~
步骤 3:完善 GameView
具体的过程,可以下载项目之后看具体的注释。可以稍微看一下下图的构造,可以看到第一个标记点,整个棋盘中的元素都是基于刚才写的 UnitView 基本单元格。
简单讲解一下代码,GameView 作为游戏的核心视图类,它的主要职责就是管理整个游戏棋盘的布局。
GameView 的初始化主要分为三个步骤:
-
布局棋盘 (layoutBoxes)
- 计算行列数量
- 计算边距确保居中显示
- 创建并布局每个 UnitView 单元格
- 将所有单元格存储在 mapArrays 中
-
初始化蛇 (initialSnakeBodys)
- 在固定位置(7,5)创建蛇头
- 添加两个蛇身体节点(6,5)和(5,5)
- 设置对应的 unitType
-
初始化食物 (initialFoods)
- 随机生成食物的位置坐标
- 将对应位置的 UnitView 标记为食物
知识点:Swift 中的权限管理
在 Swift 中,一共有这样几种访问权限:
访问级别 | 定义 | 访问范围 |
---|---|---|
public | 公开 | 跨模块访问 |
internal | 内部 | 模块内访问 |
private | 私有 | 源文件内访问 |
fileprivate | 文件私有 | 定义文件内访问 |
可以注意到,在上面的文件中,部分地方我使用了 public,部分地方我用了 private,这是因为内部的方法我不希望给其他 Class 调用。
那么我们为什么要进行权限控制呢?权限控制的主要目的是为了封装和安全性:
- 封装:隐藏实现细节,只暴露必要的接口,使得代码更易于维护和理解。
- 安全性:限制对敏感数据和功能的访问,防止意外或恶意的修改。
- 模块化:促进代码的模块化,每个模块只关注其内部的职责,降低模块间的耦合。
知识点:注释的技巧
可以看到我在代码中使用了// MARK: -
标记,这是一种非常好用的注释方式:
- 组织代码:通过添加
// MARK: -
来标记代码的不同部分,使得代码结构更加清晰,便于阅读和维护。 - 导航辅助:许多代码编辑器和 IDE 会使用这些标记来提供更好的导航功能,允许开发者快速跳转到特定的代码段。
- 文档生成:在生成文档时,
// MARK: -
可以帮助文档工具组织和分类内容。
比如这里的导航辅助,我们点击文件上方导航栏:
就可以看到使用 // MARK: -
标记的部分:
类似的方法还有:
// TODO:
标记遗留的 todo// FIXME:
标记需要修复的错误
效果如下图: