游戏用户界面的多视图实现与控制器优化
1. 多视图界面的引入
在开发游戏的用户界面时,我们可以为同一游戏实现不同的用户界面。由于模型类与第一个视图的耦合度很低,仅通过接口调用更新视图的方法,因此可以在不改变模型类的情况下替换用户界面。
新的界面与之前不同,用户通过点击按钮来移除令牌,而不是输入要移除的令牌数量。和之前的界面一样,当某些组件不适用时会被禁用,例如黑方玩家的按钮在某些情况下会显示为禁用状态,当堆中只剩下 2 个令牌时,“移除 3 个令牌”的按钮对双方玩家都会被禁用。并且在适当的时候会为获胜玩家显示“Winner!”。
我们可以像之前那样将这个用户界面写成一个大视图,但这个视图总共需要管理九个组件,会增加整体的复杂性。而且红方玩家的四个组件和黑方玩家的组件管理方式几乎相同,这表明一些好的抽象可能会简化问题。
由于模型类预先考虑了多个视图,它有一个视图列表,每次模型状态改变时,会遍历该列表并通知每个视图进行自我更新。因此,我们可以将整体视图分解为多个子视图。每个子视图会将自己添加到模型的视图列表中,并在适当的时候调用其更新视图的方法。
这个版本的界面将使用三个子视图:一个用于红方玩家,一个用于黑方玩家,一个用于显示堆的大小。同时,还有一个总视图来组织这三个子视图。
将视图划分为多个子视图有两个明显的优点:
- 每个视图可以专注于整体任务的一小部分,使其更简单、更易于理解、编写和调试。
- 子视图可以轻松更改甚至替换,而不用担心破坏界面的其他部分。
2. 各视图的实现
2.1 NimView 的实现
NimView 是游戏的整体
超级会员免费看
订阅专栏 解锁全文

被折叠的 条评论
为什么被折叠?



