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