Python中如何编写网游物品制造成本计算器?
我是个超 low 程序爱好者 刚入门.
最近玩个网游,里面可以制造物品.想用 python 自己写个成本计算器,但是完全没思路呀.
制造一个游戏物品
比如
XX 零件 1 级 需要生产力 100 一类宝石 10 颗
XX 零件 2 级 需要生产力 200 XX 零件 1 级3 个 二类宝石 10 颗
XX 零件 3 级 需要生产力 400 XX 零件 2 级3 个 三类宝石 10 颗 一级材料 5 个
依次类推啦.
其中 X 类宝石 可以自己制造 也可以在玩家手上买
比如 一类宝石 需要生产力 10 一类矿石 10 个 一级材料 1 个
那么我想计算 XX 零件 N 级 需要的总成本价格和各类材料数量 .怎么写呢?
头都大了.
Python中如何编写网游物品制造成本计算器?
Excel 就行了,不满足还可以按 Alt+F12,新增模块,里面随意编程写自定义函数。
要写个网游物品成本计算器,核心就是处理好材料消耗和价格计算。我直接给你个实用的实现:
class Item:
def __init__(self, name, base_price=0):
self.name = name
self.base_price = base_price
self.recipes = [] # 可用的配方列表
def add_recipe(self, materials, yield_count=1):
"""添加一个配方:materials是{材料名: 数量}字典"""
self.recipes.append({
'materials': materials.copy(),
'yield': yield_count
})
def min_cost(self, price_dict, depth=0, max_depth=10):
"""计算最小成本,考虑递归合成"""
if depth > max_depth:
return float('inf')
# 如果有基础价格,直接使用
min_price = self.base_price
# 检查每个配方
for recipe in self.recipes:
recipe_cost = 0
valid = True
for mat_name, amount in recipe['materials'].items():
if mat_name not in price_dict:
valid = False
break
mat_item = price_dict[mat_name]
mat_price = mat_item.min_cost(price_dict, depth+1, max_depth)
if mat_price == float('inf'):
valid = False
break
recipe_cost += mat_price * amount
if valid:
unit_cost = recipe_cost / recipe['yield']
min_price = min(min_price, unit_cost) if min_price else unit_cost
return min_price if min_price != float('inf') else 0
class CostCalculator:
def __init__(self):
self.items = {}
def add_item(self, name, base_price=0):
self.items[name] = Item(name, base_price)
return self.items[name]
def calculate_all(self):
"""计算所有物品的成本"""
results = {}
for name, item in self.items.items():
cost = item.min_cost(self.items)
results[name] = cost
return results
def show_costs(self):
"""显示所有物品成本"""
costs = self.calculate_all()
print("物品成本清单:")
print("-" * 40)
for name, cost in sorted(costs.items(), key=lambda x: x[1], reverse=True):
print(f"{name:20} {cost:10.2f}")
return costs
# 使用示例
if __name__ == "__main__":
calc = CostCalculator()
# 定义基础材料
calc.add_item("铁矿", 10)
calc.add_item("木材", 5)
calc.add_item("皮革", 15)
# 定义中间物品
iron_bar = calc.add_item("铁锭")
iron_bar.add_recipe({"铁矿": 3}, yield_count=2) # 3铁矿=2铁锭
handle = calc.add_item("剑柄")
handle.add_recipe({"木材": 2, "皮革": 1})
# 定义最终物品
sword = calc.add_item("铁剑", base_price=100) # 商店售价
sword.add_recipe({"铁锭": 3, "剑柄": 1})
# 计算并显示
costs = calc.show_costs()
# 计算特定物品
print(f"\n铁剑成本: {costs['铁剑']:.2f}")
print(f"利润: {100 - costs['铁剑']:.2f}")
这个实现的关键点:
- 递归计算:
min_cost()方法会递归计算材料成本,避免循环依赖 - 多配方支持:一个物品可以有多个合成路径,自动选择最便宜的
- 产出数量:考虑配方产出数量(比如3铁矿产出2铁锭)
- 基础价格:可以直接设置物品的商店售价作为基准
扩展的话可以加:市场价格波动、合成成功率、技能加成、批量生产折扣这些功能。
简单说就是处理好材料树遍历和成本比较。
不好意思,打错,Alt + F11。
Excel 最好的,网游市场的物价会有波动,写工具没有什么用
[https://www.ceve-market.org/index/]
除非 EVE 这种开放 API 能够实时获取的工具才能做,但是也很容易崩
个人 /工作室最好还是建个通用 Excel 然后动态更新吧,多学学 Excel 的函数就好
Excel 好评 VB 好评
配表
Excel 是处理分析游戏数据最方便的了,虽然知道你想活学活用,但维护起来还是 excel 方便
隐约想起 《 Head First 设计模式》里面介绍的装饰器模式…

