精華區beta C_Chat 關於我們 聯絡資訊
※ 引述《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 去算你需要的東西 這樣對你有幫助嗎? -- 讓苦命驅魔師愛上這個世界的方法 https://i.imgur.com/pBiFmqH.jpg https://i.imgur.com/XDz87ba.jpg -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 98.45.135.233 (美國) ※ 文章網址: https://www.ptt.cc/bbs/C_Chat/M.1644629947.A.A10.html
kirimaru73: 這種我會手癢想去寫recursive 然後我怎麼管不住這手呢 02/12 09:40
我上面是用遞迴啊 遞迴最無腦了
kirimaru73: 我會寫result.append(get_elements(ingredient)) 02/12 09:44
kirimaru73: 然後把噁心的部分全部塞再更裡面 02/12 09:45
kirimaru73: 缺點是寫壞的時候會死比較多腦細胞 02/12 09:45
madrac: 我也覺得就 recursive,寫的時間也是成本 02/12 09:56
madrac: 再呼效率的話頂多加個 table lookup 02/12 09:57
kindyayaya: 感謝大大特地回文跟示範,很有幫助! 02/12 09:58
OldTjikko: 判斷items是否在item_database裡那段,不用針對item_da 02/12 10:03
OldTjikko: tabase.keys()做檢查也能成功嗎 02/12 10:03
https://www.stackvidhya.com/check-if-key-exists-in-dictionary-python/ 那是一樣的寫法 你第一套學的語言是 static-typed 的語言齁~XD 還是你是在說如果輸入的 item 不在 item_database 裡面會得到不對的結果? 那是個該擋住的東西沒錯 我上面加了一點東西進去 ※ 編輯: arrenwu (98.45.135.233 美國), 02/12/2022 10:21:48
dustlike: 遞迴就好啦 等真的很卡再說 02/12 10:30
Inelegant: 理論上只是單機遊戲的配方表不會跑太久吧XD 02/12 10:51
Inelegant: 這種應該也頂多幾百筆而已吧 如果上千筆就…我會先放 02/12 10:54
Inelegant: 棄把他整理成文本XDDD(不 02/12 10:54
kirimaru73: 原PO的寫法不是完全的遞迴 但概念是遞迴沒錯 02/12 11:21
kirimaru73: 而且我覺得這種寫法比較好 出包時痛苦會比較少一點 02/12 11:21