在 JavaScript 中创建一个简单的库存系统

新手上路,请多包涵

我正在尝试制作一个简单的文本冒险/农业模拟器,但我是 JavaScript 的新手,而且我一直在尝试计划我的库存系统将如何工作。我遇到的主要问题是有两种主要类型的物品:食品/消耗品和工具/耐用品。食物将以固定的速度制造和消耗,而工具则需要购买,并且每次使用都会失去耐久度。

我能想到的最简单的解决方案是让每个食物的数量成为玩家的属性(player.meat、player.vegetable 等),因为数量是唯一改变的东西。工具有点复杂,所以我想我可以创建一个工具原型,然后给玩家一个可以存储他们所有工具的库存数组。然而,我想得越多,我就越意识到食物也需要成为原型(它还具有价格和营养价值等特性)。

我的头现在有点旋转,试图想出最有效的方法。我是否创建 2 个单独的原型,然后为玩家分别提供一个数组?我是否需要为数组创建一个原型,以便它可以跟踪项目类型和数量?当我想修改它时,我是否需要搜索数组中的每一项?这似乎不必要地复杂,但我真的想不出更简单的事情。谁能帮忙?

原文由 Adam 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 168
1 个回答

如果您想创建一种简单的方法来查找项目并且您有一个唯一的、基于字符串的 ID(数字或名称),您可以使用对象作为哈希。

 var player = {
  tools: {}
};

然后,当该玩家获得新工具时,您可以将该工具的实例添加到散列中:

 player.tools['hammer'] = new Tool(...);

然后当你想稍后检索它时,你可以做类似的事情:

 player.tools['hammer'].durability -= wear;

使用下划线,您可以像数组一样轻松地迭代这些对象:

 var inventoryWorth = _.reduce(player.tools, function(totalCost, tool) {
  return totalCost + tool.cost;
}, 0);

至于您放入这些数组中的对象,创建原型和构造函数可能会有用,但您也可以只剔除一个对象,除非您计划向它们添加很多方法。

原文由 Andrew Noyes 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题