通过与 Jira 对比,让您更全面了解 PingCode

  • 首页
  • 需求与产品管理
  • 项目管理
  • 测试与缺陷管理
  • 知识管理
  • 效能度量
        • 更多产品

          客户为中心的产品管理工具

          专业的软件研发项目管理工具

          简单易用的团队知识库管理

          可量化的研发效能度量工具

          测试用例维护与计划执行

          以团队为中心的协作沟通

          研发工作流自动化工具

          账号认证与安全管理工具

          Why PingCode
          为什么选择 PingCode ?

          6000+企业信赖之选,为研发团队降本增效

        • 行业解决方案
          先进制造(即将上线)
        • 解决方案1
        • 解决方案2
  • Jira替代方案

25人以下免费

目录

如何用python模拟原神抽卡

如何用python模拟原神抽卡

用Python模拟原神抽卡的步骤包括构建池子、设置概率、实现抽卡逻辑、统计结果、优化代码性能。
在详细描述中,我们将展开如何构建池子、设置概率、实现抽卡逻辑,并通过代码实例帮助大家理解。

一、构建池子

原神的抽卡系统分为常驻池和限定池。常驻池包含永久存在的角色和武器,而限定池则会在特定时间段内更新角色和武器。为了模拟抽卡,我们需要定义这些池子。

permanent_pool = {

"5_star": ["Diluc", "Jean", "Keqing", "Mona", "Qiqi"],

"4_star": ["Noelle", "Fischl", "Xiangling", "Barbara", "Razor", "Beidou", "Ningguang", "Chongyun", "Bennett"],

"3_star": ["Cool Steel", "Harbinger of Dawn", "Magic Guide", "Debate Club", "Slingshot", "Sharpshooter's Oath"]

}

limited_pool = {

"5_star": ["Klee", "Venti", "Childe", "Zhongli"],

"4_star": ["Sucrose", "Diona", "Xingqiu", "Razor", "Beidou", "Noelle"],

"3_star": ["Cool Steel", "Harbinger of Dawn", "Magic Guide", "Debate Club", "Slingshot", "Sharpshooter's Oath"]

}

二、设置概率

原神的抽卡机制中,5星角色的基础概率为0.6%,4星角色的基础概率为5.1%,其余为3星武器。我们可以通过设置权重来实现这些概率。

import random

def get_rarity():

rand = random.random()

if rand < 0.006:

return "5_star"

elif rand < 0.057:

return "4_star"

else:

return "3_star"

三、实现抽卡逻辑

在实现抽卡逻辑时,我们需要考虑保底机制。在原神中,每90次抽卡至少会有一个5星角色,每10次抽卡至少会有一个4星角色。

def draw(pool, pity_5=0, pity_4=0):

pity_5 += 1

pity_4 += 1

if pity_5 >= 90:

rarity = "5_star"

pity_5 = 0

elif pity_4 >= 10:

rarity = "4_star"

pity_4 = 0

else:

rarity = get_rarity()

if rarity == "5_star":

pity_5 = 0

elif rarity == "4_star":

pity_4 = 0

return random.choice(pool[rarity]), pity_5, pity_4

四、统计结果

为了分析模拟的抽卡结果,我们需要统计每次抽卡的结果。

def simulate_draws(pool, num_draws):

results = {"5_star": 0, "4_star": 0, "3_star": 0}

pity_5 = 0

pity_4 = 0

for _ in range(num_draws):

rarity, pity_5, pity_4 = draw(pool, pity_5, pity_4)

results[rarity] += 1

return results

五、优化代码性能

在实际应用中,为了提升代码性能,我们可以利用NumPy库进行向量化操作,从而加速概率计算和抽卡逻辑。

import numpy as np

def get_rarity_vectorized(size):

rand = np.random.random(size)

rarity = np.where(rand < 0.006, "5_star", np.where(rand < 0.057, "4_star", "3_star"))

return rarity

def draw_vectorized(pool, num_draws):

pity_5 = np.zeros(num_draws)

pity_4 = np.zeros(num_draws)

rarity = get_rarity_vectorized(num_draws)

for i in range(1, num_draws):

pity_5[i] = pity_5[i - 1] + 1

pity_4[i] = pity_4[i - 1] + 1

if pity_5[i] >= 90:

rarity[i] = "5_star"

pity_5[i] = 0

elif pity_4[i] >= 10:

rarity[i] = "4_star"

pity_4[i] = 0

elif rarity[i] == "5_star":

pity_5[i] = 0

elif rarity[i] == "4_star":

pity_4[i] = 0

results = {key: np.sum(rarity == key) for key in pool.keys()}

return results

Example usage

pool = limited_pool

num_draws = 1000

results = draw_vectorized(pool, num_draws)

print(results)

通过以上步骤,我们实现了一个完整的原神抽卡模拟器。从构建池子、设置概率到实现抽卡逻辑和统计结果,每一步都非常详细。最后,通过使用NumPy库对代码进行优化,大大提高了代码的性能和运行效率。希望通过这篇文章,能够帮助大家更好地理解和实现原神的抽卡机制。

相关问答FAQs:

如何使用Python编写原神抽卡模拟器?
要创建一个原神抽卡模拟器,您可以使用Python的随机数生成库来模拟抽卡的概率机制。首先,您需要定义每种角色和武器的稀有度,并根据这些稀有度设置概率。接下来,编写一个函数来模拟抽卡过程,根据生成的随机数判断抽中的物品。

原神抽卡的概率是如何计算的?
在原神中,抽卡的概率是根据每个角色和武器的稀有度设定的。通常情况下,5星角色的出现概率较低,而4星角色的概率则相对较高。通过分析游戏内的抽卡机制,您可以将这些概率转化为Python代码,使用随机数生成器来判断每次抽卡结果。

是否可以添加抽卡记录功能?
当然可以!在您的抽卡模拟器中,您可以创建一个记录系统,保存每次抽卡的结果以及抽卡次数。这不仅可以帮助您了解抽卡的历史,还可以用来分析抽卡的运气和效率。通过将结果存储在列表或文件中,您可以轻松追踪抽卡的情况和结果统计。

相关文章