Re: [请问] 树状资料 阶层资料 整理方式...吧?

楼主: arrenwu (键盘的战鬼)   2022-02-12 09:39:05
※ 引述《kindyayaya (Auto魂)》之铭言:
: 但是游戏UX做得有够烂,必须要玩家自己去记整个配方,有够繁杂 干
: 希望可以有个清单或工具,点一下最高级的目标设施就知道他总共需要哪些材料以及数量
: 想请问有没有适当的工具,或者有关键字可以让人去继续深入?
: 感谢
: ps.合成范例如下
: 死亡之浪(目标)=大爆发+瘟疫喷洒器+瘟疫
: 大爆发=魔法齿轮+火箭炸弹+流星雨
: 火箭炸弹=爆发之箭+同时射击
: 爆发之箭=魔法齿轮+弩+爆发
: 弩=箭+投石器
: 投石器=箭+巨大化
: 同时射击=箭+箭
: 流星雨=陨石+同时射击+爆发
: 陨石=爆发+焚烧+落石
: 同时射击=箭+箭
: 黄字为底材,这样完成1/3,后面两个设施就不打了
: 到底我要几支箭几个齿轮阿 崩溃(T_T)
我写了一个简单的python script,中间处理不算太有效率,
但相信对一个游戏应该都够快了
item_database = {
'大爆发':['魔法齿轮','火箭炸弹','流星雨'],
'火箭炸弹':['爆发之箭','同时射击'],
'爆发之箭':['魔法齿轮','弩','爆发'],
'弩':['箭','投石器'],
'投石器':['箭','巨大化'],
'同时射击':['箭','箭'],
'流星雨':['陨石','同时射击','爆发'],
'陨石':['爆发','焚烧','落石'],
'同时射击':['箭','箭']
}
values = set()
for key in item_database:
values.add(key)
values = values.union(set(item_database[key]))
memo = {} # to speed up
def decomposite(item):
"""
returns the elements
"""
assert item in values, "{} is not in the database".format(item)
if item not in item_database:
# This is an element
return [item]
if item in memo:
return memo[item]
ingredients = item_database[item]
result = []
for sub_item in ingredients:
result.extend(decomposite(sub_item))
memo[item] = result
return result
def get_elements(item):
result = {}
temp = decomposite(item)
for ingredient in temp:
if ingredient in result:
result[ingredient] += 1
else:
result[ingredient] = 1
return result
print(get_elements('大爆发'))
执行结果:
{'魔法齿轮': 2, '箭': 6, '巨大化': 1, '爆发': 3, '焚烧': 1, '落石': 1}
根据你的需要,可以在 item_database 去加入其他的合成食谱
然后用 get_elements 去算你需要的东西
这样对你有帮助吗?
作者: kirimaru73 (雾丸)   2022-02-12 09:40:00
这种我会手痒想去写recursive 然后我怎么管不住这手呢我会写result.append(get_elements(ingredient))然后把恶心的部分全部塞再更里面缺点是写坏的时候会死比较多脑细胞
作者: madrac (madrac)   2022-02-12 09:56:00
我也觉得就 recursive,写的时间也是成本再呼效率的话顶多加个 table lookup
作者: kindyayaya (Auto魂)   2022-02-12 09:58:00
感谢大大特地回文跟示范,很有帮助!
作者: OldTjikko (欧洲云杉)   2022-02-12 10:03:00
判断items是否在item_database里那段,不用针对item_database.keys()做检查也能成功吗
作者: dustlike (灰尘)   2022-02-12 10:30:00
递回就好啦 等真的很卡再说
作者: Inelegant   2022-02-12 10:51:00
理论上只是单机游戏的配方表不会跑太久吧XD这种应该也顶多几百笔而已吧 如果上千笔就…我会先放弃把他整理成文本XDDD(不
作者: kirimaru73 (雾丸)   2022-02-12 11:21:00
原PO的写法不是完全的递回 但概念是递回没错而且我觉得这种写法比较好 出包时痛苦会比较少一点

Links booklink

Contact Us: admin [ a t ] ucptt.com