在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); 

至于你在这些数组中放置的对象,创建原型和构造函数可能是有用的,但是除非你打算向它们添加很多方法,否则你也可以只删除一个对象。