2015-04-01 37 views
0

我試圖製作一個簡單的文本冒險/農業模擬器,但我是JavaScript新手,我一直在試圖規劃我的庫存系統如何工作。我的主要問題是有兩種主要類型的食品:食品/消費品和工具/耐用品。食物將以常規速度創造和消費,而工具則需要購買,並且每次使用都會失去耐用性。在JavaScript中創建一個簡單的庫存系統

我能想到的最簡單的解決方案是讓每個食物的數量成爲玩家的屬性(player.meat,player.vegetable等),因爲數量是唯一改變的。工具稍微複雜一點,所以我想我可以創建一個工具原型,然後給玩家一個庫存數組來存儲他們所有的工具。然而,我越想到它,我越是意識到食物也需要成爲原型(它也具有價格和營養價值等特性)。

我的腦袋現在正在旋轉,試圖想到這樣做的最有效方法。我是否創建了2個獨立的原型,然後給每個玩家一個數組?我是否需要爲陣列創建原型,以便跟蹤物品類型和數量?當我想修改它時,是否需要搜索數組中的每個項目?這似乎是不必要的複雜,但我真的不能想到任何簡單的事情。誰能幫忙?

回答

0

您可以保留一系列食品和一系列工具。這是一個創建食物並使用它的例子。

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(); 
0

重要的是不要在技術方面過度複雜。隨着遊戲玩法的不斷髮展,無論如何你都需要改變,所以只要你確定需要,簡單點就可以增加複雜性。

我假設你的意思是「基本類似於基類」。我建議不要這樣做,直到你進入你的項目。關於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

祝你好運,玩得開心。

0

如果你想創建一個簡單的方式來查看項目,並且你有一個唯一的,基於字符串的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); 

至於你在這些數組中放置的對象,創建原型和構造函數可能是有用的,但是除非你打算向它們添加很多方法,否則你也可以只刪除一個對象。