在JavaScript中创建一个简单的库存系统
我试图制作一个简单的文本冒险/农业模拟器,但我是JavaScript新手,我一直在试图规划我的库存系统如何工作。我的主要问题是有两种主要类型的食品:食品/消费品和工具/耐用品。食物将以常规速度创造和消费,而工具则需要购买,并且每次使用都会失去耐用性。在JavaScript中创建一个简单的库存系统
我能想到的最简单的解决方案是让每个食物的数量成为玩家的属性(player.meat,player.vegetable等),因为数量是唯一改变的。工具稍微复杂一点,所以我想我可以创建一个工具原型,然后给玩家一个库存数组来存储他们所有的工具。然而,我越想到它,我越是意识到食物也需要成为原型(它也具有价格和营养价值等特性)。
我的脑袋现在正在旋转,试图想到这样做的最有效方法。我是否创建了2个独立的原型,然后给每个玩家一个数组?我是否需要为阵列创建原型,以便跟踪物品类型和数量?当我想修改它时,是否需要搜索数组中的每个项目?这似乎是不必要的复杂,但我真的不能想到任何简单的事情。谁能帮忙?
您可以保留一系列食品和一系列工具。这是一个创建食物并使用它的例子。
function FoodItem(options){
var options = options || {};
this.name = options.name || "DefaultFood";
this.amount = options.amount || 100;
this.decrease = options.decrease || 1;
this.eat = function(){
this.amount -= this.decrease;
if (this.amount < 0){
console.log("Food Gone");
}
}
}
// Then create new foods.
var carrots = new FoodItem({
name:"Carrots",
amount:50,
decrease:2
});
carrots.eat();
重要的是不要在技术方面过度复杂。随着游戏玩法的不断发展,无论如何你都需要改变,所以只要你确定需要,简单点就可以增加复杂性。
我假设你的意思是“基本类似于基类”。我建议不要这样做,直到你进入你的项目。关于JS的一件很酷的事情,往往会让经过培训的编程人员感到困惑,因为对象是“糊糊的”,您可以将方法添加到每个对象或将其删除到您的内容。对于嵌套的子对象也是如此,因此您可以保留清单中的所有内容,并且不会在以后限制自己。
像这样的东西是我想到的第一件事。
player.inventory = {
tools: [
],
food: [
]
};
// when player picks up hammer
player.inventory.push({
name: 'hammer',
icon: 'images/hammer.png',
effect: function(target) {
console.log('whacked the ' + target.name);
}
});
最重要的是错在工程不足,而不是过度工程。这有时被称为compression-oriented programming
祝你好运,玩得开心。
如果你想创建一个简单的方式来查看项目,并且你有一个唯一的,基于字符串的ID(数字或名称),你可以使用一个对象作为散列。当你想要再取回
player.tools['hammer'] = new Tool(...);
然后,你可以这样做:
var player = {
tools: {}
};
然后,当该玩家获得一个新的工具,你可以添加工具散列的一个实例:
player.tools['hammer'].durability -= wear;
使用下划线,您可以轻松地重复这些对象作为一个数组:
var inventoryWorth = _.reduce(player.tools, function(totalCost, tool) {
return totalCost + tool.cost;
}, 0);
至于你在这些数组中放置的对象,创建原型和构造函数可能是有用的,但是除非你打算向它们添加很多方法,否则你也可以只删除一个对象。