首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定最佳项目统计组合的最佳实践

确定最佳项目统计组合的最佳实践
EN

Stack Overflow用户
提问于 2018-03-06 19:44:56
回答 1查看 41关注 0票数 0

我正在开发一个工具来优化一个游戏的设备,我不知道如何解决这个问题。这是一款有头盔、盔甲和靴子等物品的游戏。每个项目都有攻击、防御和健康等统计数据。对于如何对大量的项目进行排序以找到最佳的组合,有什么建议吗?

我目前的想法是为每个项目类别创建单独的数组:

代码语言:javascript
复制
helmets = [{id:0, health:100, attack:150}, {} ...];
armor = [{id:23, health:200, attack:70}, {} ...];

然后根据一个特定的属性对每个数组进行排序(找到最健康的头盔,最多的防御装甲)。这显然是一种可怕的分类方式,为不同类别的大项目留下了空间。我还计划实现“焦点筛选器”,这样用户就可以获得专注于攻击或防御等属性的项目。

总的来说,我不太清楚该使用什么高级策略,以及如何做到这一点,并且对所有建议都持开放态度。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 22:26:54

我认为最佳实践是一个肮脏的术语,因为它是如此基于意见。

我在想一个能包装你物品的单身汉也许是个好主意。它将允许您创建一个可用的API,它将使您的代码库更易于维护和更好地查看。

我喜欢保持这类项目的数据正常化。这意味着每件事都是关系型的,它使以普通方式访问不同的数据变得非常容易。我创建了一个REPL让你到处玩

代码语言:javascript
复制
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'));

解释如下

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49138808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档