Python模拟暴击概率40%时的攻击操作

一、概率增量

这部分内容在前面讲解过,这里直接上代码

# _*_ coding: utf-8 _*_
# @Author : ******
# @Time   : 2022/8/24 9:48
# @File   : PseudoRandomDistribution.py
# @Project: TestCase
import math


class PRD:

    def __init__(self):
        # 环境
        self.env = None
        # 精度
        self.precision = 0.0000000000001

    def log_out(self, content):
        if "DEBUG" == self.env:
            print(content)

    def sum_arithmetic_sequence(self, N):
        """
        等差数列前N项求和
        :param N:第N项
        :return:和
        """
        res = 0
        for i in range(N + 1):
            res += i
        return res

    def get_avgp_by_c(self, c):
        """
        通过c求得Nmax次操作中的平均概率
        :param c:概率增量
        :return:平均概率
        """
        # 初始化变量
        p_sum_pre_success = 0
        p_sum = 0
        # 计算c值对应的最大操作次数
        Nma
AttributeError: 'Shikigami' o### 用蒙特卡罗模拟优化《阴阳师》魂土“三修罗”阵容 在《阴阳师》的魂土副本(如高层御魂副本)中,“三修罗”阵容(如阿修罗+烬天玉藻前+鬼王酒吞童子等)需要高效稳定的输出和速度配置。**蒙特卡罗模拟(MCS)** 可以通过随机试验帮助玩家优化阵容的胜率、通关间、稳定性等指标。以下是具体实现思路: --- #### **1. 确定关键变量与目标** 蒙特卡罗模拟的核心是**量化不确定性**。针对魂土三修罗阵容,需定义以下变量: - **式神属性**:攻击力、暴击率、暴击伤害、速度、御魂套装(破势/狂骨/心眼)。 - **战斗机制**:技能触发概率(如阿修罗被动)、鬼火消耗、敌方防御/血量、行动顺序(速度条逻辑)。 - **随机因素**:御魂触发(如针女)、敌方反击概率(如返魂香)。 - **优化目标**: - **通关间**:平均回合数或秒数(需≤30秒)。 - **稳定性**:胜率(需≥99%)。 - **资源消耗**:鬼火是否足够循环技能。 --- #### **2. 构建战斗模型** 将战斗流程抽象为可计算的逻辑链: 1. **速度排序**:根据式神速度随机化初始行动条(考虑速度浮动±5%)。 2. **技能释放**: - 阿修罗:优先释放3技能(群体伤害),若鬼火不足则普攻。 - 烬天玉藻前:3技能消耗鬼火,需计算鬼火是否足够循环。 3. **伤害计算**: - 基础伤害公式: ``` 伤害 = 攻击力 × 技能系数 × (1 + 暴击伤害) × 御魂加成 × 防御减伤 ``` - 敌方防御简化:假设防御减伤为固定比例(如50%)。 4. **随机事件**: - 暴击判定(根据暴击率随机触发)。 - 御魂效果(如破势对70%血量以上目标增伤40%)。 --- #### **3. 蒙特卡罗模拟步骤** 以下以Python伪代码为例,模拟1万次战斗: ```python import random def simulate_battle(): # 初始化式神属性 a_attack = 10000 # 阿修罗攻击力 a_crit_rate = 1.0 # 暴击率100% a_crit_dmg = 3.0 # 暴击伤害300% a_speed = 160 # 速度 # 敌方属性 enemy_hp = 500000 enemy_defense = 0.5 # 减伤50% # 战斗循环 total_damage = 0 turns = 0 while enemy_hp > 0 and turns < 5: # 最多5回合 # 阿修罗释放3技能(假设技能系数为3.0,破势增伤40%) damage = a_attack * 3.0 * a_crit_dmg * 1.4 * enemy_defense enemy_hp -= damage total_damage += damage turns += 1 # 返回是否通关(假设敌方血量≤0为胜利) return enemy_hp <= 0 # 运行1万次模拟 win_count = 0 for _ in range(10000): if simulate_battle(): win_count += 1 win_rate = win_count / 10000 print(f"胜率:{win_rate * 100}%") ``` --- #### **4. 实际优化场景举例** **问题**:阿修罗速度160,偶尔被敌方超车导致翻车。 **模拟优化**: 1. **调整速度变量**:将阿修罗速度从160逐步提升至170,每次模拟1000次战斗。 2. **统计胜率与通关间**: | 速度 | 胜率 | 平均通关间(秒) | |------|------|-------------------| | 160 | 98% | 28 bject has no attribute 'hp'
最新发布
04-05
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值