开发Ogame交易脚本:按指定条件计算资源买卖数量
Ogame资源交易配比自动计算方案
需求核心
基于现有资源、自定义交易比例、目标资源配比,自动计算各资源的买卖调整量,输出最终资源量及配比,支持任意类型资源的售卖场景。以下提供Excel表格和Python脚本两种实现方案。
Excel表格实现
1. 输入区设置
直接在表格中定义以下输入单元格:
- 现有资源:
A2(金属)、B2(晶体)、C2(重氢),比如填入100, 0, 0 - 交易比例:
E2(1晶体兑换金属数)、F2(1重氢兑换金属数),比如填入1.35, 2.61 - 目标配比:
H2(金属占比)、I2(晶体占比)、J2(重氢占比),比如填入10, 6, 2
2. 核心计算公式
在对应单元格输入以下公式:
- 等价金属总量(所有资源换算成金属后的总价值):
=A2 + B2*E2 + C2*F2(放在D2) - 目标总份数:
=SUM(H2:J2)(放在K2) - 各资源需要的等价金属量:
- 金属:
=D2*(H2/K2)(L2) - 晶体:
=D2*(I2/K2)(M2) - 重氢:
=D2*(J2/K2)(N2)
- 金属:
- 资源调整量(正数=买入,负数=卖出):
- 金属:
=L2 - A2(O2) - 晶体:
=(M2/E2) - B2(P2) - 重氢:
=(N2/F2) - C2(Q2)
- 金属:
- 最终资源及配比:
- 最终金属:
=A2 + O2(R2) - 最终晶体:
=B2 + P2(S2) - 最终重氢:
=C2 + Q2(T2) - 最终配比:
=ROUND(R2/MAX(R2:S2:T2),2)&":"&ROUND(S2/MAX(R2:S2:T2),2)&":"&ROUND(T2/MAX(R2:S2:T2),2)(U2)
- 最终金属:
Python脚本实现
代码示例
def calculate_resource_trade(current_resources, exchange_rates, target_ratio): # 计算所有资源等价的金属总量 total_equivalent_metal = ( current_resources['metal'] + current_resources['crystal'] * exchange_rates['crystal_to_metal'] + current_resources['deuterium'] * exchange_rates['deuterium_to_metal'] ) # 计算目标配比的总份数及各资源占比 total_ratio = sum(target_ratio) ratio_m, ratio_c, ratio_d = target_ratio # 换算各资源需要的等价金属量 required_metal_eq = total_equivalent_metal * (ratio_m / total_ratio) required_crystal_eq = total_equivalent_metal * (ratio_c / total_ratio) required_deuterium_eq = total_equivalent_metal * (ratio_d / total_ratio) # 计算各资源的调整量(正=买入,负=卖出) metal_adjust = required_metal_eq - current_resources['metal'] crystal_adjust = (required_crystal_eq / exchange_rates['crystal_to_metal']) - current_resources['crystal'] deuterium_adjust = (required_deuterium_eq / exchange_rates['deuterium_to_metal']) - current_resources['deuterium'] # 计算最终资源量 final_metal = current_resources['metal'] + metal_adjust final_crystal = current_resources['crystal'] + crystal_adjust final_deuterium = current_resources['deuterium'] + deuterium_adjust # 生成简化的最终配比 max_final = max(final_metal, final_crystal, final_deuterium) final_ratio = ( f"{round(final_metal/max_final, 2)}:" f"{round(final_crystal/max_final, 2)}:" f"{round(final_deuterium/max_final, 2)}" ) return { 'metal_adjust': round(metal_adjust, 2), 'crystal_adjust': round(crystal_adjust, 2), 'deuterium_adjust': round(deuterium_adjust, 2), 'final_resources': { 'metal': round(final_metal, 2), 'crystal': round(final_crystal, 2), 'deuterium': round(final_deuterium, 2) }, 'final_ratio': final_ratio } # 示例调用(对应题目中的初始条件) if __name__ == "__main__": current = {'metal': 100, 'crystal': 0, 'deuterium': 0} rates = {'crystal_to_metal': 1.35, 'deuterium_to_metal': 2.61} target = [10, 6, 2] result = calculate_resource_trade(current, rates, target) print("资源调整量(正买入/负卖出):") print(f"金属:{result['metal_adjust']}") print(f"晶体:{result['crystal_adjust']}") print(f"重氢:{result['deuterium_adjust']}") print("\n最终资源:") for res, val in result['final_resources'].items(): print(f"{res}: {val}") print(f"\n最终配比:{result['final_ratio']}")
扩展说明
- 支持任意资源售卖:调整量为负数时,自动对应卖出该资源,等价价值会纳入总金属量计算
- 灵活修改参数:直接修改
current、rates、target变量即可适配不同场景 - 精度控制:代码中用
round保留两位小数,可根据需求调整保留位数
内容的提问来源于stack exchange,提问作者Sanyo4ever
相关产品推荐
相关产品推荐

