49、游戏用户界面的多视图实现与控制器优化

游戏用户界面的多视图实现与控制器优化

1. 多视图界面的引入

在开发游戏的用户界面时,我们可以为同一游戏实现不同的用户界面。由于模型类与第一个视图的耦合度很低,仅通过接口调用更新视图的方法,因此可以在不改变模型类的情况下替换用户界面。

新的界面与之前不同,用户通过点击按钮来移除令牌,而不是输入要移除的令牌数量。和之前的界面一样,当某些组件不适用时会被禁用,例如黑方玩家的按钮在某些情况下会显示为禁用状态,当堆中只剩下 2 个令牌时,“移除 3 个令牌”的按钮对双方玩家都会被禁用。并且在适当的时候会为获胜玩家显示“Winner!”。

我们可以像之前那样将这个用户界面写成一个大视图,但这个视图总共需要管理九个组件,会增加整体的复杂性。而且红方玩家的四个组件和黑方玩家的组件管理方式几乎相同,这表明一些好的抽象可能会简化问题。

由于模型类预先考虑了多个视图,它有一个视图列表,每次模型状态改变时,会遍历该列表并通知每个视图进行自我更新。因此,我们可以将整体视图分解为多个子视图。每个子视图会将自己添加到模型的视图列表中,并在适当的时候调用其更新视图的方法。

这个版本的界面将使用三个子视图:一个用于红方玩家,一个用于黑方玩家,一个用于显示堆的大小。同时,还有一个总视图来组织这三个子视图。

将视图划分为多个子视图有两个明显的优点:
- 每个视图可以专注于整体任务的一小部分,使其更简单、更易于理解、编写和调试。
- 子视图可以轻松更改甚至替换,而不用担心破坏界面的其他部分。

2. 各视图的实现
2.1 NimView 的实现

NimView 是游戏的整体

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值