Project1

标题: 属性对比脚本 [打印本页]

作者: acv255    时间: 2015-9-20 11:13
标题: 属性对比脚本
尝试在帮助窗口里加个属性对比的计算,期望效果是:找出两件装备所有的属性(不重复),并将属性相减结果不为零的量显示出来。
基础属性param的对比很好做,因为equip.param都是自带0~7号所有属性,直接用 equip.params.each_with_index{|x,y| param2.push[@params[y], x- equip2.params[y]]} 就可以了(大概?)
但是features中的三个属性就想不出用什么办法抽取出来并进行计算了,因为features里的元素都是零散的,没有的属性不是为0而是直接没有。
而且A装备有的features B装备不一定有,这种情况想默认将没有该属性的装备视作该属性为0也不知道应该怎么实现。
求解决思路..
作者: taroxd    时间: 2015-9-20 12:04
本帖最后由 taroxd 于 2015-9-20 12:10 编辑

随手写的,可能出错,只看思路就好

RUBY 代码复制
  1. # a, b 为两个具有 features 的物品
  2. def compare_item(a, b)
  3.   # 为了更快速地索引,
  4.   # 制作一个 code => data_id => [value_a, value_b] 的表。
  5.   # 返回值即为这个 hash
  6.   result = Hash.new do |h1, code|
  7.     h1[code] = Hash.new do |h2, data_id|
  8.       h2[data_id] = []
  9.     end
  10.   end
  11.  
  12.   a.features.each do |feature|
  13.     result[feature.code][feature.data_id][0] = feature.value
  14.   end
  15.  
  16.   b.features.each do |feature|
  17.     result[feature.code][feature.data_id][1] = feature.value
  18.   end
  19.  
  20.   result
  21.  
  22.   # 获取结果后的用法:
  23.   # result.each do |code, data_id2value|
  24.   #   data_id2value.each do |data_id, (value_a, value_b)|
  25.   #
  26.   #     # value_a 和 value_b 可能为 nil。此时取 0 还是取 1 需要看情况判断。
  27.   #     # 在这里按照你的要求取 0。
  28.   #     value_a ||= 0
  29.   #     value_b ||= 0
  30.   #
  31.   #     do_something_with code, data_id, value_a - value_b
  32.   #   end
  33.   # end
  34. end





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1