固定概率的抽卡系统(参考公主连结的抽卡机制)

当今抽卡游戏在年轻人间流行,像原神、崩坏:星穹铁道、绝区零这类二次元游戏也不乏抽卡的游戏模式,但各游戏的抽卡机制都不一样,有固定概率的、也有随抽取次数而增加概率的。

我参考的是《公主连结》这款游戏的抽卡机制,也能帮助我的朋友在每次出新卡池前试试手气,手气不好的话,就懂得都懂了。项目链接放在文章最后,感兴趣的朋友可以来玩一玩。

废话不多说,上代码(单抽代码):

# -*- coding: utf-8 -*-
import random

def random_one():
    # 读取文件的示例
    try:
        jdt = False
        with open("../docs/fes.data", "r", encoding="utf-8") as fp_fes:
            fp_fes_list = fp_fes.readlines()

        my_list = []

        num = random.random()
        if num < 0.025:  # 2.5%的概率输出“彩色”
            my_list.append(random.choice(fp_fes_list).strip())
        elif num < 0.205:  # 18%的概率输出“金色”
            my_list.append("金")
            have_color = True
        else:  # 79.5%的概率输出“银色”
            my_list.append("银")

        my_list_1 = set(my_list)
        with open("../docs/ihave.data", "r", encoding="utf-8") as fp_fes:
            fp_fes_list = {line.strip() for line in fp_fes.readlines()}

        if not my_list_1 <= fp_fes_list:
            unique_elements = my_list_1 - set(fp_fes_list)
            elements_to_write = "\n".join(unique_elements)
            with open("../docs/ihave.data", "a", encoding="utf-8") as fp_ihave:
                fp_ihave.write(elements_to_write + "\n")  # 添加换行符以分隔追加的内容
            jdt = True

        return my_list, jdt

    except Exception as e:
        print(f"发生错误: {e}")

这是其中的一部分代码,读取文件是为了将抽取结果保存下来。

关于概率的部分代码,使用一个简单的随机数便能实现。与大多数游戏一样,这个游戏也有三种不同的卡片,每种的概率也不同,但十连抽多了一个保底机制——如果前九次出来的都是“银”,那么第十次出来的一定是“金”,或者“彩”,且“银”的概率加在“金”上面。要实现这个也比较容易,在循环里定义一个布尔变量,如果有非“银”的出现就不改动,否则改变进入第十次抽取。这部分上面的代码就没有显示出来了。

最后一个if语句可以用来判断是否抽取出来的角色中有新的角色。在这个游戏中,每当有新角色被抽出来时都会有一段进度条加载,所以我添加了jdt(进度条)这个变量来传递变量。

项目链接:Card-Drawing-Simulator-based-on-Princess-Connect-Re

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值