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中如何编写网游物品制造成本计算器?


8 回复

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}")

这个实现的关键点:

  1. 递归计算min_cost()方法会递归计算材料成本,避免循环依赖
  2. 多配方支持:一个物品可以有多个合成路径,自动选择最便宜的
  3. 产出数量:考虑配方产出数量(比如3铁矿产出2铁锭)
  4. 基础价格:可以直接设置物品的商店售价作为基准

扩展的话可以加:市场价格波动、合成成功率、技能加成、批量生产折扣这些功能。

简单说就是处理好材料树遍历和成本比较。

不好意思,打错,Alt + F11。

Excel 最好的,网游市场的物价会有波动,写工具没有什么用

[https://www.ceve-market.org/index/]
除非 EVE 这种开放 API 能够实时获取的工具才能做,但是也很容易崩


个人 /工作室最好还是建个通用 Excel 然后动态更新吧,多学学 Excel 的函数就好

Excel 好评 VB 好评

配表

Excel 是处理分析游戏数据最方便的了,虽然知道你想活学活用,但维护起来还是 excel 方便

隐约想起 《 Head First 设计模式》里面介绍的装饰器模式…

回到顶部