Answers:
对于如何构造项目实例以执行多个角色,Gregory Weir的答案是我最喜欢的。
要从文件加载:
首先,使用YAML。YAML是一种功能强大的数据描述语言;它可以被相对快速地解析,由人类读取和编辑,支持二进制数据,并且对于大多数编程语言(包括Java)都存在库。这解决了“如何将文件中的数据存储到对象中?”
其次,使用flyweight模式。您从这些文件中读取的大多数数据都是静态的。它不会因每个实例而改变(“斧头造成1d10基础伤害,但会击碎木头而不是石头” –玩家拥有的所有五个轴都是如此)。您实际从YAML文件中读取的是这些柏拉图式的定义,并且您的单个商品实例具有对这些商品的无所有权(和常量)引用,以及按实例数据,例如“我摔破前有多少摆动?”,“玩家给了吗?我有一个自定义名称吗?”,依此类推。
通过在单个对象中共享跨实例数据,您可以保留大量内存,并且可以轻松更新项目而不会保留游戏状态(保存游戏或玩家数据库)。
因此,您的类结构如下所示:
Component(不是Composite)设计模式非常适合此目的:http : //gameprogrammingpatterns.com/component.html
基本上,Ax将是包含WeaponComponent和ToolComponent(可能是)的Item类的实例。要测试是否可以将某物用作武器,请检查其是否已附加WeaponComponent,然后与该WeaponComponent实例进行交谈以获取该物品的武器信息。
当然,从文件加载是一个单独的练习。