我正在开发一个工具来优化一个游戏的设备,我不知道如何解决这个问题。这是一款有头盔、盔甲和靴子等物品的游戏。每个项目都有攻击、防御和健康等统计数据。对于如何对大量的项目进行排序以找到最佳的组合,有什么建议吗?
我目前的想法是为每个项目类别创建单独的数组:
helmets = [{id:0, health:100, attack:150}, {} ...];
armor = [{id:23, health:200, attack:70}, {} ...];然后根据一个特定的属性对每个数组进行排序(找到最健康的头盔,最多的防御装甲)。这显然是一种可怕的分类方式,为不同类别的大项目留下了空间。我还计划实现“焦点筛选器”,这样用户就可以获得专注于攻击或防御等属性的项目。
总的来说,我不太清楚该使用什么高级策略,以及如何做到这一点,并且对所有建议都持开放态度。
发布于 2018-03-06 22:26:54
我认为最佳实践是一个肮脏的术语,因为它是如此基于意见。
我在想一个能包装你物品的单身汉也许是个好主意。它将允许您创建一个可用的API,它将使您的代码库更易于维护和更好地查看。
我喜欢保持这类项目的数据正常化。这意味着每件事都是关系型的,它使以普通方式访问不同的数据变得非常容易。我创建了一个REPL让你到处玩
var item = (function () {
var items = {
helmet: {
byId: {
'Helmet of Smiting': {
id: 'Helmet of Smiting',
attack: 1000,
defense: 50
},
'Cheap Helmet': {
id: 'Cheap Helmet',
attack: 1,
defense: 2
},
'Steel Helmet': {
id: 'Steel Helmet',
attack: 50,
defense: 100
},
},
allIds: ['Helmet of Smiting', 'Cheap Helmet', 'Steel Helmet']
},
shield: {
byId: {
'Shield of Smiting': {
id: 'Shield of Smiting',
attack: 1000,
defense: 50
},
'Cheap Shield': {
id: 'Cheap Shield',
attack: 1,
defense: 2
},
'Steel Shield': {
id: 'Steel Shield',
attack: 50,
defense: 100
},
},
allIds: ['Shield of Smiting', 'Cheap Shield', 'Steel Shield']
}
};
function sortItems (type, attr) {
var itemType = items[type];
// duplicate the items
var sortedItems = itemType.allIds.slice();
sortedItems.sort(function (a, b) {
return itemType.byId[b][attr] - itemType.byId[a][attr];
});
return sortedItems;
}
var itemsConstructor = Object.create({
add: function (type, id, att, def) {
items[type].allIds.push(id);
items[type].byId[id] = {
id: id,
attack: att,
defense: def
}
},
get: function (type, id) {
if (typeof type === 'undefined') {
return items;
} else {
if (typeof id === 'undefined') {
return items[type];
} else {
return items[type].byId[id];
}
}
},
getStrongest: function (type, attr) {
return sortItems(type, attr)[0];
},
getStrongestSet: function (attr) {
var allItemTypes = Object.keys(items);
var strongestItems = {};
for (var i = 0; i < allItemTypes.length; ++i) {
var type = allItemTypes[i];
strongestItems[type] = sortItems(type, attr)[0];
}
return strongestItems;
}
});
return itemsConstructor;
})();
item.add('helmet', 'New Awesome Helmet', 999999, 999999);
console.log(item.getStrongestSet('defense'));
解释如下
https://stackoverflow.com/questions/49138808
复制相似问题